You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tvm.apache.org by tq...@apache.org on 2024/03/11 04:14:17 UTC

(tvm-site) branch asf-site updated: deploying docs (apache/tvm@c43fad1d603434d2316f3a2268e978dd06335c9a)

This is an automated email from the ASF dual-hosted git repository.

tqchen pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/tvm-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 963ac46dc1 deploying docs (apache/tvm@c43fad1d603434d2316f3a2268e978dd06335c9a)
963ac46dc1 is described below

commit 963ac46dc1c652794111a0e735fb46b4d0209eec
Author: tvm-bot <95...@users.noreply.github.com>
AuthorDate: Mon Mar 11 04:14:09 2024 +0000

    deploying docs (apache/tvm@c43fad1d603434d2316f3a2268e978dd06335c9a)
---
 .../how_to/compile_models/from_darknet.rst.txt     |    2 +-
 .../how_to/compile_models/from_oneflow.rst.txt     |    2 +-
 .../how_to/compile_models/from_paddle.rst.txt      |    5 +
 .../how_to/compile_models/from_pytorch.rst.txt     |    2 +-
 .../how_to/compile_models/from_tensorflow.rst.txt  |    2 +-
 .../compile_models/sg_execution_times.rst.txt      |   20 +-
 .../deploy_models/deploy_model_on_adreno.rst.txt   |    4 +-
 .../deploy_model_on_adreno_tvmc.rst.txt            |    2 +-
 .../deploy_models/deploy_model_on_android.rst.txt  |    2 +-
 .../deploy_object_detection_pytorch.rst.txt        |    4 +-
 .../deploy_models/deploy_prequantized.rst.txt      |    6 +-
 .../deploy_prequantized_tflite.rst.txt             |    2 +-
 .../deploy_models/sg_execution_times.rst.txt       |   18 +-
 .../how_to/extend_tvm/sg_execution_times.rst.txt   |    6 +-
 .../how_to/extend_tvm/use_pass_instrument.rst.txt  |   16 +-
 .../optimize_operators/opt_conv_cuda.rst.txt       |    2 +-
 .../optimize_operators/opt_conv_tensorcore.rst.txt |    2 +-
 .../how_to/optimize_operators/opt_gemm.rst.txt     |   16 +-
 .../optimize_operators/sg_execution_times.rst.txt  |    8 +-
 .../sg_execution_times.rst.txt                     |   28 +-
 .../tune_conv2d_layer_cuda.rst.txt                 |    2 +-
 .../tune_network_cuda.rst.txt                      |    4 +-
 .../tune_network_x86.rst.txt                       |    4 +-
 .../tune_with_autotvm/sg_execution_times.rst.txt   |    6 +-
 .../tune_with_autotvm/tune_conv2d_cuda.rst.txt     |    2 +-
 .../work_with_microtvm/micro_autotune.rst.txt      |   18 +-
 .../work_with_microtvm/micro_pytorch.rst.txt       |    4 +-
 .../how_to/work_with_microtvm/micro_train.rst.txt  |   16 +-
 .../work_with_microtvm/sg_execution_times.rst.txt  |   14 +-
 .../work_with_relay/sg_execution_times.rst.txt     |    8 +-
 .../how_to/work_with_schedules/intrin_math.rst.txt |    2 +-
 .../work_with_schedules/sg_execution_times.rst.txt |   12 +-
 .../tutorials/frontend/deploy_detection.rst.txt    |    2 +-
 .../tutorials/frontend/sg_execution_times.rst.txt  |    4 +-
 .../tutorials/optimize/sg_execution_times.rst.txt  |    6 +-
 .../topic/vta/tutorials/sg_execution_times.rst.txt |    6 +-
 .../tutorial/auto_scheduler_matmul_x86.rst.txt     |   11 +-
 docs/_sources/tutorial/autotvm_matmul_x86.rst.txt  |   20 +-
 docs/_sources/tutorial/autotvm_relay_x86.rst.txt   |   60 +-
 .../tutorial/cross_compilation_and_rpc.rst.txt     |    2 +-
 docs/_sources/tutorial/intro_topi.rst.txt          |    2 +-
 docs/_sources/tutorial/sg_execution_times.rst.txt  |   18 +-
 .../tutorial/tensor_expr_get_started.rst.txt       |   42 +-
 docs/commit_hash                                   |    2 +-
 docs/how_to/compile_models/from_darknet.html       |    2 +-
 docs/how_to/compile_models/from_oneflow.html       |   16 +-
 docs/how_to/compile_models/from_paddle.html        |    1 +
 docs/how_to/compile_models/from_pytorch.html       |   12 +-
 docs/how_to/compile_models/from_tensorflow.html    |    2 +-
 docs/how_to/compile_models/sg_execution_times.html |   20 +-
 .../deploy_models/deploy_model_on_adreno.html      |    4 +-
 .../deploy_models/deploy_model_on_adreno_tvmc.html |   19 +-
 .../deploy_models/deploy_model_on_android.html     |    2 +-
 .../deploy_object_detection_pytorch.html           |   49 +-
 docs/how_to/deploy_models/deploy_prequantized.html |    9 +-
 .../deploy_models/deploy_prequantized_tflite.html  |    2 +-
 docs/how_to/deploy_models/sg_execution_times.html  |   18 +-
 docs/how_to/extend_tvm/sg_execution_times.html     |    6 +-
 docs/how_to/extend_tvm/use_pass_instrument.html    |   16 +-
 docs/how_to/optimize_operators/opt_conv_cuda.html  |    2 +-
 .../optimize_operators/opt_conv_tensorcore.html    |    2 +-
 docs/how_to/optimize_operators/opt_gemm.html       |   16 +-
 .../optimize_operators/sg_execution_times.html     |    8 +-
 .../sg_execution_times.html                        |   16 +-
 .../tune_conv2d_layer_cuda.html                    |    2 +-
 .../tune_with_autoscheduler/tune_network_cuda.html |    4 +-
 .../tune_with_autoscheduler/tune_network_x86.html  |    4 +-
 .../tune_with_autotvm/sg_execution_times.html      |    6 +-
 .../how_to/tune_with_autotvm/tune_conv2d_cuda.html |    2 +-
 docs/how_to/work_with_microtvm/micro_autotune.html |   18 +-
 docs/how_to/work_with_microtvm/micro_pytorch.html  |    5 +-
 docs/how_to/work_with_microtvm/micro_train.html    |   16 +-
 .../work_with_microtvm/sg_execution_times.html     |   14 +-
 .../how_to/work_with_relay/sg_execution_times.html |    8 +-
 docs/how_to/work_with_schedules/intrin_math.html   |    2 +-
 .../work_with_schedules/sg_execution_times.html    |   12 +-
 docs/install/nnpack.html                           |   12 +-
 docs/reference/api/doxygen/annotated.html          |  206 +-
 docs/reference/api/doxygen/classes.html            |    2 +-
 .../classtvm_1_1relax_1_1AndPattern-members.html   |   37 +-
 .../doxygen/classtvm_1_1relax_1_1AndPattern.html   |    7 +-
 .../classtvm_1_1relax_1_1AndPatternNode.html       |    2 +-
 ...tvm_1_1relax_1_1AndPatternNode__coll__graph.svg |  205 +-
 ...lasstvm_1_1relax_1_1AndPattern__coll__graph.svg |  107 +-
 ...stvm_1_1relax_1_1AndPattern__inherit__graph.svg |   79 +-
 .../classtvm_1_1relax_1_1AttrPattern-members.html  |   37 +-
 .../doxygen/classtvm_1_1relax_1_1AttrPattern.html  |    7 +-
 .../classtvm_1_1relax_1_1AttrPatternNode.html      |    2 +-
 ...vm_1_1relax_1_1AttrPatternNode__coll__graph.svg |  205 +-
 ...asstvm_1_1relax_1_1AttrPattern__coll__graph.svg |  107 +-
 ...tvm_1_1relax_1_1AttrPattern__inherit__graph.svg |   79 +-
 .../classtvm_1_1relax_1_1CallPattern-members.html  |   37 +-
 .../doxygen/classtvm_1_1relax_1_1CallPattern.html  |    7 +-
 ...vm_1_1relax_1_1CallPatternNode__coll__graph.svg |   45 +-
 ...asstvm_1_1relax_1_1CallPattern__coll__graph.svg |  107 +-
 ...tvm_1_1relax_1_1CallPattern__inherit__graph.svg |   79 +-
 ...asstvm_1_1relax_1_1ConstantPattern-members.html |   37 +-
 .../classtvm_1_1relax_1_1ConstantPattern.html      |    7 +-
 ...vm_1_1relax_1_1ConstantPattern__coll__graph.svg |  107 +-
 ...1_1relax_1_1ConstantPattern__inherit__graph.svg |   79 +-
 .../classtvm_1_1relax_1_1DFPattern-members.html    |   35 +-
 .../doxygen/classtvm_1_1relax_1_1DFPattern.html    |   27 +-
 ...Pattern_01_6n_00_01Args_8_8_8_08_4-members.html |   21 +-
 ...nst_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html |   80 +-
 ...ern_01_6n_00_01Args_8_8_8_08_4__coll__graph.svg |    2 +-
 .../classtvm_1_1relax_1_1DFPatternNode.html        |    2 +-
 ...m_1_1relax_1_1DFPatternNode__inherit__graph.svg |  397 +-
 ...sstvm_1_1relax_1_1DFPatternVisitor-members.html |   19 +-
 .../classtvm_1_1relax_1_1DFPatternVisitor.html     |   68 +-
 ...m_1_1relax_1_1DFPatternVisitor__coll__graph.svg |    2 +-
 ..._1relax_1_1DFPatternVisitor__inherit__graph.svg |    2 +-
 ...classtvm_1_1relax_1_1DFPattern__coll__graph.svg |  103 +-
 ...sstvm_1_1relax_1_1DFPattern__inherit__graph.svg |  300 +-
 ...asstvm_1_1relax_1_1DataTypePattern-members.html |   37 +-
 .../classtvm_1_1relax_1_1DataTypePattern.html      |    7 +-
 ..._1relax_1_1DataTypePatternNode__coll__graph.svg |   45 +-
 ...vm_1_1relax_1_1DataTypePattern__coll__graph.svg |  107 +-
 ...1_1relax_1_1DataTypePattern__inherit__graph.svg |   79 +-
 ...tvm_1_1relax_1_1DataflowVarPattern-members.html |   37 +-
 .../classtvm_1_1relax_1_1DataflowVarPattern.html   |    7 +-
 ...1_1relax_1_1DataflowVarPattern__coll__graph.svg |  107 +-
 ...relax_1_1DataflowVarPattern__inherit__graph.svg |   79 +-
 .../classtvm_1_1relax_1_1ExprPattern-members.html  |   37 +-
 .../doxygen/classtvm_1_1relax_1_1ExprPattern.html  |    7 +-
 ...asstvm_1_1relax_1_1ExprPattern__coll__graph.svg |  107 +-
 ...tvm_1_1relax_1_1ExprPattern__inherit__graph.svg |   79 +-
 ...stvm_1_1relax_1_1ExternFuncPattern-members.html |   37 +-
 .../classtvm_1_1relax_1_1ExternFuncPattern.html    |    7 +-
 ..._1_1relax_1_1ExternFuncPattern__coll__graph.svg |  107 +-
 ...1relax_1_1ExternFuncPattern__inherit__graph.svg |   79 +-
 ...asstvm_1_1relax_1_1FunctionPattern-members.html |   37 +-
 .../classtvm_1_1relax_1_1FunctionPattern.html      |    7 +-
 ..._1relax_1_1FunctionPatternNode__coll__graph.svg |   45 +-
 ...vm_1_1relax_1_1FunctionPattern__coll__graph.svg |  107 +-
 ...1_1relax_1_1FunctionPattern__inherit__graph.svg |   79 +-
 ...sstvm_1_1relax_1_1GlobalVarPattern-members.html |   37 +-
 .../classtvm_1_1relax_1_1GlobalVarPattern.html     |    7 +-
 ...m_1_1relax_1_1GlobalVarPattern__coll__graph.svg |  107 +-
 ..._1relax_1_1GlobalVarPattern__inherit__graph.svg |   79 +-
 .../classtvm_1_1relax_1_1NotPattern-members.html   |   39 +-
 .../doxygen/classtvm_1_1relax_1_1NotPattern.html   |    7 +-
 .../classtvm_1_1relax_1_1NotPatternNode.html       |    2 +-
 ...tvm_1_1relax_1_1NotPatternNode__coll__graph.svg |  203 +-
 ...lasstvm_1_1relax_1_1NotPattern__coll__graph.svg |  107 +-
 ...stvm_1_1relax_1_1NotPattern__inherit__graph.svg |   79 +-
 .../classtvm_1_1relax_1_1OrPattern-members.html    |   39 +-
 .../doxygen/classtvm_1_1relax_1_1OrPattern.html    |    7 +-
 .../classtvm_1_1relax_1_1OrPatternNode.html        |    2 +-
 ...stvm_1_1relax_1_1OrPatternNode__coll__graph.svg |  205 +-
 ...classtvm_1_1relax_1_1OrPattern__coll__graph.svg |  107 +-
 ...sstvm_1_1relax_1_1OrPattern__inherit__graph.svg |   79 +-
 ...lasstvm_1_1relax_1_1PrimArrPattern-members.html |   39 +-
 .../classtvm_1_1relax_1_1PrimArrPattern.html       |    7 +-
 ...tvm_1_1relax_1_1PrimArrPattern__coll__graph.svg |  107 +-
 ..._1_1relax_1_1PrimArrPattern__inherit__graph.svg |   79 +-
 .../classtvm_1_1relax_1_1ShapePattern-members.html |   39 +-
 .../doxygen/classtvm_1_1relax_1_1ShapePattern.html |    7 +-
 ...m_1_1relax_1_1ShapePatternNode__coll__graph.svg |   47 +-
 ...sstvm_1_1relax_1_1ShapePattern__coll__graph.svg |  107 +-
 ...vm_1_1relax_1_1ShapePattern__inherit__graph.svg |   79 +-
 ...tvm_1_1relax_1_1StructInfoPattern-members.html} |   19 +-
 ...=> classtvm_1_1relax_1_1StructInfoPattern.html} |   65 +-
 ..._1_1relax_1_1StructInfoPatternNode-members.html |  117 +
 ...lasstvm_1_1relax_1_1StructInfoPatternNode.html} |   80 +-
 ...elax_1_1StructInfoPatternNode__coll__graph.svg} |  249 +-
 ...ax_1_1StructInfoPatternNode__inherit__graph.svg |  100 +
 ...1_1relax_1_1StructInfoPattern__coll__graph.svg} |   40 +-
 ...relax_1_1StructInfoPattern__inherit__graph.svg} |   40 +-
 ...vm_1_1relax_1_1TupleGetItemPattern-members.html |   39 +-
 .../classtvm_1_1relax_1_1TupleGetItemPattern.html  |    7 +-
 ...asstvm_1_1relax_1_1TupleGetItemPatternNode.html |    2 +-
 ...lax_1_1TupleGetItemPatternNode__coll__graph.svg |  203 +-
 ..._1relax_1_1TupleGetItemPattern__coll__graph.svg |  107 +-
 ...elax_1_1TupleGetItemPattern__inherit__graph.svg |   79 +-
 .../classtvm_1_1relax_1_1TuplePattern-members.html |   39 +-
 .../doxygen/classtvm_1_1relax_1_1TuplePattern.html |    7 +-
 ...sstvm_1_1relax_1_1TuplePattern__coll__graph.svg |  107 +-
 ...vm_1_1relax_1_1TuplePattern__inherit__graph.svg |   79 +-
 .../classtvm_1_1relax_1_1TypePattern-members.html  |   39 +-
 .../doxygen/classtvm_1_1relax_1_1TypePattern.html  |    7 +-
 .../classtvm_1_1relax_1_1TypePatternNode.html      |    2 +-
 ...vm_1_1relax_1_1TypePatternNode__coll__graph.svg |  223 +-
 ...asstvm_1_1relax_1_1TypePattern__coll__graph.svg |  107 +-
 ...tvm_1_1relax_1_1TypePattern__inherit__graph.svg |   79 +-
 ..._1_1relax_1_1UnorderedTuplePattern-members.html |   39 +-
 ...classtvm_1_1relax_1_1UnorderedTuplePattern.html |    7 +-
 ...relax_1_1UnorderedTuplePattern__coll__graph.svg |  107 +-
 ...ax_1_1UnorderedTuplePattern__inherit__graph.svg |   79 +-
 .../classtvm_1_1relax_1_1VarPattern-members.html   |   39 +-
 .../doxygen/classtvm_1_1relax_1_1VarPattern.html   |    7 +-
 ...lasstvm_1_1relax_1_1VarPattern__coll__graph.svg |  107 +-
 ...stvm_1_1relax_1_1VarPattern__inherit__graph.svg |   79 +-
 ...asstvm_1_1relax_1_1WildcardPattern-members.html |   39 +-
 .../classtvm_1_1relax_1_1WildcardPattern.html      |    7 +-
 ...vm_1_1relax_1_1WildcardPattern__coll__graph.svg |  107 +-
 ...1_1relax_1_1WildcardPattern__inherit__graph.svg |   79 +-
 ...transform_1_1FusionPatternNode__coll__graph.svg |   45 +-
 ...asstvm_1_1runtime_1_1Object__inherit__graph.svg |  728 +-
 docs/reference/api/doxygen/functions__.html        |    1 +
 docs/reference/api/doxygen/functions_a.html        |    4 +-
 docs/reference/api/doxygen/functions_c.html        |    2 +-
 docs/reference/api/doxygen/functions_f.html        |    2 +-
 docs/reference/api/doxygen/functions_func_h.html   |    3 +
 docs/reference/api/doxygen/functions_func_n.html   |    2 +-
 docs/reference/api/doxygen/functions_func_s.html   |   11 +-
 docs/reference/api/doxygen/functions_func_t.html   |   10 +-
 docs/reference/api/doxygen/functions_func_v.html   |   13 +-
 docs/reference/api/doxygen/functions_h.html        |    3 +
 docs/reference/api/doxygen/functions_o.html        |    2 +-
 docs/reference/api/doxygen/functions_p.html        |    9 +-
 docs/reference/api/doxygen/functions_s.html        |   18 +-
 docs/reference/api/doxygen/functions_t.html        |   18 +-
 docs/reference/api/doxygen/functions_v.html        |   21 +-
 docs/reference/api/doxygen/functions_vars.html     |    1 +
 docs/reference/api/doxygen/functions_vars_p.html   |    1 +
 docs/reference/api/doxygen/functions_vars_s.html   |    1 +
 docs/reference/api/doxygen/hierarchy.html          |   30 +-
 docs/reference/api/doxygen/inherit_graph_128.svg   | 9015 ++++++++++----------
 docs/reference/api/doxygen/inherit_graph_142.svg   | 3169 +++----
 docs/reference/api/doxygen/inherit_graph_232.svg   |   16 +-
 docs/reference/api/doxygen/inherit_graph_234.svg   |   24 +-
 docs/reference/api/doxygen/inherit_graph_39.svg    |    8 +-
 docs/reference/api/doxygen/inherits.html           |    2 +-
 docs/reference/api/doxygen/namespacemembers_b.html |    2 +-
 docs/reference/api/doxygen/namespacemembers_e.html |    2 +-
 .../api/doxygen/namespacemembers_func_b.html       |    2 +-
 .../api/doxygen/namespacemembers_func_s.html       |    3 +
 docs/reference/api/doxygen/namespacemembers_s.html |    5 +-
 docs/reference/api/doxygen/namespaces.html         |  206 +-
 .../api/doxygen/namespacetvm_1_1relax.html         |   50 +
 docs/reference/api/doxygen/relax_2analysis_8h.html |    3 +
 .../api/doxygen/relax_2analysis_8h_source.html     |  186 +-
 .../relax_2dataflow__matcher_8h_source.html        |    4 +-
 .../api/doxygen/relax_2dataflow__pattern_8h.html   |    5 +
 .../relax_2dataflow__pattern_8h_source.html        | 1380 +--
 ...elax_2dataflow__pattern__functor_8h_source.html |  233 +-
 .../api/doxygen/relax_2transform_8h_source.html    |    2 +-
 docs/reference/api/doxygen/search/all_1.js         |    2 +-
 docs/reference/api/doxygen/search/all_10.js        |  403 +-
 docs/reference/api/doxygen/search/all_11.js        |  654 +-
 docs/reference/api/doxygen/search/all_12.js        |   14 +-
 docs/reference/api/doxygen/search/all_13.js        |  647 +-
 docs/reference/api/doxygen/search/all_14.js        | 1092 +--
 docs/reference/api/doxygen/search/all_15.js        |  748 +-
 docs/reference/api/doxygen/search/all_16.js        |  163 +-
 docs/reference/api/doxygen/search/all_17.js        |  301 +-
 docs/reference/api/doxygen/search/all_18.js        |  156 +-
 docs/reference/api/doxygen/search/all_19.js        |    4 +-
 docs/reference/api/doxygen/search/all_1a.js        |    2 +-
 docs/reference/api/doxygen/search/all_1b.js        |  136 +-
 docs/reference/api/doxygen/search/all_2.js         |    8 +-
 docs/reference/api/doxygen/search/all_3.js         |    8 +-
 docs/reference/api/doxygen/search/all_4.js         |    4 +-
 docs/reference/api/doxygen/search/all_6.js         |  232 +-
 docs/reference/api/doxygen/search/all_7.js         |  735 +-
 docs/reference/api/doxygen/search/all_8.js         |  402 +-
 docs/reference/api/doxygen/search/all_9.js         |   47 +-
 docs/reference/api/doxygen/search/all_a.js         |   67 +-
 docs/reference/api/doxygen/search/all_b.js         |   10 +-
 docs/reference/api/doxygen/search/all_c.js         |  820 +-
 docs/reference/api/doxygen/search/all_d.js         |  324 +-
 docs/reference/api/doxygen/search/all_e.js         |  562 +-
 docs/reference/api/doxygen/search/all_f.js         |  239 +-
 docs/reference/api/doxygen/search/classes_0.js     |  680 +-
 docs/reference/api/doxygen/search/classes_1.js     |  156 +-
 docs/reference/api/doxygen/search/classes_10.js    |  158 +-
 docs/reference/api/doxygen/search/classes_11.js    |  316 +-
 docs/reference/api/doxygen/search/classes_12.js    |  326 +-
 docs/reference/api/doxygen/search/classes_13.js    |   18 +-
 docs/reference/api/doxygen/search/classes_14.js    |   48 +-
 docs/reference/api/doxygen/search/classes_15.js    |   42 +-
 docs/reference/api/doxygen/search/classes_16.js    |    2 +-
 docs/reference/api/doxygen/search/classes_2.js     |  188 +-
 docs/reference/api/doxygen/search/classes_3.js     |  168 +-
 docs/reference/api/doxygen/search/classes_4.js     |   94 +-
 docs/reference/api/doxygen/search/classes_5.js     |   96 +-
 docs/reference/api/doxygen/search/classes_6.js     |   46 +-
 docs/reference/api/doxygen/search/classes_7.js     |   16 +-
 docs/reference/api/doxygen/search/classes_8.js     |  182 +-
 docs/reference/api/doxygen/search/classes_9.js     |    4 +-
 docs/reference/api/doxygen/search/classes_a.js     |   74 +-
 docs/reference/api/doxygen/search/classes_b.js     |  184 +-
 docs/reference/api/doxygen/search/classes_c.js     |   42 +-
 docs/reference/api/doxygen/search/classes_d.js     |  182 +-
 docs/reference/api/doxygen/search/classes_e.js     |  242 +-
 docs/reference/api/doxygen/search/classes_f.js     |    2 +-
 docs/reference/api/doxygen/search/defines_0.js     |    8 +-
 docs/reference/api/doxygen/search/defines_1.js     |    4 +-
 docs/reference/api/doxygen/search/defines_2.js     |    4 +-
 docs/reference/api/doxygen/search/defines_3.js     |    2 +-
 docs/reference/api/doxygen/search/defines_4.js     |    4 +-
 docs/reference/api/doxygen/search/defines_5.js     |   12 +-
 docs/reference/api/doxygen/search/defines_6.js     |   20 +-
 docs/reference/api/doxygen/search/defines_7.js     |    8 +-
 docs/reference/api/doxygen/search/defines_8.js     |  190 +-
 docs/reference/api/doxygen/search/defines_9.js     |    2 +-
 docs/reference/api/doxygen/search/enums_0.js       |   10 +-
 docs/reference/api/doxygen/search/enums_1.js       |    8 +-
 docs/reference/api/doxygen/search/enums_2.js       |    8 +-
 docs/reference/api/doxygen/search/enums_3.js       |   10 +-
 docs/reference/api/doxygen/search/enums_4.js       |    8 +-
 docs/reference/api/doxygen/search/enums_5.js       |    6 +-
 docs/reference/api/doxygen/search/enums_6.js       |    8 +-
 docs/reference/api/doxygen/search/enums_7.js       |    2 +-
 docs/reference/api/doxygen/search/enums_8.js       |    4 +-
 docs/reference/api/doxygen/search/enums_9.js       |   12 +-
 docs/reference/api/doxygen/search/enums_a.js       |    4 +-
 docs/reference/api/doxygen/search/enums_b.js       |    6 +-
 docs/reference/api/doxygen/search/enums_c.js       |    2 +-
 docs/reference/api/doxygen/search/enums_d.js       |   10 +-
 docs/reference/api/doxygen/search/enums_e.js       |   16 +-
 docs/reference/api/doxygen/search/enums_f.js       |    2 +-
 docs/reference/api/doxygen/search/enumvalues_0.js  |   10 +-
 docs/reference/api/doxygen/search/enumvalues_1.js  |    2 +-
 docs/reference/api/doxygen/search/enumvalues_2.js  |    2 +-
 docs/reference/api/doxygen/search/enumvalues_3.js  |    2 +-
 docs/reference/api/doxygen/search/enumvalues_4.js  |   36 +-
 docs/reference/api/doxygen/search/enumvalues_5.js  |    6 +-
 docs/reference/api/doxygen/search/enumvalues_6.js  |   10 +-
 docs/reference/api/doxygen/search/enumvalues_7.js  |  632 +-
 docs/reference/api/doxygen/search/enumvalues_8.js  |    4 +-
 docs/reference/api/doxygen/search/enumvalues_9.js  |    2 +-
 docs/reference/api/doxygen/search/enumvalues_a.js  |    4 +-
 docs/reference/api/doxygen/search/enumvalues_b.js  |    6 +-
 docs/reference/api/doxygen/search/enumvalues_c.js  |    4 +-
 docs/reference/api/doxygen/search/enumvalues_d.js  |    2 +-
 docs/reference/api/doxygen/search/files_0.js       |   34 +-
 docs/reference/api/doxygen/search/files_1.js       |   32 +-
 docs/reference/api/doxygen/search/files_10.js      |   42 +-
 docs/reference/api/doxygen/search/files_11.js      |    2 +-
 docs/reference/api/doxygen/search/files_12.js      |   10 +-
 docs/reference/api/doxygen/search/files_13.js      |    6 +-
 docs/reference/api/doxygen/search/files_2.js       |   26 +-
 docs/reference/api/doxygen/search/files_3.js       |   38 +-
 docs/reference/api/doxygen/search/files_4.js       |   26 +-
 docs/reference/api/doxygen/search/files_5.js       |   20 +-
 docs/reference/api/doxygen/search/files_6.js       |   14 +-
 docs/reference/api/doxygen/search/files_7.js       |   28 +-
 docs/reference/api/doxygen/search/files_8.js       |   10 +-
 docs/reference/api/doxygen/search/files_9.js       |   34 +-
 docs/reference/api/doxygen/search/files_a.js       |   16 +-
 docs/reference/api/doxygen/search/files_b.js       |   16 +-
 docs/reference/api/doxygen/search/files_c.js       |   26 +-
 docs/reference/api/doxygen/search/files_d.js       |    2 +-
 docs/reference/api/doxygen/search/files_e.js       |   26 +-
 docs/reference/api/doxygen/search/files_f.js       |   58 +-
 docs/reference/api/doxygen/search/functions_0.js   |   12 +-
 docs/reference/api/doxygen/search/functions_1.js   |  346 +-
 docs/reference/api/doxygen/search/functions_10.js  |  297 +-
 docs/reference/api/doxygen/search/functions_11.js  |    8 +-
 docs/reference/api/doxygen/search/functions_12.js  |  332 +-
 docs/reference/api/doxygen/search/functions_13.js  |  531 +-
 docs/reference/api/doxygen/search/functions_14.js  |  532 +-
 docs/reference/api/doxygen/search/functions_15.js  |  132 +-
 docs/reference/api/doxygen/search/functions_16.js  |  176 +-
 docs/reference/api/doxygen/search/functions_17.js  |   76 +-
 docs/reference/api/doxygen/search/functions_18.js  |    2 +-
 docs/reference/api/doxygen/search/functions_19.js  |  136 +-
 docs/reference/api/doxygen/search/functions_2.js   |  155 +-
 docs/reference/api/doxygen/search/functions_3.js   |  394 +-
 docs/reference/api/doxygen/search/functions_4.js   |  268 +-
 docs/reference/api/doxygen/search/functions_5.js   |  173 +-
 docs/reference/api/doxygen/search/functions_6.js   |  310 +-
 docs/reference/api/doxygen/search/functions_7.js   |  334 +-
 docs/reference/api/doxygen/search/functions_8.js   |   57 +-
 docs/reference/api/doxygen/search/functions_9.js   |  432 +-
 docs/reference/api/doxygen/search/functions_a.js   |   10 +-
 docs/reference/api/doxygen/search/functions_b.js   |    8 +-
 docs/reference/api/doxygen/search/functions_c.js   |  198 +-
 docs/reference/api/doxygen/search/functions_d.js   |  242 +-
 docs/reference/api/doxygen/search/functions_e.js   |  118 +-
 docs/reference/api/doxygen/search/functions_f.js   |  156 +-
 docs/reference/api/doxygen/search/namespaces_0.js  |    4 +-
 docs/reference/api/doxygen/search/namespaces_1.js  |   86 +-
 docs/reference/api/doxygen/search/related_0.js     |    2 +-
 docs/reference/api/doxygen/search/related_1.js     |   10 +-
 docs/reference/api/doxygen/search/related_10.js    |    2 +-
 docs/reference/api/doxygen/search/related_11.js    |    8 +-
 docs/reference/api/doxygen/search/related_12.js    |   12 +-
 docs/reference/api/doxygen/search/related_2.js     |    2 +-
 docs/reference/api/doxygen/search/related_3.js     |   12 +-
 docs/reference/api/doxygen/search/related_4.js     |   14 +-
 docs/reference/api/doxygen/search/related_5.js     |    2 +-
 docs/reference/api/doxygen/search/related_6.js     |    6 +-
 docs/reference/api/doxygen/search/related_7.js     |    8 +-
 docs/reference/api/doxygen/search/related_8.js     |    2 +-
 docs/reference/api/doxygen/search/related_9.js     |   14 +-
 docs/reference/api/doxygen/search/related_a.js     |    2 +-
 docs/reference/api/doxygen/search/related_b.js     |   24 +-
 docs/reference/api/doxygen/search/related_c.js     |    2 +-
 docs/reference/api/doxygen/search/related_d.js     |   10 +-
 docs/reference/api/doxygen/search/related_e.js     |   10 +-
 docs/reference/api/doxygen/search/related_f.js     |   24 +-
 docs/reference/api/doxygen/search/typedefs_0.js    |    8 +-
 docs/reference/api/doxygen/search/typedefs_1.js    |    8 +-
 docs/reference/api/doxygen/search/typedefs_10.js   |    4 +-
 docs/reference/api/doxygen/search/typedefs_11.js   |    2 +-
 docs/reference/api/doxygen/search/typedefs_2.js    |   10 +-
 docs/reference/api/doxygen/search/typedefs_3.js    |   10 +-
 docs/reference/api/doxygen/search/typedefs_4.js    |   14 +-
 docs/reference/api/doxygen/search/typedefs_5.js    |  150 +-
 docs/reference/api/doxygen/search/typedefs_6.js    |    8 +-
 docs/reference/api/doxygen/search/typedefs_7.js    |   22 +-
 docs/reference/api/doxygen/search/typedefs_8.js    |    6 +-
 docs/reference/api/doxygen/search/typedefs_9.js    |    4 +-
 docs/reference/api/doxygen/search/typedefs_a.js    |   14 +-
 docs/reference/api/doxygen/search/typedefs_b.js    |    6 +-
 docs/reference/api/doxygen/search/typedefs_c.js    |   22 +-
 docs/reference/api/doxygen/search/typedefs_d.js    |   18 +-
 docs/reference/api/doxygen/search/typedefs_e.js    |   24 +-
 docs/reference/api/doxygen/search/typedefs_f.js    |  124 +-
 docs/reference/api/doxygen/search/variables_0.js   |   18 +-
 docs/reference/api/doxygen/search/variables_1.js   |  124 +-
 docs/reference/api/doxygen/search/variables_10.js  |    2 +-
 docs/reference/api/doxygen/search/variables_11.js  |  152 +-
 docs/reference/api/doxygen/search/variables_12.js  |  238 +-
 docs/reference/api/doxygen/search/variables_13.js  |  164 +-
 docs/reference/api/doxygen/search/variables_14.js  |   14 +-
 docs/reference/api/doxygen/search/variables_15.js  |   86 +-
 docs/reference/api/doxygen/search/variables_16.js  |   36 +-
 docs/reference/api/doxygen/search/variables_17.js  |    2 +-
 docs/reference/api/doxygen/search/variables_2.js   |   96 +-
 docs/reference/api/doxygen/search/variables_3.js   |  172 +-
 docs/reference/api/doxygen/search/variables_4.js   |  154 +-
 docs/reference/api/doxygen/search/variables_5.js   |   76 +-
 docs/reference/api/doxygen/search/variables_6.js   |  164 +-
 docs/reference/api/doxygen/search/variables_7.js   |   26 +-
 docs/reference/api/doxygen/search/variables_8.js   |   24 +-
 docs/reference/api/doxygen/search/variables_9.js   |  160 +-
 docs/reference/api/doxygen/search/variables_a.js   |  184 +-
 docs/reference/api/doxygen/search/variables_b.js   |   56 +-
 docs/reference/api/doxygen/search/variables_c.js   |  138 +-
 docs/reference/api/doxygen/search/variables_d.js   |   86 +-
 docs/reference/api/doxygen/search/variables_e.js   |   72 +-
 docs/reference/api/doxygen/search/variables_f.js   |  140 +-
 docs/reference/api/python/auto_scheduler.html      |    4 +-
 .../api/typedoc/classes/ArtifactCache.html         |   10 +-
 docs/reference/api/typedoc/classes/DLDataType.html |   14 +-
 docs/reference/api/typedoc/classes/DLDevice.html   |   12 +-
 docs/reference/api/typedoc/classes/Instance.html   |  104 +-
 docs/reference/api/typedoc/classes/Module.html     |   12 +-
 docs/reference/api/typedoc/classes/NDArray.html    |   30 +-
 docs/reference/api/typedoc/classes/RPCServer.html  |   16 +-
 docs/reference/api/typedoc/classes/Scalar.html     |    8 +-
 docs/reference/api/typedoc/classes/TVMArray.html   |   16 +-
 docs/reference/api/typedoc/classes/TVMObject.html  |   12 +-
 .../api/typedoc/classes/VirtualMachine.html        |   10 +-
 .../classes/_internal_.CachedCallStack.html        |   36 +-
 .../classes/_internal_.CanvasRenderManager.html    |   10 +-
 .../typedoc/classes/_internal_.Environment.html    |   14 +-
 .../api/typedoc/classes/_internal_.FFILibrary.html |   22 +-
 .../api/typedoc/classes/_internal_.Memory.html     |   36 +-
 .../typedoc/classes/_internal_.PackedFuncCell.html |    8 +-
 .../typedoc/classes/_internal_.RuntimeContext.html |   54 +-
 .../api/typedoc/classes/_internal_.TVMString.html  |   14 +-
 .../typedoc/classes/_internal_.WebGPUContext.html  |   28 +-
 .../typedoc/enums/_internal_.RPCServerState.html   |   14 +-
 docs/reference/api/typedoc/functions/assert.html   |    2 +-
 .../api/typedoc/functions/createPolyfillWASI.html  |    2 +-
 .../api/typedoc/functions/deleteNDArrayCache.html  |    2 +-
 .../api/typedoc/functions/detectGPUDevice.html     |    2 +-
 .../api/typedoc/functions/hasNDArrayInCache.html   |    2 +-
 .../api/typedoc/functions/instantiate.html         |    2 +-
 docs/reference/api/typedoc/functions/wasmPath.html |    2 +-
 .../api/typedoc/interfaces/Disposable.html         |    4 +-
 .../typedoc/interfaces/GPUDeviceDetectOutput.html  |    8 +-
 .../api/typedoc/interfaces/InitProgressReport.html |   10 +-
 .../api/typedoc/interfaces/LibraryProvider.html    |    6 +-
 .../_internal_.ArtifactCacheTemplate.html          |    8 +-
 .../interfaces/_internal_.FunctionInfo.html        |    8 +-
 .../interfaces/_internal_.NDArrayCacheEntry.html   |   14 +-
 .../interfaces/_internal_.NDArrayShardEntry.html   |   10 +-
 .../api/typedoc/types/InitProgressCallback.html    |    2 +-
 docs/reference/api/typedoc/types/PackedFunc.html   |    2 +-
 .../types/_internal_.FObjectConstructor.html       |    2 +-
 .../types/_internal_.FTVMWasmAllocSpace.html       |    2 +-
 .../types/_internal_.FTVMWasmFreeSpace.html        |    2 +-
 .../types/_internal_.FTVMWasmPackedCFunc.html      |    2 +-
 .../api/typedoc/types/_internal_.Pointer.html      |    2 +-
 .../typedoc/types/_internal_.TVMObjectBase.html    |    2 +-
 docs/searchindex.js                                |    2 +-
 .../vta/tutorials/frontend/deploy_detection.html   |    2 +-
 .../vta/tutorials/frontend/sg_execution_times.html |    4 +-
 .../vta/tutorials/optimize/sg_execution_times.html |    6 +-
 docs/topic/vta/tutorials/sg_execution_times.html   |    6 +-
 docs/tutorial/auto_scheduler_matmul_x86.html       |    7 +-
 docs/tutorial/autotvm_matmul_x86.html              |   20 +-
 docs/tutorial/autotvm_relay_x86.html               |  274 +-
 docs/tutorial/cross_compilation_and_rpc.html       |    2 +-
 docs/tutorial/intro_topi.html                      |    2 +-
 docs/tutorial/sg_execution_times.html              |   18 +-
 docs/tutorial/tensor_expr_get_started.html         |   42 +-
 492 files changed, 23400 insertions(+), 22719 deletions(-)

diff --git a/docs/_sources/how_to/compile_models/from_darknet.rst.txt b/docs/_sources/how_to/compile_models/from_darknet.rst.txt
index aa568687fa..10b362ff4e 100644
--- a/docs/_sources/how_to/compile_models/from_darknet.rst.txt
+++ b/docs/_sources/how_to/compile_models/from_darknet.rst.txt
@@ -318,7 +318,7 @@ The process is no different from other examples.
 
 .. rst-class:: sphx-glr-timing
 
-   **Total running time of the script:** ( 1 minutes  30.641 seconds)
+   **Total running time of the script:** ( 1 minutes  33.928 seconds)
 
 
 .. _sphx_glr_download_how_to_compile_models_from_darknet.py:
diff --git a/docs/_sources/how_to/compile_models/from_oneflow.rst.txt b/docs/_sources/how_to/compile_models/from_oneflow.rst.txt
index a6e862af37..9c2ea0fe0e 100644
--- a/docs/_sources/how_to/compile_models/from_oneflow.rst.txt
+++ b/docs/_sources/how_to/compile_models/from_oneflow.rst.txt
@@ -121,7 +121,7 @@ Load a pretrained OneFlow model and save model
  .. code-block:: none
 
     Downloading: "https://oneflow-public.oss-cn-beijing.aliyuncs.com/model_zoo/flowvision/classification/ResNet/resnet18.zip" to /workspace/.oneflow/flowvision_cache/resnet18.zip
-       0%|          | 0.00/41.5M [00:00<?, ?B/s]      15%|#5        | 6.33M/41.5M [00:00<00:02, 13.8MB/s]      19%|#9        | 7.99M/41.5M [00:00<00:02, 14.5MB/s]      39%|###8      | 16.0M/41.5M [00:00<00:01, 22.6MB/s]      58%|#####7    | 24.0M/41.5M [00:01<00:00, 31.0MB/s]      77%|#######7  | 32.0M/41.5M [00:01<00:00, 39.1MB/s]      92%|#########2| 38.3M/41.5M [00:01<00:00, 38.1MB/s]     100%|##########| 41.5M/41.5M [00:01<00:00, 30.9MB/s]
+       0%|          | 0.00/41.5M [00:00<?, ?B/s]      15%|#5        | 6.33M/41.5M [00:00<00:01, 18.6MB/s]      20%|#9        | 8.11M/41.5M [00:00<00:02, 16.6MB/s]      35%|###4      | 14.3M/41.5M [00:00<00:01, 27.9MB/s]      42%|####2     | 17.5M/41.5M [00:00<00:00, 28.9MB/s]      54%|#####3    | 22.3M/41.5M [00:00<00:00, 31.5MB/s]      62%|######1   | 25.6M/41.5M [00:00<00:00, 29.8MB/s]      77%|#######7  | 32.0M/41.5M [00:01<00:00, 37.2MB/s]      92%|#########2| 38.3M/41.5M [00:01<00:00, 41.5MB/s]     100%|##########| 41.5M/41.5M [00:01<00:00, 32.6MB/s]
 
 
 
diff --git a/docs/_sources/how_to/compile_models/from_paddle.rst.txt b/docs/_sources/how_to/compile_models/from_paddle.rst.txt
index 8df75c9e33..359057e5b5 100644
--- a/docs/_sources/how_to/compile_models/from_paddle.rst.txt
+++ b/docs/_sources/how_to/compile_models/from_paddle.rst.txt
@@ -207,6 +207,11 @@ Look up prediction top 1 index in 1000 class synset.
 
 
 
+.. rst-class:: sphx-glr-timing
+
+   **Total running time of the script:** ( 1 minutes  1.793 seconds)
+
+
 .. _sphx_glr_download_how_to_compile_models_from_paddle.py:
 
 .. only:: html
diff --git a/docs/_sources/how_to/compile_models/from_pytorch.rst.txt b/docs/_sources/how_to/compile_models/from_pytorch.rst.txt
index edaf803f85..9ee87871da 100644
--- a/docs/_sources/how_to/compile_models/from_pytorch.rst.txt
+++ b/docs/_sources/how_to/compile_models/from_pytorch.rst.txt
@@ -101,7 +101,7 @@ Load a pretrained PyTorch model
     /venv/apache-tvm-py3.8/lib/python3.8/site-packages/torchvision/models/_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=ResNet18_Weights.IMAGENET1K_V1`. You can also use `weights=ResNet18_Weights.DEFAULT` to get the most up-to-date weights.
       warnings.warn(msg)
     Downloading: "https://download.pytorch.org/models/resnet18-f37072fd.pth" to /workspace/.cache/torch/hub/checkpoints/resnet18-f37072fd.pth
-       0%|          | 0.00/44.7M [00:00<?, ?B/s]      18%|#7        | 7.99M/44.7M [00:00<00:00, 81.8MB/s]      35%|###5      | 15.8M/44.7M [00:00<00:00, 77.4MB/s]      67%|######7   | 30.1M/44.7M [00:00<00:00, 109MB/s]       91%|#########1| 40.7M/44.7M [00:00<00:00, 103MB/s]     100%|##########| 44.7M/44.7M [00:00<00:00, 104MB/s]
+       0%|          | 0.00/44.7M [00:00<?, ?B/s]      18%|#7        | 7.99M/44.7M [00:00<00:00, 68.6MB/s]      36%|###5      | 16.0M/44.7M [00:00<00:00, 55.1MB/s]      54%|#####3    | 24.0M/44.7M [00:00<00:00, 60.6MB/s]      72%|#######1  | 32.0M/44.7M [00:00<00:00, 57.4MB/s]      86%|########5 | 38.3M/44.7M [00:00<00:00, 47.3MB/s]      96%|#########6| 43.0M/44.7M [00:00<00:00, 38.6MB/s]     100%|##########| 44.7M/44.7M [00:01<00:00, 46.5MB/s]
 
 
 
diff --git a/docs/_sources/how_to/compile_models/from_tensorflow.rst.txt b/docs/_sources/how_to/compile_models/from_tensorflow.rst.txt
index 72c6b62021..3e29d4166b 100644
--- a/docs/_sources/how_to/compile_models/from_tensorflow.rst.txt
+++ b/docs/_sources/how_to/compile_models/from_tensorflow.rst.txt
@@ -430,7 +430,7 @@ Run the corresponding model on tensorflow
 
 .. rst-class:: sphx-glr-timing
 
-   **Total running time of the script:** ( 1 minutes  27.967 seconds)
+   **Total running time of the script:** ( 1 minutes  29.054 seconds)
 
 
 .. _sphx_glr_download_how_to_compile_models_from_tensorflow.py:
diff --git a/docs/_sources/how_to/compile_models/sg_execution_times.rst.txt b/docs/_sources/how_to/compile_models/sg_execution_times.rst.txt
index 1992f35acd..86969fa988 100644
--- a/docs/_sources/how_to/compile_models/sg_execution_times.rst.txt
+++ b/docs/_sources/how_to/compile_models/sg_execution_times.rst.txt
@@ -5,24 +5,24 @@
 
 Computation times
 =================
-**06:24.915** total execution time for **how_to_compile_models** files:
+**06:35.099** total execution time for **how_to_compile_models** files:
 
 +-----------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_compile_models_from_darknet.py` (``from_darknet.py``)       | 01:30.641 | 0.0 MB |
+| :ref:`sphx_glr_how_to_compile_models_from_darknet.py` (``from_darknet.py``)       | 01:33.928 | 0.0 MB |
 +-----------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_compile_models_from_tensorflow.py` (``from_tensorflow.py``) | 01:27.967 | 0.0 MB |
+| :ref:`sphx_glr_how_to_compile_models_from_tensorflow.py` (``from_tensorflow.py``) | 01:29.054 | 0.0 MB |
 +-----------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_compile_models_from_paddle.py` (``from_paddle.py``)         | 00:59.996 | 0.0 MB |
+| :ref:`sphx_glr_how_to_compile_models_from_paddle.py` (``from_paddle.py``)         | 01:01.793 | 0.0 MB |
 +-----------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_compile_models_from_oneflow.py` (``from_oneflow.py``)       | 00:41.954 | 0.0 MB |
+| :ref:`sphx_glr_how_to_compile_models_from_oneflow.py` (``from_oneflow.py``)       | 00:44.170 | 0.0 MB |
 +-----------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_compile_models_from_coreml.py` (``from_coreml.py``)         | 00:36.644 | 0.0 MB |
+| :ref:`sphx_glr_how_to_compile_models_from_coreml.py` (``from_coreml.py``)         | 00:37.239 | 0.0 MB |
 +-----------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_compile_models_from_pytorch.py` (``from_pytorch.py``)       | 00:26.658 | 0.0 MB |
+| :ref:`sphx_glr_how_to_compile_models_from_pytorch.py` (``from_pytorch.py``)       | 00:27.673 | 0.0 MB |
 +-----------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_compile_models_from_keras.py` (``from_keras.py``)           | 00:26.258 | 0.0 MB |
+| :ref:`sphx_glr_how_to_compile_models_from_keras.py` (``from_keras.py``)           | 00:26.628 | 0.0 MB |
 +-----------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_compile_models_from_tflite.py` (``from_tflite.py``)         | 00:12.060 | 0.0 MB |
+| :ref:`sphx_glr_how_to_compile_models_from_tflite.py` (``from_tflite.py``)         | 00:11.817 | 0.0 MB |
 +-----------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_compile_models_from_onnx.py` (``from_onnx.py``)             | 00:02.739 | 0.0 MB |
+| :ref:`sphx_glr_how_to_compile_models_from_onnx.py` (``from_onnx.py``)             | 00:02.797 | 0.0 MB |
 +-----------------------------------------------------------------------------------+-----------+--------+
diff --git a/docs/_sources/how_to/deploy_models/deploy_model_on_adreno.rst.txt b/docs/_sources/how_to/deploy_models/deploy_model_on_adreno.rst.txt
index 3fcbc5ad06..c148b72d2d 100644
--- a/docs/_sources/how_to/deploy_models/deploy_model_on_adreno.rst.txt
+++ b/docs/_sources/how_to/deploy_models/deploy_model_on_adreno.rst.txt
@@ -673,7 +673,7 @@ well as provides information about the model's performance
     Evaluate inference time cost...
     Execution time summary:
      mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)  
-     3999.1846    3998.1028    4007.1648    3994.2190      4.1754                  
+     3991.1209    3990.2472    3995.8217    3986.6934      2.7220                  
 
 
 
@@ -681,7 +681,7 @@ well as provides information about the model's performance
 
 .. rst-class:: sphx-glr-timing
 
-   **Total running time of the script:** ( 1 minutes  16.657 seconds)
+   **Total running time of the script:** ( 1 minutes  17.099 seconds)
 
 
 .. _sphx_glr_download_how_to_deploy_models_deploy_model_on_adreno.py:
diff --git a/docs/_sources/how_to/deploy_models/deploy_model_on_adreno_tvmc.rst.txt b/docs/_sources/how_to/deploy_models/deploy_model_on_adreno_tvmc.rst.txt
index 7c559c0aa6..3179046a5f 100644
--- a/docs/_sources/how_to/deploy_models/deploy_model_on_adreno_tvmc.rst.txt
+++ b/docs/_sources/how_to/deploy_models/deploy_model_on_adreno_tvmc.rst.txt
@@ -127,7 +127,7 @@ Make a Keras Resnet50 Model
  .. code-block:: none
 
     Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/resnet/resnet50_weights_tf_dim_ordering_tf_kernels.h5
-          8192/102967424 [..............................] - ETA: 0s       8380416/102967424 [=>............................] - ETA: 1s      16769024/102967424 [===>..........................] - ETA: 1s      25157632/102967424 [======>.......................] - ETA: 1s      33546240/102967424 [========>.....................] - ETA: 1s      41934848/102967424 [===========>..................] - ETA: 1s      48578560/102967424 [=============>................] - ETA: 0s      50323456/102967424 [=============>................] - ETA: 0s
       56967168/102967424 [===============>..............] - ETA: 0s      58712064/102967424 [================>.............] - ETA: 0s      64651264/102967424 [=================>............] - ETA: 0s      65355776/102967424 [==================>...........] - ETA: 0s      67100672/102967424 [==================>...........] - ETA: 0s      69296128/102967424 [===================>..........] - ETA: 0s      73744384/102967424 [====================>.........] - ETA: 0s      75489280/102967424 [====================>.........] -
  ETA: 0s      82124800/102967424 [======================>.......] - ETA: 0s      83877888/102967424 [=======================>......] - ETA: 0s      90521600/102967424 [=========================>....] - ETA: 0s      92266496/102967424 [=========================>....] - ETA: 0s      98910208/102967424 [===========================>..] - ETA: 0s     100646912/102967424 [============================>.] - ETA: 0s     102850560/102967424 [============================>.] - ETA: 0s     102967424/102967424
  [==============================] - 3s 0us/step
+          8192/102967424 [..............................] - ETA: 0s       6635520/102967424 [>.............................] - ETA: 1s       8380416/102967424 [=>............................] - ETA: 2s      15024128/102967424 [===>..........................] - ETA: 1s      16769024/102967424 [===>..........................] - ETA: 2s      23412736/102967424 [=====>........................] - ETA: 1s      25157632/102967424 [======>.......................] - ETA: 2s      33546240/102967424 [========>.....................] - ETA: 1s
       41934848/102967424 [===========>..................] - ETA: 1s      48578560/102967424 [=============>................] - ETA: 1s      50323456/102967424 [=============>................] - ETA: 1s      56967168/102967424 [===============>..............] - ETA: 1s      58712064/102967424 [================>.............] - ETA: 1s      65355776/102967424 [==================>...........] - ETA: 0s      67100672/102967424 [==================>...........] - ETA: 0s      69296128/102967424 [===================>..........] -
  ETA: 0s      75489280/102967424 [====================>.........] - ETA: 0s      82124800/102967424 [======================>.......] - ETA: 0s      83877888/102967424 [=======================>......] - ETA: 0s      90521600/102967424 [=========================>....] - ETA: 0s      92266496/102967424 [=========================>....] - ETA: 0s      98910208/102967424 [===========================>..] - ETA: 0s     100646912/102967424 [============================>.] - ETA: 0s     102850560/102967424
  [============================>.] - ETA: 0s     102967424/102967424 [==============================] - 3s 0us/step
 
 
 
diff --git a/docs/_sources/how_to/deploy_models/deploy_model_on_android.rst.txt b/docs/_sources/how_to/deploy_models/deploy_model_on_android.rst.txt
index e3ffa18921..132af3736b 100644
--- a/docs/_sources/how_to/deploy_models/deploy_model_on_android.rst.txt
+++ b/docs/_sources/how_to/deploy_models/deploy_model_on_android.rst.txt
@@ -437,7 +437,7 @@ Execute on TVM
     Evaluate inference time cost...
     Execution time summary:
      mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)  
-      14.5346      13.9729      17.6800      13.7166       1.2525                  
+      13.9508      13.8109      14.6513      13.7311       0.2767                  
 
 
 
diff --git a/docs/_sources/how_to/deploy_models/deploy_object_detection_pytorch.rst.txt b/docs/_sources/how_to/deploy_models/deploy_object_detection_pytorch.rst.txt
index 9c319d20c3..24769665c2 100644
--- a/docs/_sources/how_to/deploy_models/deploy_object_detection_pytorch.rst.txt
+++ b/docs/_sources/how_to/deploy_models/deploy_object_detection_pytorch.rst.txt
@@ -130,7 +130,7 @@ Load pre-trained maskrcnn from torchvision and do tracing
     /venv/apache-tvm-py3.8/lib/python3.8/site-packages/torchvision/models/_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=MaskRCNN_ResNet50_FPN_Weights.COCO_V1`. You can also use `weights=MaskRCNN_ResNet50_FPN_Weights.DEFAULT` to get the most up-to-date weights.
       warnings.warn(msg)
     Downloading: "https://download.pytorch.org/models/maskrcnn_resnet50_fpn_coco-bf2d0c1e.pth" to /workspace/.cache/torch/hub/checkpoints/maskrcnn_resnet50_fpn_coco-bf2d0c1e.pth
-       0%|          | 0.00/170M [00:00<?, ?B/s]       9%|9         | 15.4M/170M [00:00<00:01, 161MB/s]      18%|#8        | 30.7M/170M [00:00<00:01, 109MB/s]      25%|##4       | 42.0M/170M [00:00<00:01, 100MB/s]      31%|###       | 52.0M/170M [00:00<00:01, 96.9MB/s]      38%|###7      | 64.0M/170M [00:00<00:01, 105MB/s]       45%|####4     | 75.9M/170M [00:00<00:00, 110MB/s]      51%|#####1    | 86.7M/170M [00:00<00:00, 107MB/s]      57%|#####7    | 97.0M/170M [00:00<00:00, 105MB/s]      63%|######3   | 107M/170M [00:01<00:00, 104MB/s]       69%|######8   | 117M/170M [00:01<00:00, 85.0MB/s]      74%|#######4  | 126M/170M [00:01<00:00, 75.7MB/s]      80%|########  | 136M/170M [00:01<00:00, 83.8MB/s]      93%|#########2| 158M/170M [00:01<00:00, 120MB/s]      100%|##########| 170M/170M [00:01<00:00, 103MB/s]
+       0%|          | 0.00/170M [00:00<?, ?B/s]       4%|3         | 6.30M/170M [00:00<00:03, 46.3MB/s]       6%|6         | 10.7M/170M [00:00<00:04, 39.2MB/s]       9%|8         | 14.4M/170M [00:00<00:04, 36.2MB/s]      11%|#         | 17.9M/170M [00:00<00:04, 34.4MB/s]      14%|#4        | 24.0M/170M [00:00<00:04, 35.9MB/s]      18%|#7        | 30.3M/170M [00:00<00:03, 40.8MB/s]      20%|##        | 34.2M/170M [00:00<00:04, 34.6MB/s]      24%|##3       | 40.0M/170M [00:01<00:03, 39.8MB/s]      27%|##7       | 46.3M/170M [00:01<00:03, 42.2MB/s]      30%|##9       | 50.4M/170M [00:01<00:03, 39.8MB/s]      33%|###2      | 56.0M/170M [00:01<00:02, 43.9MB/s]      37%|###6      | 62.3M/170M [00:01<00:02, 49.1MB/s]      40%|###9      | 67.1M/170M [00:01<00:02, 42.6MB/s]      42%|####2     | 72.0M/170M [00:01<00:02, 38.1MB/s]      45%|####4     | 75.9M/170M [00:02<00:02, 38.0MB/s]      47%|####7     | 80.0M/170M [00:02<00:02, 35.3MB/s]      52%|#####1    | 88.0M/170M [00:02<00:01, 43.0MB/
 s]      57%|#####6    | 96.0M/170M [00:02<00:01, 43.9MB/s]      60%|######    | 102M/170M [00:02<00:01, 38.6MB/s]       63%|######2   | 107M/170M [00:02<00:01, 40.6MB/s]      66%|######5   | 112M/170M [00:02<00:01, 38.5MB/s]      71%|#######   | 120M/170M [00:03<00:01, 38.1MB/s]      75%|#######4  | 127M/170M [00:03<00:01, 44.2MB/s]      77%|#######7  | 131M/170M [00:03<00:01, 38.8MB/s]      80%|#######9  | 135M/170M [00:03<00:01, 35.7MB/s]      82%|########1 | 139M/170M [00:03<00:00, 35.3MB/s]      85%|########4 | 144M/170M [00:03<00:00, 34.0MB/s]      88%|########8 | 150M/170M [00:03<00:00, 40.2MB/s]      91%|######### | 154M/170M [00:04<00:00, 38.4MB/s]      93%|#########3| 158M/170M [00:04<00:00, 37.4MB/s]      95%|#########5| 162M/170M [00:04<00:00, 34.8MB/s]      99%|#########8| 168M/170M [00:04<00:00, 40.8MB/s]     100%|##########| 170M/170M [00:04<00:00, 39.6MB/s]
     /venv/apache-tvm-py3.8/lib/python3.8/site-packages/torch/nn/functional.py:3912: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).
       (torch.floor((input.size(i + 2).float() * torch.tensor(scale_factors[i], dtype=torch.float32)).float()))
     /venv/apache-tvm-py3.8/lib/python3.8/site-packages/torchvision/ops/boxes.py:157: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).
@@ -292,7 +292,7 @@ Get boxes with score larger than 0.9
 
 .. rst-class:: sphx-glr-timing
 
-   **Total running time of the script:** ( 3 minutes  17.891 seconds)
+   **Total running time of the script:** ( 3 minutes  22.901 seconds)
 
 
 .. _sphx_glr_download_how_to_deploy_models_deploy_object_detection_pytorch.py:
diff --git a/docs/_sources/how_to/deploy_models/deploy_prequantized.rst.txt b/docs/_sources/how_to/deploy_models/deploy_prequantized.rst.txt
index fa75cecf61..c49c1e4069 100644
--- a/docs/_sources/how_to/deploy_models/deploy_prequantized.rst.txt
+++ b/docs/_sources/how_to/deploy_models/deploy_prequantized.rst.txt
@@ -227,7 +227,7 @@ training. Other models require a full post training calibration.
     /venv/apache-tvm-py3.8/lib/python3.8/site-packages/torchvision/models/_utils.py:223: UserWarning: Arguments other than a weight enum or `None` for 'weights' are deprecated since 0.13 and may be removed in the future. The current behavior is equivalent to passing `weights=MobileNet_V2_Weights.IMAGENET1K_V1`. You can also use `weights=MobileNet_V2_Weights.DEFAULT` to get the most up-to-date weights.
       warnings.warn(msg)
     Downloading: "https://download.pytorch.org/models/mobilenet_v2-b0353104.pth" to /workspace/.cache/torch/hub/checkpoints/mobilenet_v2-b0353104.pth
-       0%|          | 0.00/13.6M [00:00<?, ?B/s]       1%|          | 120k/13.6M [00:00<00:11, 1.21MB/s]      59%|#####8    | 7.99M/13.6M [00:00<00:00, 32.0MB/s]     100%|##########| 13.6M/13.6M [00:00<00:00, 39.5MB/s]
+       0%|          | 0.00/13.6M [00:00<?, ?B/s]      59%|#####8    | 7.99M/13.6M [00:00<00:00, 70.4MB/s]     100%|##########| 13.6M/13.6M [00:00<00:00, 65.7MB/s]
 
 
 
@@ -409,7 +409,7 @@ Here we give an example of how to measure performance of TVM compiled models.
 
     Execution time summary:
      mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)  
-      85.7789      85.7494      86.2410      85.4983       0.2070                  
+      85.8857      85.8731      86.4836      85.5766       0.2000                  
 
 
 
@@ -457,7 +457,7 @@ TODO
 
 .. rst-class:: sphx-glr-timing
 
-   **Total running time of the script:** ( 1 minutes  25.050 seconds)
+   **Total running time of the script:** ( 1 minutes  25.639 seconds)
 
 
 .. _sphx_glr_download_how_to_deploy_models_deploy_prequantized.py:
diff --git a/docs/_sources/how_to/deploy_models/deploy_prequantized_tflite.rst.txt b/docs/_sources/how_to/deploy_models/deploy_prequantized_tflite.rst.txt
index 41e943b67d..ef52cd48f6 100644
--- a/docs/_sources/how_to/deploy_models/deploy_prequantized_tflite.rst.txt
+++ b/docs/_sources/how_to/deploy_models/deploy_prequantized_tflite.rst.txt
@@ -423,7 +423,7 @@ Here we give an example of how to measure performance of TVM compiled models.
 
     Execution time summary:
      mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)  
-      102.5356     102.3021     108.3737     101.6712      0.9531                  
+      104.4572     104.2794     106.8014     103.3968      0.6953                  
 
 
 
diff --git a/docs/_sources/how_to/deploy_models/sg_execution_times.rst.txt b/docs/_sources/how_to/deploy_models/sg_execution_times.rst.txt
index 8e9fd3d5b8..2483f653f9 100644
--- a/docs/_sources/how_to/deploy_models/sg_execution_times.rst.txt
+++ b/docs/_sources/how_to/deploy_models/sg_execution_times.rst.txt
@@ -5,24 +5,24 @@
 
 Computation times
 =================
-**09:21.042** total execution time for **how_to_deploy_models** files:
+**09:28.769** total execution time for **how_to_deploy_models** files:
 
 +------------------------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_deploy_models_deploy_object_detection_pytorch.py` (``deploy_object_detection_pytorch.py``) | 03:17.891 | 0.0 MB |
+| :ref:`sphx_glr_how_to_deploy_models_deploy_object_detection_pytorch.py` (``deploy_object_detection_pytorch.py``) | 03:22.901 | 0.0 MB |
 +------------------------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_deploy_models_deploy_prequantized.py` (``deploy_prequantized.py``)                         | 01:25.050 | 0.0 MB |
+| :ref:`sphx_glr_how_to_deploy_models_deploy_prequantized.py` (``deploy_prequantized.py``)                         | 01:25.639 | 0.0 MB |
 +------------------------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_deploy_models_deploy_model_on_adreno.py` (``deploy_model_on_adreno.py``)                   | 01:16.657 | 0.0 MB |
+| :ref:`sphx_glr_how_to_deploy_models_deploy_model_on_adreno.py` (``deploy_model_on_adreno.py``)                   | 01:17.099 | 0.0 MB |
 +------------------------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_deploy_models_deploy_prequantized_tflite.py` (``deploy_prequantized_tflite.py``)           | 00:49.171 | 0.0 MB |
+| :ref:`sphx_glr_how_to_deploy_models_deploy_prequantized_tflite.py` (``deploy_prequantized_tflite.py``)           | 00:49.730 | 0.0 MB |
 +------------------------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_deploy_models_deploy_model_on_android.py` (``deploy_model_on_android.py``)                 | 00:48.815 | 0.0 MB |
+| :ref:`sphx_glr_how_to_deploy_models_deploy_model_on_android.py` (``deploy_model_on_android.py``)                 | 00:49.401 | 0.0 MB |
 +------------------------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_deploy_models_deploy_model_on_adreno_tvmc.py` (``deploy_model_on_adreno_tvmc.py``)         | 00:46.112 | 0.0 MB |
+| :ref:`sphx_glr_how_to_deploy_models_deploy_model_on_adreno_tvmc.py` (``deploy_model_on_adreno_tvmc.py``)         | 00:46.281 | 0.0 MB |
 +------------------------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_deploy_models_deploy_model_on_nano.py` (``deploy_model_on_nano.py``)                       | 00:28.688 | 0.0 MB |
+| :ref:`sphx_glr_how_to_deploy_models_deploy_model_on_nano.py` (``deploy_model_on_nano.py``)                       | 00:28.967 | 0.0 MB |
 +------------------------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_deploy_models_deploy_model_on_rasp.py` (``deploy_model_on_rasp.py``)                       | 00:28.650 | 0.0 MB |
+| :ref:`sphx_glr_how_to_deploy_models_deploy_model_on_rasp.py` (``deploy_model_on_rasp.py``)                       | 00:28.743 | 0.0 MB |
 +------------------------------------------------------------------------------------------------------------------+-----------+--------+
 | :ref:`sphx_glr_how_to_deploy_models_deploy_sparse.py` (``deploy_sparse.py``)                                     | 00:00.008 | 0.0 MB |
 +------------------------------------------------------------------------------------------------------------------+-----------+--------+
diff --git a/docs/_sources/how_to/extend_tvm/sg_execution_times.rst.txt b/docs/_sources/how_to/extend_tvm/sg_execution_times.rst.txt
index 3213eea448..475e2b13a8 100644
--- a/docs/_sources/how_to/extend_tvm/sg_execution_times.rst.txt
+++ b/docs/_sources/how_to/extend_tvm/sg_execution_times.rst.txt
@@ -5,12 +5,12 @@
 
 Computation times
 =================
-**00:03.799** total execution time for **how_to_extend_tvm** files:
+**00:03.895** total execution time for **how_to_extend_tvm** files:
 
 +-------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_extend_tvm_use_pass_instrument.py` (``use_pass_instrument.py``)     | 00:02.636 | 0.0 MB |
+| :ref:`sphx_glr_how_to_extend_tvm_use_pass_instrument.py` (``use_pass_instrument.py``)     | 00:02.715 | 0.0 MB |
 +-------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_extend_tvm_use_pass_infra.py` (``use_pass_infra.py``)               | 00:01.156 | 0.0 MB |
+| :ref:`sphx_glr_how_to_extend_tvm_use_pass_infra.py` (``use_pass_infra.py``)               | 00:01.173 | 0.0 MB |
 +-------------------------------------------------------------------------------------------+-----------+--------+
 | :ref:`sphx_glr_how_to_extend_tvm_low_level_custom_pass.py` (``low_level_custom_pass.py``) | 00:00.007 | 0.0 MB |
 +-------------------------------------------------------------------------------------------+-----------+--------+
diff --git a/docs/_sources/how_to/extend_tvm/use_pass_instrument.rst.txt b/docs/_sources/how_to/extend_tvm/use_pass_instrument.rst.txt
index 3adb6b9424..c82b53a94e 100644
--- a/docs/_sources/how_to/extend_tvm/use_pass_instrument.rst.txt
+++ b/docs/_sources/how_to/extend_tvm/use_pass_instrument.rst.txt
@@ -220,10 +220,10 @@ profile the execution time of each passes.
  .. code-block:: none
 
     Printing results of timing profile...
-    InferType: 24463us [24463us] (48.82%; 48.82%)
-    FoldScaleAxis: 25644us [7us] (51.18%; 51.18%)
-            FoldConstant: 25637us [1764us] (51.17%; 99.97%)
-                    InferType: 23873us [23873us] (47.64%; 93.12%)
+    InferType: 24361us [24361us] (48.76%; 48.76%)
+    FoldScaleAxis: 25598us [6us] (51.24%; 51.24%)
+            FoldConstant: 25592us [1765us] (51.23%; 99.98%)
+                    InferType: 23828us [23828us] (47.69%; 93.10%)
 
 
 
@@ -262,10 +262,10 @@ Refer to following sections and :py:func:`tvm.instrument.pass_instrument` for th
  .. code-block:: none
 
     Printing results of timing profile...
-    InferType: 23548us [23548us] (48.52%; 48.52%)
-    FoldScaleAxis: 24985us [5us] (51.48%; 51.48%)
-            FoldConstant: 24980us [1587us] (51.47%; 99.98%)
-                    InferType: 23393us [23393us] (48.20%; 93.65%)
+    InferType: 23621us [23621us] (48.66%; 48.66%)
+    FoldScaleAxis: 24920us [5us] (51.34%; 51.34%)
+            FoldConstant: 24915us [1633us] (51.33%; 99.98%)
+                    InferType: 23282us [23282us] (47.96%; 93.44%)
 
 
 
diff --git a/docs/_sources/how_to/optimize_operators/opt_conv_cuda.rst.txt b/docs/_sources/how_to/optimize_operators/opt_conv_cuda.rst.txt
index e0399ca503..388072be03 100644
--- a/docs/_sources/how_to/optimize_operators/opt_conv_cuda.rst.txt
+++ b/docs/_sources/how_to/optimize_operators/opt_conv_cuda.rst.txt
@@ -331,7 +331,7 @@ latency of convolution.
 
  .. code-block:: none
 
-    Convolution: 34.817760 ms
+    Convolution: 53.693569 ms
 
 
 
diff --git a/docs/_sources/how_to/optimize_operators/opt_conv_tensorcore.rst.txt b/docs/_sources/how_to/optimize_operators/opt_conv_tensorcore.rst.txt
index f3feec8474..fe9976b28f 100644
--- a/docs/_sources/how_to/optimize_operators/opt_conv_tensorcore.rst.txt
+++ b/docs/_sources/how_to/optimize_operators/opt_conv_tensorcore.rst.txt
@@ -598,7 +598,7 @@ be able to run on our build server
 
  .. code-block:: none
 
-    conv2d with tensor core: 12.094259 ms
+    conv2d with tensor core: 12.272643 ms
 
 
 
diff --git a/docs/_sources/how_to/optimize_operators/opt_gemm.rst.txt b/docs/_sources/how_to/optimize_operators/opt_gemm.rst.txt
index fb3af5524d..2c5eeb258c 100644
--- a/docs/_sources/how_to/optimize_operators/opt_gemm.rst.txt
+++ b/docs/_sources/how_to/optimize_operators/opt_gemm.rst.txt
@@ -134,8 +134,8 @@ Then we write a baseline implementation, the simplest way to write a matrix mult
 
  .. code-block:: none
 
-    Numpy running time: 0.014070
-    Baseline: 3.248753
+    Numpy running time: 0.014645
+    Baseline: 3.262186
 
 
 
@@ -227,7 +227,7 @@ fill 32 * 32 * sizeof(float) which is 4KB in the cache whose total size is 32KB
 
  .. code-block:: none
 
-    Opt1: 0.284145
+    Opt1: 0.285507
 
 
 
@@ -318,7 +318,7 @@ In this tutorial, we chose to vectorize the inner loop row data since it is cach
 
  .. code-block:: none
 
-    Opt2: 0.266407
+    Opt2: 0.257766
 
 
 
@@ -406,7 +406,7 @@ the access pattern for A matrix is more cache friendly.
 
  .. code-block:: none
 
-    Opt3: 0.110200
+    Opt3: 0.109861
 
 
 
@@ -523,7 +523,7 @@ flattening.
 
  .. code-block:: none
 
-    Opt4: 0.102943
+    Opt4: 0.103514
 
 
 
@@ -635,7 +635,7 @@ write to C when all the block results are ready.
 
  .. code-block:: none
 
-    Opt5: 0.097029
+    Opt5: 0.094170
 
 
 
@@ -748,7 +748,7 @@ Furthermore, we can also utilize multi-core processors to do the thread-level pa
 
  .. code-block:: none
 
-    Opt6: 0.114715
+    Opt6: 0.112322
 
 
 
diff --git a/docs/_sources/how_to/optimize_operators/sg_execution_times.rst.txt b/docs/_sources/how_to/optimize_operators/sg_execution_times.rst.txt
index 12163144c6..6a4b441e9d 100644
--- a/docs/_sources/how_to/optimize_operators/sg_execution_times.rst.txt
+++ b/docs/_sources/how_to/optimize_operators/sg_execution_times.rst.txt
@@ -5,12 +5,12 @@
 
 Computation times
 =================
-**00:31.271** total execution time for **how_to_optimize_operators** files:
+**00:31.404** total execution time for **how_to_optimize_operators** files:
 
 +-----------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_optimize_operators_opt_gemm.py` (``opt_gemm.py``)                       | 00:28.393 | 0.0 MB |
+| :ref:`sphx_glr_how_to_optimize_operators_opt_gemm.py` (``opt_gemm.py``)                       | 00:28.274 | 0.0 MB |
 +-----------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_optimize_operators_opt_conv_tensorcore.py` (``opt_conv_tensorcore.py``) | 00:01.723 | 0.0 MB |
+| :ref:`sphx_glr_how_to_optimize_operators_opt_conv_tensorcore.py` (``opt_conv_tensorcore.py``) | 00:01.836 | 0.0 MB |
 +-----------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_optimize_operators_opt_conv_cuda.py` (``opt_conv_cuda.py``)             | 00:01.154 | 0.0 MB |
+| :ref:`sphx_glr_how_to_optimize_operators_opt_conv_cuda.py` (``opt_conv_cuda.py``)             | 00:01.294 | 0.0 MB |
 +-----------------------------------------------------------------------------------------------+-----------+--------+
diff --git a/docs/_sources/how_to/tune_with_autoscheduler/sg_execution_times.rst.txt b/docs/_sources/how_to/tune_with_autoscheduler/sg_execution_times.rst.txt
index 56043bbcee..49830ef66a 100644
--- a/docs/_sources/how_to/tune_with_autoscheduler/sg_execution_times.rst.txt
+++ b/docs/_sources/how_to/tune_with_autoscheduler/sg_execution_times.rst.txt
@@ -5,18 +5,18 @@
 
 Computation times
 =================
-**03:27.571** total execution time for **how_to_tune_with_autoscheduler** files:
+**03:30.324** total execution time for **how_to_tune_with_autoscheduler** files:
 
-+----------------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_network_x86.py` (``tune_network_x86.py``)             | 01:30.382 | 0.0 MB |
-+----------------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_network_cuda.py` (``tune_network_cuda.py``)           | 01:09.596 | 0.0 MB |
-+----------------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_network_arm.py` (``tune_network_arm.py``)             | 00:17.196 | 0.0 MB |
-+----------------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_network_mali.py` (``tune_network_mali.py``)           | 00:15.730 | 0.0 MB |
-+----------------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_conv2d_layer_cuda.py` (``tune_conv2d_layer_cuda.py``) | 00:14.566 | 0.0 MB |
-+----------------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_sparse_x86.py` (``tune_sparse_x86.py``)               | 00:00.100 | 0.0 MB |
-+----------------------------------------------------------------------------------------------------------+-----------+--------+
++----------------------------------------------------------------------------------------------------------+------------+--------+
+| :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_network_x86.py` (``tune_network_x86.py``)             | 01:31.529  | 0.0 MB |
++----------------------------------------------------------------------------------------------------------+------------+--------+
+| :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_network_cuda.py` (``tune_network_cuda.py``)           | 01:10.519  | 0.0 MB |
++----------------------------------------------------------------------------------------------------------+------------+--------+
+| :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_network_arm.py` (``tune_network_arm.py``)             | 00:17.321  | 0.0 MB |
++----------------------------------------------------------------------------------------------------------+------------+--------+
+| :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_network_mali.py` (``tune_network_mali.py``)           | 00:15.1000 | 0.0 MB |
++----------------------------------------------------------------------------------------------------------+------------+--------+
+| :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_conv2d_layer_cuda.py` (``tune_conv2d_layer_cuda.py``) | 00:14.855  | 0.0 MB |
++----------------------------------------------------------------------------------------------------------+------------+--------+
+| :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_sparse_x86.py` (``tune_sparse_x86.py``)               | 00:00.100  | 0.0 MB |
++----------------------------------------------------------------------------------------------------------+------------+--------+
diff --git a/docs/_sources/how_to/tune_with_autoscheduler/tune_conv2d_layer_cuda.rst.txt b/docs/_sources/how_to/tune_with_autoscheduler/tune_conv2d_layer_cuda.rst.txt
index e4320ab4cc..d85b3f249a 100644
--- a/docs/_sources/how_to/tune_with_autoscheduler/tune_conv2d_layer_cuda.rst.txt
+++ b/docs/_sources/how_to/tune_with_autoscheduler/tune_conv2d_layer_cuda.rst.txt
@@ -766,7 +766,7 @@ We build the binary and check its correctness and performance.
 
  .. code-block:: none
 
-    Execution time of this operator: 0.337 ms
+    Execution time of this operator: 0.334 ms
 
 
 
diff --git a/docs/_sources/how_to/tune_with_autoscheduler/tune_network_cuda.rst.txt b/docs/_sources/how_to/tune_with_autoscheduler/tune_network_cuda.rst.txt
index 8d1d053dd4..53d187ab78 100644
--- a/docs/_sources/how_to/tune_with_autoscheduler/tune_network_cuda.rst.txt
+++ b/docs/_sources/how_to/tune_with_autoscheduler/tune_network_cuda.rst.txt
@@ -633,7 +633,7 @@ so we can read the log file and load the best schedules.
     Evaluate inference time cost...
     Execution time summary:
      mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)  
-       3.2062       3.2061       3.2067       3.2058       0.0004                  
+       3.2002       3.2004       3.2005       3.1997       0.0004                  
 
 
 
@@ -660,7 +660,7 @@ Other Tips
 
 .. rst-class:: sphx-glr-timing
 
-   **Total running time of the script:** ( 1 minutes  9.596 seconds)
+   **Total running time of the script:** ( 1 minutes  10.519 seconds)
 
 
 .. _sphx_glr_download_how_to_tune_with_autoscheduler_tune_network_cuda.py:
diff --git a/docs/_sources/how_to/tune_with_autoscheduler/tune_network_x86.rst.txt b/docs/_sources/how_to/tune_with_autoscheduler/tune_network_x86.rst.txt
index 5affb1a3a8..fd39cf6b63 100644
--- a/docs/_sources/how_to/tune_with_autoscheduler/tune_network_x86.rst.txt
+++ b/docs/_sources/how_to/tune_with_autoscheduler/tune_network_x86.rst.txt
@@ -655,7 +655,7 @@ so we can read the log file and load the best schedules.
     Evaluate inference time cost...
     Execution time summary:
      mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)  
-      715.1135     714.5413     717.9783     712.8209      2.1440                  
+      704.7770     703.9222     707.6222     702.7866      2.0646                  
 
 
 
@@ -682,7 +682,7 @@ Other Tips
 
 .. rst-class:: sphx-glr-timing
 
-   **Total running time of the script:** ( 1 minutes  30.382 seconds)
+   **Total running time of the script:** ( 1 minutes  31.529 seconds)
 
 
 .. _sphx_glr_download_how_to_tune_with_autoscheduler_tune_network_x86.py:
diff --git a/docs/_sources/how_to/tune_with_autotvm/sg_execution_times.rst.txt b/docs/_sources/how_to/tune_with_autotvm/sg_execution_times.rst.txt
index 5c9506e629..49634ab9ba 100644
--- a/docs/_sources/how_to/tune_with_autotvm/sg_execution_times.rst.txt
+++ b/docs/_sources/how_to/tune_with_autotvm/sg_execution_times.rst.txt
@@ -5,12 +5,12 @@
 
 Computation times
 =================
-**00:23.092** total execution time for **how_to_tune_with_autotvm** files:
+**00:22.707** total execution time for **how_to_tune_with_autotvm** files:
 
 +--------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_tune_with_autotvm_tune_conv2d_cuda.py` (``tune_conv2d_cuda.py``)           | 00:23.057 | 0.0 MB |
+| :ref:`sphx_glr_how_to_tune_with_autotvm_tune_conv2d_cuda.py` (``tune_conv2d_cuda.py``)           | 00:22.671 | 0.0 MB |
 +--------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_tune_with_autotvm_tune_relay_x86.py` (``tune_relay_x86.py``)               | 00:00.020 | 0.0 MB |
+| :ref:`sphx_glr_how_to_tune_with_autotvm_tune_relay_x86.py` (``tune_relay_x86.py``)               | 00:00.021 | 0.0 MB |
 +--------------------------------------------------------------------------------------------------+-----------+--------+
 | :ref:`sphx_glr_how_to_tune_with_autotvm_tune_relay_cuda.py` (``tune_relay_cuda.py``)             | 00:00.005 | 0.0 MB |
 +--------------------------------------------------------------------------------------------------+-----------+--------+
diff --git a/docs/_sources/how_to/tune_with_autotvm/tune_conv2d_cuda.rst.txt b/docs/_sources/how_to/tune_with_autotvm/tune_conv2d_cuda.rst.txt
index 0757e43b0a..a0dc4f6512 100644
--- a/docs/_sources/how_to/tune_with_autotvm/tune_conv2d_cuda.rst.txt
+++ b/docs/_sources/how_to/tune_with_autotvm/tune_conv2d_cuda.rst.txt
@@ -326,7 +326,7 @@ and measure running time.
 
     Best config:
     ,None
-    Time cost of this operator: 0.037235
+    Time cost of this operator: 0.037113
 
 
 
diff --git a/docs/_sources/how_to/work_with_microtvm/micro_autotune.rst.txt b/docs/_sources/how_to/work_with_microtvm/micro_autotune.rst.txt
index 3ca12d5285..d47d2151f8 100644
--- a/docs/_sources/how_to/work_with_microtvm/micro_autotune.rst.txt
+++ b/docs/_sources/how_to/work_with_microtvm/micro_autotune.rst.txt
@@ -360,10 +360,10 @@ Timing the untuned program
     ########## Build without Autotuning ##########
     Node Name                                     Ops                                           Time(us)  Time(%)  Shape              Inputs  Outputs  Measurements(us)  
     ---------                                     ---                                           --------  -------  -----              ------  -------  ----------------  
-    tvmgen_default_fused_nn_contrib_conv2d_NCHWc  tvmgen_default_fused_nn_contrib_conv2d_NCHWc  295.5     98.719   (1, 2, 10, 10, 3)  2       1        [295.5]           
-    tvmgen_default_fused_layout_transform_1       tvmgen_default_fused_layout_transform_1       2.91      0.972    (1, 6, 10, 10)     1       1        [2.91]            
-    tvmgen_default_fused_layout_transform         tvmgen_default_fused_layout_transform         0.925     0.309    (1, 1, 10, 10, 3)  1       1        [0.925]           
-    Total_time                                    -                                             299.336   -        -                  -       -        -                 
+    tvmgen_default_fused_nn_contrib_conv2d_NCHWc  tvmgen_default_fused_nn_contrib_conv2d_NCHWc  297.9     98.74    (1, 2, 10, 10, 3)  2       1        [297.9]           
+    tvmgen_default_fused_layout_transform_1       tvmgen_default_fused_layout_transform_1       2.878     0.954    (1, 6, 10, 10)     1       1        [2.878]           
+    tvmgen_default_fused_layout_transform         tvmgen_default_fused_layout_transform         0.923     0.306    (1, 1, 10, 10, 3)  1       1        [0.923]           
+    Total_time                                    -                                             301.7     -        -                  -       -        -                 
 
 
 
@@ -428,10 +428,10 @@ Timing the tuned program
     ########## Build with Autotuning ##########
     Node Name                                     Ops                                           Time(us)  Time(%)  Shape              Inputs  Outputs  Measurements(us)  
     ---------                                     ---                                           --------  -------  -----              ------  -------  ----------------  
-    tvmgen_default_fused_nn_contrib_conv2d_NCHWc  tvmgen_default_fused_nn_contrib_conv2d_NCHWc  98.562    97.385   (1, 6, 10, 10, 1)  2       1        [98.562]          
-    tvmgen_default_fused_layout_transform_1       tvmgen_default_fused_layout_transform_1       1.717     1.696    (1, 6, 10, 10)     1       1        [1.717]           
-    tvmgen_default_fused_layout_transform         tvmgen_default_fused_layout_transform         0.929     0.918    (1, 1, 10, 10, 3)  1       1        [0.929]           
-    Total_time                                    -                                             101.209   -        -                  -       -        -                 
+    tvmgen_default_fused_nn_contrib_conv2d_NCHWc  tvmgen_default_fused_nn_contrib_conv2d_NCHWc  100.0     97.491   (1, 6, 10, 10, 1)  2       1        [100.0]           
+    tvmgen_default_fused_layout_transform_1       tvmgen_default_fused_layout_transform_1       1.742     1.698    (1, 6, 10, 10)     1       1        [1.742]           
+    tvmgen_default_fused_layout_transform         tvmgen_default_fused_layout_transform         0.832     0.811    (1, 3, 10, 10, 1)  1       1        [0.832]           
+    Total_time                                    -                                             102.574   -        -                  -       -        -                 
 
 
 
@@ -439,7 +439,7 @@ Timing the tuned program
 
 .. rst-class:: sphx-glr-timing
 
-   **Total running time of the script:** ( 1 minutes  21.362 seconds)
+   **Total running time of the script:** ( 1 minutes  23.551 seconds)
 
 
 .. _sphx_glr_download_how_to_work_with_microtvm_micro_autotune.py:
diff --git a/docs/_sources/how_to/work_with_microtvm/micro_pytorch.rst.txt b/docs/_sources/how_to/work_with_microtvm/micro_pytorch.rst.txt
index 2c7e8fa5ea..98d88ed4a8 100644
--- a/docs/_sources/how_to/work_with_microtvm/micro_pytorch.rst.txt
+++ b/docs/_sources/how_to/work_with_microtvm/micro_pytorch.rst.txt
@@ -118,7 +118,7 @@ download a cat image and preprocess it to use as the model input.
     /venv/apache-tvm-py3.8/lib/python3.8/site-packages/torch/ao/quantization/utils.py:310: UserWarning: must run observer before calling calculate_qparams. Returning default values.
       warnings.warn(
     Downloading: "https://download.pytorch.org/models/quantized/mobilenet_v2_qnnpack_37f702c5.pth" to /workspace/.cache/torch/hub/checkpoints/mobilenet_v2_qnnpack_37f702c5.pth
-       0%|          | 0.00/3.42M [00:00<?, ?B/s]      61%|######    | 2.09M/3.42M [00:00<00:00, 16.0MB/s]     100%|##########| 3.42M/3.42M [00:00<00:00, 25.4MB/s]
+       0%|          | 0.00/3.42M [00:00<?, ?B/s]     100%|##########| 3.42M/3.42M [00:00<00:00, 36.8MB/s]
     /venv/apache-tvm-py3.8/lib/python3.8/site-packages/torch/_utils.py:314: UserWarning: TypedStorage is deprecated. It will be removed in the future and UntypedStorage will be the only storage class. This should only matter to you if you are using storages directly.  To access UntypedStorage directly, use tensor.untyped_storage() instead of tensor.storage()
       device=storage.device,
     /workspace/python/tvm/relay/frontend/pytorch_utils.py:47: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead.
@@ -326,7 +326,7 @@ Look up prediction top 1 index in 1000 class synset.
 
 .. rst-class:: sphx-glr-timing
 
-   **Total running time of the script:** ( 1 minutes  24.317 seconds)
+   **Total running time of the script:** ( 1 minutes  26.927 seconds)
 
 
 .. _sphx_glr_download_how_to_work_with_microtvm_micro_pytorch.py:
diff --git a/docs/_sources/how_to/work_with_microtvm/micro_train.rst.txt b/docs/_sources/how_to/work_with_microtvm/micro_train.rst.txt
index 83867c5ef0..31dee08e98 100644
--- a/docs/_sources/how_to/work_with_microtvm/micro_train.rst.txt
+++ b/docs/_sources/how_to/work_with_microtvm/micro_train.rst.txt
@@ -217,7 +217,7 @@ take about **2 minutes** to download the Stanford Cars, while COCO 2017 validati
  .. code-block:: none
 
 
-    '/tmp/tmpi68341_c/images/random'
+    '/tmp/tmpd034jfyb/images/random'
 
 
 
@@ -317,8 +317,8 @@ objects to other stuff? We can display some examples from our datasets using ``m
 
  .. code-block:: none
 
-    /tmp/tmpi68341_c/images/target contains 8144 images
-    /tmp/tmpi68341_c/images/random contains 5000 images
+    /tmp/tmpd034jfyb/images/target contains 8144 images
+    /tmp/tmpd034jfyb/images/random contains 5000 images
 
 
 
@@ -493,13 +493,13 @@ the time on our validation set).
  .. code-block:: none
 
     Epoch 1/3
-    328/328 - 37s - loss: 0.2210 - accuracy: 0.9245 - val_loss: 0.1308 - val_accuracy: 0.9551 - 37s/epoch - 114ms/step
+    328/328 - 38s - loss: 0.2585 - accuracy: 0.9148 - val_loss: 0.1634 - val_accuracy: 0.9445 - 38s/epoch - 116ms/step
     Epoch 2/3
-    328/328 - 34s - loss: 0.1044 - accuracy: 0.9613 - val_loss: 0.0893 - val_accuracy: 0.9675 - 34s/epoch - 104ms/step
+    328/328 - 34s - loss: 0.1052 - accuracy: 0.9609 - val_loss: 0.1110 - val_accuracy: 0.9630 - 34s/epoch - 104ms/step
     Epoch 3/3
-    328/328 - 34s - loss: 0.0660 - accuracy: 0.9746 - val_loss: 0.1146 - val_accuracy: 0.9656 - 34s/epoch - 104ms/step
+    328/328 - 34s - loss: 0.0708 - accuracy: 0.9744 - val_loss: 0.0897 - val_accuracy: 0.9698 - 34s/epoch - 104ms/step
 
-    <keras.callbacks.History object at 0x7f5a8a562880>
+    <keras.callbacks.History object at 0x7f138d3f58e0>
 
 
 
@@ -860,7 +860,7 @@ Arduino tutorial for how to do that `on GitHub <https://github.com/guberti/tvm-a
 
 .. rst-class:: sphx-glr-timing
 
-   **Total running time of the script:** ( 4 minutes  23.457 seconds)
+   **Total running time of the script:** ( 4 minutes  29.976 seconds)
 
 
 .. _sphx_glr_download_how_to_work_with_microtvm_micro_train.py:
diff --git a/docs/_sources/how_to/work_with_microtvm/sg_execution_times.rst.txt b/docs/_sources/how_to/work_with_microtvm/sg_execution_times.rst.txt
index 13e10c1336..6b876b2e84 100644
--- a/docs/_sources/how_to/work_with_microtvm/sg_execution_times.rst.txt
+++ b/docs/_sources/how_to/work_with_microtvm/sg_execution_times.rst.txt
@@ -5,20 +5,20 @@
 
 Computation times
 =================
-**07:35.855** total execution time for **how_to_work_with_microtvm** files:
+**07:48.758** total execution time for **how_to_work_with_microtvm** files:
 
 +-----------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_work_with_microtvm_micro_train.py` (``micro_train.py``)           | 04:23.457 | 0.0 MB |
+| :ref:`sphx_glr_how_to_work_with_microtvm_micro_train.py` (``micro_train.py``)           | 04:29.976 | 0.0 MB |
 +-----------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_work_with_microtvm_micro_pytorch.py` (``micro_pytorch.py``)       | 01:24.317 | 0.0 MB |
+| :ref:`sphx_glr_how_to_work_with_microtvm_micro_pytorch.py` (``micro_pytorch.py``)       | 01:26.927 | 0.0 MB |
 +-----------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_work_with_microtvm_micro_autotune.py` (``micro_autotune.py``)     | 01:21.362 | 0.0 MB |
+| :ref:`sphx_glr_how_to_work_with_microtvm_micro_autotune.py` (``micro_autotune.py``)     | 01:23.551 | 0.0 MB |
 +-----------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_work_with_microtvm_micro_aot.py` (``micro_aot.py``)               | 00:11.404 | 0.0 MB |
+| :ref:`sphx_glr_how_to_work_with_microtvm_micro_aot.py` (``micro_aot.py``)               | 00:11.629 | 0.0 MB |
 +-----------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_work_with_microtvm_micro_custom_ide.py` (``micro_custom_ide.py``) | 00:08.427 | 0.0 MB |
+| :ref:`sphx_glr_how_to_work_with_microtvm_micro_custom_ide.py` (``micro_custom_ide.py``) | 00:08.419 | 0.0 MB |
 +-----------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_work_with_microtvm_micro_tflite.py` (``micro_tflite.py``)         | 00:06.888 | 0.0 MB |
+| :ref:`sphx_glr_how_to_work_with_microtvm_micro_tflite.py` (``micro_tflite.py``)         | 00:08.256 | 0.0 MB |
 +-----------------------------------------------------------------------------------------+-----------+--------+
 | :ref:`sphx_glr_how_to_work_with_microtvm_micro_ethosu.py` (``micro_ethosu.py``)         | 00:00.000 | 0.0 MB |
 +-----------------------------------------------------------------------------------------+-----------+--------+
diff --git a/docs/_sources/how_to/work_with_relay/sg_execution_times.rst.txt b/docs/_sources/how_to/work_with_relay/sg_execution_times.rst.txt
index 1e4697813a..813ce7d122 100644
--- a/docs/_sources/how_to/work_with_relay/sg_execution_times.rst.txt
+++ b/docs/_sources/how_to/work_with_relay/sg_execution_times.rst.txt
@@ -5,14 +5,14 @@
 
 Computation times
 =================
-**00:36.235** total execution time for **how_to_work_with_relay** files:
+**00:37.212** total execution time for **how_to_work_with_relay** files:
 
 +----------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_work_with_relay_using_pipeline_executor.py` (``using_pipeline_executor.py``) | 00:31.317 | 0.0 MB |
+| :ref:`sphx_glr_how_to_work_with_relay_using_pipeline_executor.py` (``using_pipeline_executor.py``) | 00:32.119 | 0.0 MB |
 +----------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_work_with_relay_using_external_lib.py` (``using_external_lib.py``)           | 00:03.014 | 0.0 MB |
+| :ref:`sphx_glr_how_to_work_with_relay_using_external_lib.py` (``using_external_lib.py``)           | 00:03.103 | 0.0 MB |
 +----------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_work_with_relay_build_gcn.py` (``build_gcn.py``)                             | 00:01.897 | 0.0 MB |
+| :ref:`sphx_glr_how_to_work_with_relay_build_gcn.py` (``build_gcn.py``)                             | 00:01.984 | 0.0 MB |
 +----------------------------------------------------------------------------------------------------+-----------+--------+
 | :ref:`sphx_glr_how_to_work_with_relay_using_relay_viz.py` (``using_relay_viz.py``)                 | 00:00.006 | 0.0 MB |
 +----------------------------------------------------------------------------------------------------+-----------+--------+
diff --git a/docs/_sources/how_to/work_with_schedules/intrin_math.rst.txt b/docs/_sources/how_to/work_with_schedules/intrin_math.rst.txt
index 665bfdaff3..062a75ca54 100644
--- a/docs/_sources/how_to/work_with_schedules/intrin_math.rst.txt
+++ b/docs/_sources/how_to/work_with_schedules/intrin_math.rst.txt
@@ -281,7 +281,7 @@ The following example customizes CUDA lowering rule for :code:`exp`.
  .. code-block:: none
 
 
-    <function my_cuda_math_rule at 0x7f5c6c00da60>
+    <function my_cuda_math_rule at 0x7f1567998550>
 
 
 
diff --git a/docs/_sources/how_to/work_with_schedules/sg_execution_times.rst.txt b/docs/_sources/how_to/work_with_schedules/sg_execution_times.rst.txt
index ea9aa722e2..2dca4b3932 100644
--- a/docs/_sources/how_to/work_with_schedules/sg_execution_times.rst.txt
+++ b/docs/_sources/how_to/work_with_schedules/sg_execution_times.rst.txt
@@ -5,22 +5,22 @@
 
 Computation times
 =================
-**00:04.945** total execution time for **how_to_work_with_schedules** files:
+**00:05.321** total execution time for **how_to_work_with_schedules** files:
 
 +------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_work_with_schedules_intrin_math.py` (``intrin_math.py``)                 | 00:02.354 | 0.0 MB |
+| :ref:`sphx_glr_how_to_work_with_schedules_intrin_math.py` (``intrin_math.py``)                 | 00:02.462 | 0.0 MB |
 +------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_work_with_schedules_tensorize.py` (``tensorize.py``)                     | 00:00.975 | 0.0 MB |
+| :ref:`sphx_glr_how_to_work_with_schedules_tensorize.py` (``tensorize.py``)                     | 00:01.199 | 0.0 MB |
 +------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_work_with_schedules_reduction.py` (``reduction.py``)                     | 00:00.673 | 0.0 MB |
+| :ref:`sphx_glr_how_to_work_with_schedules_reduction.py` (``reduction.py``)                     | 00:00.694 | 0.0 MB |
 +------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_work_with_schedules_scan.py` (``scan.py``)                               | 00:00.663 | 0.0 MB |
+| :ref:`sphx_glr_how_to_work_with_schedules_scan.py` (``scan.py``)                               | 00:00.687 | 0.0 MB |
 +------------------------------------------------------------------------------------------------+-----------+--------+
 | :ref:`sphx_glr_how_to_work_with_schedules_extern_op.py` (``extern_op.py``)                     | 00:00.117 | 0.0 MB |
 +------------------------------------------------------------------------------------------------+-----------+--------+
 | :ref:`sphx_glr_how_to_work_with_schedules_schedule_primitives.py` (``schedule_primitives.py``) | 00:00.067 | 0.0 MB |
 +------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_how_to_work_with_schedules_tedd.py` (``tedd.py``)                               | 00:00.065 | 0.0 MB |
+| :ref:`sphx_glr_how_to_work_with_schedules_tedd.py` (``tedd.py``)                               | 00:00.064 | 0.0 MB |
 +------------------------------------------------------------------------------------------------+-----------+--------+
 | :ref:`sphx_glr_how_to_work_with_schedules_tuple_inputs.py` (``tuple_inputs.py``)               | 00:00.031 | 0.0 MB |
 +------------------------------------------------------------------------------------------------+-----------+--------+
diff --git a/docs/_sources/topic/vta/tutorials/frontend/deploy_detection.rst.txt b/docs/_sources/topic/vta/tutorials/frontend/deploy_detection.rst.txt
index 7e1deb50dc..a4dc7f3ae4 100644
--- a/docs/_sources/topic/vta/tutorials/frontend/deploy_detection.rst.txt
+++ b/docs/_sources/topic/vta/tutorials/frontend/deploy_detection.rst.txt
@@ -337,7 +337,7 @@ The compilation steps are:
 
     /workspace/python/tvm/relay/build_module.py:345: DeprecationWarning: Please use input parameter mod (tvm.IRModule) instead of deprecated parameter mod (tvm.relay.function.Function)
       warnings.warn(
-    yolov3-tiny inference graph built in 25.26s!
+    yolov3-tiny inference graph built in 25.73s!
 
 
 
diff --git a/docs/_sources/topic/vta/tutorials/frontend/sg_execution_times.rst.txt b/docs/_sources/topic/vta/tutorials/frontend/sg_execution_times.rst.txt
index 8fc49117c4..8d57d6387d 100644
--- a/docs/_sources/topic/vta/tutorials/frontend/sg_execution_times.rst.txt
+++ b/docs/_sources/topic/vta/tutorials/frontend/sg_execution_times.rst.txt
@@ -5,8 +5,8 @@
 
 Computation times
 =================
-**00:57.235** total execution time for **topic_vta_tutorials_frontend** files:
+**00:58.272** total execution time for **topic_vta_tutorials_frontend** files:
 
 +--------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_topic_vta_tutorials_frontend_deploy_detection.py` (``deploy_detection.py``) | 00:57.235 | 0.0 MB |
+| :ref:`sphx_glr_topic_vta_tutorials_frontend_deploy_detection.py` (``deploy_detection.py``) | 00:58.272 | 0.0 MB |
 +--------------------------------------------------------------------------------------------+-----------+--------+
diff --git a/docs/_sources/topic/vta/tutorials/optimize/sg_execution_times.rst.txt b/docs/_sources/topic/vta/tutorials/optimize/sg_execution_times.rst.txt
index 2fe080ea78..203e85798c 100644
--- a/docs/_sources/topic/vta/tutorials/optimize/sg_execution_times.rst.txt
+++ b/docs/_sources/topic/vta/tutorials/optimize/sg_execution_times.rst.txt
@@ -5,10 +5,10 @@
 
 Computation times
 =================
-**00:03.115** total execution time for **topic_vta_tutorials_optimize** files:
+**00:03.190** total execution time for **topic_vta_tutorials_optimize** files:
 
 +--------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_topic_vta_tutorials_optimize_convolution_opt.py` (``convolution_opt.py``)         | 00:02.666 | 0.0 MB |
+| :ref:`sphx_glr_topic_vta_tutorials_optimize_convolution_opt.py` (``convolution_opt.py``)         | 00:02.709 | 0.0 MB |
 +--------------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_topic_vta_tutorials_optimize_matrix_multiply_opt.py` (``matrix_multiply_opt.py``) | 00:00.449 | 0.0 MB |
+| :ref:`sphx_glr_topic_vta_tutorials_optimize_matrix_multiply_opt.py` (``matrix_multiply_opt.py``) | 00:00.482 | 0.0 MB |
 +--------------------------------------------------------------------------------------------------+-----------+--------+
diff --git a/docs/_sources/topic/vta/tutorials/sg_execution_times.rst.txt b/docs/_sources/topic/vta/tutorials/sg_execution_times.rst.txt
index 960fb07455..6dd3685fa8 100644
--- a/docs/_sources/topic/vta/tutorials/sg_execution_times.rst.txt
+++ b/docs/_sources/topic/vta/tutorials/sg_execution_times.rst.txt
@@ -5,10 +5,10 @@
 
 Computation times
 =================
-**00:00.731** total execution time for **topic_vta_tutorials** files:
+**00:00.794** total execution time for **topic_vta_tutorials** files:
 
 +---------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_topic_vta_tutorials_matrix_multiply.py` (``matrix_multiply.py``) | 00:00.380 | 0.0 MB |
+| :ref:`sphx_glr_topic_vta_tutorials_matrix_multiply.py` (``matrix_multiply.py``) | 00:00.412 | 0.0 MB |
 +---------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_topic_vta_tutorials_vta_get_started.py` (``vta_get_started.py``) | 00:00.352 | 0.0 MB |
+| :ref:`sphx_glr_topic_vta_tutorials_vta_get_started.py` (``vta_get_started.py``) | 00:00.383 | 0.0 MB |
 +---------------------------------------------------------------------------------+-----------+--------+
diff --git a/docs/_sources/tutorial/auto_scheduler_matmul_x86.rst.txt b/docs/_sources/tutorial/auto_scheduler_matmul_x86.rst.txt
index 4878aebfdf..af6d50ebf7 100644
--- a/docs/_sources/tutorial/auto_scheduler_matmul_x86.rst.txt
+++ b/docs/_sources/tutorial/auto_scheduler_matmul_x86.rst.txt
@@ -207,13 +207,6 @@ trials, we can load the best schedule from the log file and apply it.
 
 
 
-.. rst-class:: sphx-glr-script-out
-
- .. code-block:: none
-
-    *E
-
-
 
 
 
@@ -325,7 +318,7 @@ We build the binary and check its correctness and performance.
 
  .. code-block:: none
 
-    Execution time of this operator: 90.233 ms
+    Execution time of this operator: 94.207 ms
 
 
 
@@ -441,7 +434,7 @@ operations.
 
 .. rst-class:: sphx-glr-timing
 
-   **Total running time of the script:** ( 1 minutes  33.401 seconds)
+   **Total running time of the script:** ( 1 minutes  32.893 seconds)
 
 
 .. _sphx_glr_download_tutorial_auto_scheduler_matmul_x86.py:
diff --git a/docs/_sources/tutorial/autotvm_matmul_x86.rst.txt b/docs/_sources/tutorial/autotvm_matmul_x86.rst.txt
index 0750d92df7..867a3d2a34 100644
--- a/docs/_sources/tutorial/autotvm_matmul_x86.rst.txt
+++ b/docs/_sources/tutorial/autotvm_matmul_x86.rst.txt
@@ -454,16 +454,16 @@ reduce variance, we take 5 measurements and average them.
     waiting for device...
     device available
     Get devices for measurement successfully!
-    No: 1   GFLOPS: 14.19/14.19     result: MeasureResult(costs=(0.0189170492,), error_no=MeasureErrorNo.NO_ERROR, all_cost=0.5830025672912598, timestamp=1710123201.3791437)       [('tile_y', [-1, 256]), ('tile_x', [-1, 64])],None,68
-    No: 2   GFLOPS: 16.79/16.79     result: MeasureResult(costs=(0.0159834006,), error_no=MeasureErrorNo.NO_ERROR, all_cost=0.5412623882293701, timestamp=1710123201.8840575)       [('tile_y', [-1, 16]), ('tile_x', [-1, 64])],None,64
-    No: 3   GFLOPS: 12.91/16.79     result: MeasureResult(costs=(0.020800177,), error_no=MeasureErrorNo.NO_ERROR, all_cost=0.5968067646026611, timestamp=1710123202.4701016)        [('tile_y', [-1, 16]), ('tile_x', [-1, 256])],None,84
-    No: 4   GFLOPS: 3.76/16.79      result: MeasureResult(costs=(0.0713104224,), error_no=MeasureErrorNo.NO_ERROR, all_cost=1.4071717262268066, timestamp=1710123203.8593924)       [('tile_y', [-1, 64]), ('tile_x', [-1, 8])],None,36
-    No: 5   GFLOPS: 12.21/16.79     result: MeasureResult(costs=(0.021976093199999998,), error_no=MeasureErrorNo.NO_ERROR, all_cost=0.629889726638794, timestamp=1710123204.603425) [('tile_y', [-1, 64]), ('tile_x', [-1, 512])],None,96
-    No: 6   GFLOPS: 1.35/16.79      result: MeasureResult(costs=(0.1984267078,), error_no=MeasureErrorNo.NO_ERROR, all_cost=3.412444591522217, timestamp=1710123208.026968) [('tile_y', [-1, 2]), ('tile_x', [-1, 1])],None,1
-    No: 7   GFLOPS: 8.46/16.79      result: MeasureResult(costs=(0.031718192,), error_no=MeasureErrorNo.NO_ERROR, all_cost=0.7490572929382324, timestamp=1710123208.789671) [('tile_y', [-1, 1]), ('tile_x', [-1, 32])],None,50
-    No: 8   GFLOPS: 11.67/16.79     result: MeasureResult(costs=(0.022997811,), error_no=MeasureErrorNo.NO_ERROR, all_cost=0.6402022838592529, timestamp=1710123209.4181333)        [('tile_y', [-1, 256]), ('tile_x', [-1, 256])],None,88
-    No: 9   GFLOPS: 1.06/16.79      result: MeasureResult(costs=(0.2539200246,), error_no=MeasureErrorNo.NO_ERROR, all_cost=4.292272567749023, timestamp=1710123213.825155) [('tile_y', [-1, 128]), ('tile_x', [-1, 2])],None,17
-    No: 10  GFLOPS: 10.42/16.79     result: MeasureResult(costs=(0.0257699874,), error_no=MeasureErrorNo.NO_ERROR, all_cost=0.6451363563537598, timestamp=1710123214.490874)        [('tile_y', [-1, 4]), ('tile_x', [-1, 64])],None,62
+    No: 1   GFLOPS: 4.40/4.40       result: MeasureResult(costs=(0.061030074200000006,), error_no=MeasureErrorNo.NO_ERROR, all_cost=1.2304062843322754, timestamp=1710126570.8776295)       [('tile_y', [-1, 2]), ('tile_x', [-1, 2])],None,11
+    No: 2   GFLOPS: 2.97/4.40       result: MeasureResult(costs=(0.0902528682,), error_no=MeasureErrorNo.NO_ERROR, all_cost=1.7147302627563477, timestamp=1710126572.5791888)       [('tile_y', [-1, 16]), ('tile_x', [-1, 2])],None,14
+    No: 3   GFLOPS: 13.05/13.05     result: MeasureResult(costs=(0.0205691926,), error_no=MeasureErrorNo.NO_ERROR, all_cost=0.5842618942260742, timestamp=1710126573.1702738)       [('tile_y', [-1, 8]), ('tile_x', [-1, 512])],None,93
+    No: 4   GFLOPS: 2.01/13.05      result: MeasureResult(costs=(0.133835507,), error_no=MeasureErrorNo.NO_ERROR, all_cost=2.3796019554138184, timestamp=1710126575.5717041)        [('tile_y', [-1, 8]), ('tile_x', [-1, 1])],None,3
+    No: 5   GFLOPS: 14.58/14.58     result: MeasureResult(costs=(0.018413195200000003,), error_no=MeasureErrorNo.NO_ERROR, all_cost=0.5823323726654053, timestamp=1710126576.309144)        [('tile_y', [-1, 32]), ('tile_x', [-1, 128])],None,75
+    No: 6   GFLOPS: 14.27/14.58     result: MeasureResult(costs=(0.0188106998,), error_no=MeasureErrorNo.NO_ERROR, all_cost=0.6106653213500977, timestamp=1710126576.8704078)       [('tile_y', [-1, 128]), ('tile_x', [-1, 64])],None,67
+    No: 7   GFLOPS: 11.56/14.58     result: MeasureResult(costs=(0.0232234722,), error_no=MeasureErrorNo.NO_ERROR, all_cost=0.6515007019042969, timestamp=1710126577.5052795)       [('tile_y', [-1, 256]), ('tile_x', [-1, 256])],None,88
+    No: 8   GFLOPS: 9.26/14.58      result: MeasureResult(costs=(0.029000131800000002,), error_no=MeasureErrorNo.NO_ERROR, all_cost=0.7913157939910889, timestamp=1710126578.232794)        [('tile_y', [-1, 1]), ('tile_x', [-1, 64])],None,60
+    No: 9   GFLOPS: 1.05/14.58      result: MeasureResult(costs=(0.2555571304,), error_no=MeasureErrorNo.NO_ERROR, all_cost=4.327091217041016, timestamp=1710126582.6735973)        [('tile_y', [-1, 64]), ('tile_x', [-1, 2])],None,16
+    No: 10  GFLOPS: 1.06/14.58      result: MeasureResult(costs=(0.2536710766,), error_no=MeasureErrorNo.NO_ERROR, all_cost=4.30211329460144, timestamp=1710126586.9902842) [('tile_y', [-1, 256]), ('tile_x', [-1, 2])],None,18
 
 
 
diff --git a/docs/_sources/tutorial/autotvm_relay_x86.rst.txt b/docs/_sources/tutorial/autotvm_relay_x86.rst.txt
index 0da68f7eba..42605786c6 100644
--- a/docs/_sources/tutorial/autotvm_relay_x86.rst.txt
+++ b/docs/_sources/tutorial/autotvm_relay_x86.rst.txt
@@ -311,7 +311,7 @@ standard deviation.
 
  .. code-block:: none
 
-    {'mean': 466.01134932000605, 'median': 465.4960372000005, 'std': 1.3638957864294126}
+    {'mean': 467.253117500004, 'median': 466.7822684499697, 'std': 2.5871655919359116}
 
 
 
@@ -582,31 +582,30 @@ the tuning data to.
 
  .. code-block:: none
 
-     [Task  1/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task  1/25]  Current/Best:    5.24/  17.59 GFLOPS | Progress: (4/20) | 8.43 s     [Task  1/25]  Current/Best:   11.45/  23.64 GFLOPS | Progress: (8/20) | 10.64 s     [Task  1/25]  Current/Best:   18.57/  23.64 GFLOPS | Progress: (12/20) | 13.61 s     [Task  1/25]  Current/Best:    6.51/  23.64 GFLOPS | Progress: (16/20) | 16.38 s     [Task  1/25]  Current/Best:   10.03/  23.64 GFLOPS | Progress: (20/20) | 19.17 s Done.
-     [Task  2/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task  2/25]  Current/Best:   19.55/  19.55 GFLOPS | Progress: (4/20) | 3.83 s     [Task  2/25]  Current/Best:   16.30/  19.55 GFLOPS | Progress: (8/20) | 5.79 s     [Task  2/25]  Current/Best:   13.25/  21.71 GFLOPS | Progress: (12/20) | 8.41 s     [Task  2/25]  Current/Best:   15.63/  21.71 GFLOPS | Progress: (16/20) | 10.14 s     [Task  2/25]  Current/Best:   21.81/  21.81 GFLOPS | Progress: (20/20) | 11.58 s Done.
-     [Task  3/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task  3/25]  Current/Best:   12.82/  20.02 GFLOPS | Progress: (4/20) | 4.66 s     [Task  3/25]  Current/Best:   14.89/  22.09 GFLOPS | Progress: (8/20) | 7.06 s     [Task  3/25]  Current/Best:    3.25/  22.09 GFLOPS | Progress: (12/20) | 9.99 s     [Task  3/25]  Current/Best:    8.20/  22.19 GFLOPS | Progress: (16/20) | 12.64 s     [Task  3/25]  Current/Best:   13.41/  22.19 GFLOPS | Progress: (20/20) | 14.89 s Done.
-     [Task  4/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task  4/25]  Current/Best:    5.57/  16.28 GFLOPS | Progress: (4/20) | 4.30 s     [Task  4/25]  Current/Best:   16.43/  16.43 GFLOPS | Progress: (8/20) | 11.49 s     [Task  4/25]  Current/Best:    6.43/  16.71 GFLOPS | Progress: (12/20) | 13.44 s     [Task  4/25]  Current/Best:   17.65/  17.65 GFLOPS | Progress: (16/20) | 17.79 s     [Task  4/25]  Current/Best:   15.88/  17.65 GFLOPS | Progress: (20/20) | 20.78 s Done.
-     [Task  5/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task  5/25]  Current/Best:   16.65/  16.65 GFLOPS | Progress: (4/20) | 4.91 s     [Task  5/25]  Current/Best:    6.09/  16.65 GFLOPS | Progress: (8/20) | 7.46 s     [Task  5/25]  Current/Best:   11.95/  19.72 GFLOPS | Progress: (12/20) | 9.53 s     [Task  5/25]  Current/Best:   12.82/  19.72 GFLOPS | Progress: (16/20) | 11.54 s     [Task  5/25]  Current/Best:    3.29/  19.72 GFLOPS | Progress: (20/20) | 13.57 s Done.
-     [Task  6/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task  6/25]  Current/Best:   20.00/  20.00 GFLOPS | Progress: (4/20) | 4.43 s     [Task  6/25]  Current/Best:   14.73/  20.00 GFLOPS | Progress: (8/20) | 6.76 s     [Task  6/25]  Current/Best:   12.60/  20.00 GFLOPS | Progress: (12/20) | 8.74 s     [Task  6/25]  Current/Best:    6.60/  20.00 GFLOPS | Progress: (16/20) | 11.65 s     [Task  6/25]  Current/Best:   15.12/  20.00 GFLOPS | Progress: (20/20) | 15.44 s Done.
-     [Task  7/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task  7/25]  Current/Best:   15.81/  21.67 GFLOPS | Progress: (4/20) | 4.68 s     [Task  7/25]  Current/Best:    5.84/  21.67 GFLOPS | Progress: (8/20) | 7.83 s     [Task  7/25]  Current/Best:   22.55/  22.55 GFLOPS | Progress: (12/20) | 10.00 s     [Task  7/25]  Current/Best:   12.39/  23.38 GFLOPS | Progress: (16/20) | 13.20 s     [Task  7/25]  Current/Best:   23.09/  23.38 GFLOPS | Progress: (20/20) | 15.35 s Done.
-     [Task  8/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task  8/25]  Current/Best:   16.26/  22.79 GFLOPS | Progress: (4/20) | 4.64 s     [Task  8/25]  Current/Best:    9.15/  22.79 GFLOPS | Progress: (8/20) | 10.54 s     [Task  8/25]  Current/Best:   17.76/  22.79 GFLOPS | Progress: (12/20) | 13.51 s     [Task  8/25]  Current/Best:    9.27/  22.79 GFLOPS | Progress: (16/20) | 15.90 s     [Task  8/25]  Current/Best:    9.15/  22.79 GFLOPS | Progress: (20/20) | 22.11 s Done.
-     [Task  9/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task  9/25]  Current/Best:   10.84/  14.67 GFLOPS | Progress: (4/20) | 6.29 s     [Task  9/25]  Current/Best:    9.55/  18.46 GFLOPS | Progress: (8/20) | 8.28 s     [Task  9/25]  Current/Best:   10.75/  19.96 GFLOPS | Progress: (12/20) | 13.16 s     [Task  9/25]  Current/Best:   20.28/  20.28 GFLOPS | Progress: (16/20) | 14.97 s     [Task  9/25]  Current/Best:   10.13/  20.72 GFLOPS | Progress: (20/20) | 26.06 s     [Task 10/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 10/25]  Current/Best:   14.91/  18.36 GFLOPS | Progress: (4/20) | 5.59 s     [Task 10/25]  Current/Best:    6.05/  18.36 GFLOPS | Progress: (8/20) | 7.38 s     [Task 10/25]  Current/Best:   18.00/  18.36 GFLOPS | Progress: (12/20) | 8.98 s     [Task 10/25]  Current/Best:   18.48/  18.48 GFLOPS | Progress: (16/20) | 11.74 s     [Task 10/25]  Current/Best:   12.71/  18.48 GFLOPS | Progress: (20/20)
  | 13.43 s Done.
-     [Task 11/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 11/25]  Current/Best:   22.53/  22.53 GFLOPS | Progress: (4/20) | 4.51 s     [Task 11/25]  Current/Best:    9.14/  24.10 GFLOPS | Progress: (8/20) | 6.63 s     [Task 11/25]  Current/Best:   18.08/  24.10 GFLOPS | Progress: (12/20) | 9.38 s     [Task 11/25]  Current/Best:   14.93/  24.10 GFLOPS | Progress: (16/20) | 11.44 s     [Task 11/25]  Current/Best:   14.02/  24.10 GFLOPS | Progress: (20/20) | 13.59 s Done.
-     [Task 12/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 12/25]  Current/Best:   17.15/  17.15 GFLOPS | Progress: (4/20) | 4.96 s     [Task 12/25]  Current/Best:   19.79/  19.79 GFLOPS | Progress: (8/20) | 10.36 s     [Task 12/25]  Current/Best:   11.03/  19.79 GFLOPS | Progress: (12/20) | 14.89 s     [Task 12/25]  Current/Best:   16.16/  21.24 GFLOPS | Progress: (16/20) | 19.11 s     [Task 12/25]  Current/Best:   19.54/  21.24 GFLOPS | Progress: (20/20) | 21.76 s Done.
-     [Task 13/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 13/25]  Current/Best:   11.30/  21.86 GFLOPS | Progress: (4/20) | 5.91 s     [Task 13/25]  Current/Best:   22.34/  22.34 GFLOPS | Progress: (8/20) | 8.49 s     [Task 13/25]  Current/Best:   18.46/  22.34 GFLOPS | Progress: (12/20) | 11.58 s     [Task 13/25]  Current/Best:    9.16/  22.34 GFLOPS | Progress: (16/20) | 14.92 s     [Task 13/25]  Current/Best:   11.01/  22.34 GFLOPS | Progress: (20/20) | 17.18 s Done.
-     [Task 14/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 14/25]  Current/Best:    5.77/  19.79 GFLOPS | Progress: (4/20) | 14.08 s     [Task 14/25]  Current/Best:   17.43/  19.79 GFLOPS | Progress: (8/20) | 17.26 s     [Task 14/25]  Current/Best:   11.75/  19.79 GFLOPS | Progress: (12/20) | 19.19 s     [Task 14/25]  Current/Best:   18.64/  19.79 GFLOPS | Progress: (16/20) | 22.07 s     [Task 14/25]  Current/Best:    6.12/  19.79 GFLOPS | Progress: (20/20) | 24.75 s Done.
-     [Task 15/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 15/25]  Current/Best:    7.84/  19.15 GFLOPS | Progress: (4/20) | 8.59 s     [Task 15/25]  Current/Best:    8.45/  19.15 GFLOPS | Progress: (8/20) | 10.21 s     [Task 15/25]  Current/Best:   16.68/  19.41 GFLOPS | Progress: (12/20) | 21.23 s     [Task 15/25]  Current/Best:   17.64/  19.41 GFLOPS | Progress: (16/20) | 32.29 s     [Task 15/25]  Current/Best:   14.89/  23.51 GFLOPS | Progress: (20/20) | 34.82 s     [Task 16/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s Done.
+     [Task  1/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task  1/25]  Current/Best:    3.55/  24.44 GFLOPS | Progress: (4/20) | 8.04 s     [Task  1/25]  Current/Best:   14.25/  24.44 GFLOPS | Progress: (8/20) | 11.00 s     [Task  1/25]  Current/Best:   22.01/  24.44 GFLOPS | Progress: (12/20) | 13.88 s     [Task  1/25]  Current/Best:   21.22/  24.44 GFLOPS | Progress: (16/20) | 17.07 s     [Task  1/25]  Current/Best:   18.90/  24.44 GFLOPS | Progress: (20/20) | 20.66 s Done.
+     [Task  2/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task  2/25]  Current/Best:   17.97/  17.97 GFLOPS | Progress: (4/20) | 4.64 s     [Task  2/25]  Current/Best:    6.72/  17.97 GFLOPS | Progress: (8/20) | 6.27 s     [Task  2/25]  Current/Best:    9.46/  17.97 GFLOPS | Progress: (12/20) | 7.93 s     [Task  2/25]  Current/Best:    3.43/  17.97 GFLOPS | Progress: (16/20) | 9.44 s     [Task  2/25]  Current/Best:   23.06/  23.06 GFLOPS | Progress: (20/20) | 10.76 s Done.
+     [Task  3/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task  3/25]  Current/Best:   14.50/  19.83 GFLOPS | Progress: (4/20) | 5.05 s     [Task  3/25]  Current/Best:   11.10/  19.83 GFLOPS | Progress: (8/20) | 8.78 s     [Task  3/25]  Current/Best:   21.18/  21.18 GFLOPS | Progress: (12/20) | 10.95 s     [Task  3/25]  Current/Best:    5.88/  21.88 GFLOPS | Progress: (16/20) | 13.50 s     [Task  3/25]  Current/Best:    3.24/  21.88 GFLOPS | Progress: (20/20) | 16.81 s Done.
+     [Task  4/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task  4/25]  Current/Best:   14.96/  15.75 GFLOPS | Progress: (4/20) | 4.44 s     [Task  4/25]  Current/Best:   17.29/  17.29 GFLOPS | Progress: (8/20) | 10.31 s     [Task  4/25]  Current/Best:   10.99/  20.62 GFLOPS | Progress: (12/20) | 15.01 s     [Task  4/25]  Current/Best:   10.63/  20.62 GFLOPS | Progress: (16/20) | 17.93 s     [Task  4/25]  Current/Best:    6.79/  20.83 GFLOPS | Progress: (20/20) | 19.87 s Done.
+     [Task  5/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task  5/25]  Current/Best:   14.31/  19.71 GFLOPS | Progress: (4/20) | 4.39 s     [Task  5/25]  Current/Best:   21.04/  21.04 GFLOPS | Progress: (8/20) | 7.00 s     [Task  5/25]  Current/Best:   14.49/  21.04 GFLOPS | Progress: (12/20) | 8.95 s     [Task  5/25]  Current/Best:   13.58/  21.04 GFLOPS | Progress: (16/20) | 11.08 s     [Task  5/25]  Current/Best:   11.29/  21.73 GFLOPS | Progress: (20/20) | 13.01 s Done.
+     [Task  6/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task  6/25]  Current/Best:   12.45/  18.60 GFLOPS | Progress: (4/20) | 5.44 s     [Task  6/25]  Current/Best:    5.76/  18.60 GFLOPS | Progress: (8/20) | 10.32 s     [Task  6/25]  Current/Best:    5.94/  18.60 GFLOPS | Progress: (12/20) | 12.80 s     [Task  6/25]  Current/Best:   14.41/  22.16 GFLOPS | Progress: (16/20) | 15.37 s     [Task  6/25]  Current/Best:   11.25/  22.16 GFLOPS | Progress: (20/20) | 17.99 s Done.
+     [Task  7/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task  7/25]  Current/Best:   14.38/  20.12 GFLOPS | Progress: (4/20) | 4.79 s     [Task  7/25]  Current/Best:   13.60/  21.82 GFLOPS | Progress: (8/20) | 8.23 s     [Task  7/25]  Current/Best:    7.95/  21.82 GFLOPS | Progress: (12/20) | 10.50 s     [Task  7/25]  Current/Best:    5.84/  21.82 GFLOPS | Progress: (16/20) | 13.09 s     [Task  7/25]  Current/Best:   12.51/  21.82 GFLOPS | Progress: (20/20) | 15.46 s Done.
+     [Task  8/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task  8/25]  Current/Best:    2.99/  14.32 GFLOPS | Progress: (4/20) | 5.95 s     [Task  8/25]  Current/Best:   13.92/  14.32 GFLOPS | Progress: (8/20) | 11.50 s     [Task  8/25]  Current/Best:   13.10/  14.32 GFLOPS | Progress: (12/20) | 17.20 s     [Task  8/25]  Current/Best:   15.35/  15.35 GFLOPS | Progress: (16/20) | 21.47 s     [Task  8/25]  Current/Best:    5.94/  18.67 GFLOPS | Progress: (20/20) | 23.69 s Done.
+     [Task  9/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task  9/25]  Current/Best:    6.16/   9.86 GFLOPS | Progress: (4/20) | 4.28 s     [Task  9/25]  Current/Best:   14.39/  18.65 GFLOPS | Progress: (8/20) | 6.54 s     [Task  9/25]  Current/Best:   12.61/  18.65 GFLOPS | Progress: (12/20) | 8.73 s     [Task  9/25]  Current/Best:   11.31/  18.65 GFLOPS | Progress: (16/20) | 19.98 s     [Task  9/25]  Current/Best:   21.65/  21.65 GFLOPS | Progress: (20/20) | 25.68 s     [Task 10/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 10/25]  Current/Best:   12.17/  21.24 GFLOPS | Progress: (4/20) | 4.21 s     [Task 10/25]  Current/Best:   15.90/  21.24 GFLOPS | Progress: (8/20) | 7.13 s     [Task 10/25]  Current/Best:   14.08/  21.24 GFLOPS | Progress: (12/20) | 9.93 s     [Task 10/25]  Current/Best:   19.65/  21.24 GFLOPS | Progress: (16/20) | 11.59 s     [Task 10/25]  Current/Best:   13.37/  21.24 GFLOPS | Progress: (20/20) 
 | 13.42 s Done.
+     [Task 11/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 11/25]  Current/Best:   12.69/  23.38 GFLOPS | Progress: (4/20) | 4.48 s     [Task 11/25]  Current/Best:   17.01/  23.38 GFLOPS | Progress: (8/20) | 6.59 s     [Task 11/25]  Current/Best:   12.80/  23.38 GFLOPS | Progress: (12/20) | 8.91 s     [Task 11/25]  Current/Best:   18.71/  23.38 GFLOPS | Progress: (16/20) | 11.23 s     [Task 11/25]  Current/Best:   14.09/  23.38 GFLOPS | Progress: (20/20) | 13.74 s Done.
+     [Task 12/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 12/25]  Current/Best:   16.89/  17.87 GFLOPS | Progress: (4/20) | 4.45 s     [Task 12/25]  Current/Best:   18.27/  18.27 GFLOPS | Progress: (8/20) | 10.28 s     [Task 12/25]  Current/Best:    5.03/  18.47 GFLOPS | Progress: (12/20) | 13.47 s     [Task 12/25]  Current/Best:    7.84/  20.21 GFLOPS | Progress: (16/20) | 19.01 s     [Task 12/25]  Current/Best:   21.30/  21.30 GFLOPS | Progress: (20/20) | 21.73 s Done.
+     [Task 13/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 13/25]  Current/Best:   18.53/  18.53 GFLOPS | Progress: (4/20) | 7.02 s     [Task 13/25]  Current/Best:   21.51/  21.51 GFLOPS | Progress: (8/20) | 9.94 s     [Task 13/25]  Current/Best:   19.05/  21.65 GFLOPS | Progress: (12/20) | 12.01 s     [Task 13/25]  Current/Best:   21.80/  23.48 GFLOPS | Progress: (16/20) | 14.51 s     [Task 13/25]  Current/Best:   13.32/  23.48 GFLOPS | Progress: (20/20) | 17.80 s Done.
+     [Task 14/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 14/25]  Current/Best:   14.83/  15.78 GFLOPS | Progress: (4/20) | 6.29 s     [Task 14/25]  Current/Best:   15.82/  16.31 GFLOPS | Progress: (8/20) | 8.79 s     [Task 14/25]  Current/Best:    6.62/  16.31 GFLOPS | Progress: (12/20) | 16.93 s     [Task 14/25]  Current/Best:    8.83/  16.31 GFLOPS | Progress: (16/20) | 21.41 s     [Task 14/25]  Current/Best:   12.52/  20.75 GFLOPS | Progress: (20/20) | 24.53 s Done.
+     [Task 15/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 15/25]  Current/Best:    7.06/  18.85 GFLOPS | Progress: (4/20) | 8.68 s     [Task 15/25]  Current/Best:   18.95/  18.95 GFLOPS | Progress: (8/20) | 10.34 s     [Task 15/25]  Current/Best:    6.44/  24.05 GFLOPS | Progress: (12/20) | 13.57 s     [Task 15/25]  Current/Best:    8.85/  24.05 GFLOPS | Progress: (16/20) | 15.22 s     [Task 15/25]  Current/Best:   11.72/  24.05 GFLOPS | Progress: (20/20) | 18.98 s Done.
+     [Task 16/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 16/25]  Current/Best:    1.62/  22.27 GFLOPS | Progress: (4/20) | 4.84 s     [Task 16/25]  Current/Best:    5.66/  22.27 GFLOPS | Progress: (8/20) | 7.75 s     [Task 16/25]  Current/Best:   21.15/  22.27 GFLOPS | Progress: (12/20) | 9.30 s     [Task 16/25]  Current/Best:    5.47/  22.27 GFLOPS | Progress: (16/20) | 11.12 s     [Task 16/25]  Current/Best:   18.49/  22.27 GFLOPS | Progress: (20/20) | 12.95 s Done.
+     [Task 17/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 17/25]  Current/Best:   11.77/  22.81 GFLOPS | Progress: (4/20) | 4.96 s     [Task 17/25]  Current/Best:   21.69/  22.81 GFLOPS | Progress: (8/20) | 7.34 s     [Task 17/25]  Current/Best:   16.99/  22.81 GFLOPS | Progress: (12/20) | 10.05 s     [Task 17/25]  Current/Best:   21.40/  22.81 GFLOPS | Progress: (16/20) | 12.92 s     [Task 17/25]  Current/Best:   12.79/  22.81 GFLOPS | Progress: (20/20) | 15.68 s Done.
+     [Task 18/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 18/25]  Current/Best:    8.66/  18.75 GFLOPS | Progress: (4/20) | 8.23 s     [Task 18/25]  Current/Best:    6.45/  19.16 GFLOPS | Progress: (8/20) | 10.81 s     [Task 18/25]  Current/Best:   16.57/  19.16 GFLOPS | Progress: (12/20) | 12.77 s     [Task 18/25]  Current/Best:   14.55/  21.49 GFLOPS | Progress: (16/20) | 17.46 s     [Task 18/25]  Current/Best:   12.60/  21.49 GFLOPS | Progress: (20/20) | 20.95 s Done.
+     [Task 19/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 19/25]  Current/Best:   20.44/  20.44 GFLOPS | Progress: (4/20) | 7.18 s     [Task 19/25]  Current/Best:   18.89/  20.44 GFLOPS | Progress: (8/20) | 10.76 s     [Task 19/25]  Current/Best:   19.96/  21.97 GFLOPS | Progress: (12/20) | 13.76 s     [Task 19/25]  Current/Best:   17.64/  21.97 GFLOPS | Progress: (16/20) | 16.38 s     [Task 19/25]  Current/Best:   12.96/  23.09 GFLOPS | Progress: (20/20) | 19.06 s Done.
+     [Task 20/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 20/25]  Current/Best:    3.19/  15.73 GFLOPS | Progress: (4/20) | 6.10 s     [Task 20/25]  Current/Best:   10.67/  15.73 GFLOPS | Progress: (8/20) | 11.53 s     [Task 20/25]  Current/Best:    7.70/  21.89 GFLOPS | Progress: (12/20) | 19.32 s     [Task 20/25]  Current/Best:    9.73/  21.89 GFLOPS | Progress: (16/20) | 22.08 s     [Task 20/25]  Current/Best:    6.63/  21.89 GFLOPS | Progress: (20/20) | 25.25 s Done.
+     [Task 21/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 21/25]  Current/Best:    6.24/  18.50 GFLOPS | Progress: (4/20) | 9.79 s     [Task 21/25]  Current/Best:   14.27/  18.50 GFLOPS | Progress: (8/20) | 15.11 s     [Task 21/25]  Current/Best:    6.64/  19.18 GFLOPS | Progress: (12/20) | 26.34 s     [Task 21/25]  Current/Best:    3.90/  22.63 GFLOPS | Progress: (16/20) | 29.27 s     [Task 21/25]  Current/Best:   12.72/  22.63 GFLOPS | Progress: (20/20) | 38.89 s     [Task 22/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s Done.
      Done.
-     [Task 16/25]  Current/Best:   13.52/  14.78 GFLOPS | Progress: (4/20) | 5.02 s     [Task 16/25]  Current/Best:   15.65/  22.37 GFLOPS | Progress: (8/20) | 6.62 s     [Task 16/25]  Current/Best:    1.63/  22.37 GFLOPS | Progress: (12/20) | 8.70 s     [Task 16/25]  Current/Best:    6.21/  22.37 GFLOPS | Progress: (16/20) | 11.01 s     [Task 16/25]  Current/Best:   12.30/  22.37 GFLOPS | Progress: (20/20) | 13.14 s Done.
-     [Task 17/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 17/25]  Current/Best:   18.46/  21.20 GFLOPS | Progress: (4/20) | 6.24 s     [Task 17/25]  Current/Best:   18.45/  21.99 GFLOPS | Progress: (8/20) | 8.60 s     [Task 17/25]  Current/Best:   12.68/  22.79 GFLOPS | Progress: (12/20) | 11.05 s     [Task 17/25]  Current/Best:    9.97/  22.79 GFLOPS | Progress: (16/20) | 14.43 s     [Task 17/25]  Current/Best:   13.30/  22.79 GFLOPS | Progress: (20/20) | 17.14 s Done.
-     [Task 18/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 18/25]  Current/Best:   16.66/  18.68 GFLOPS | Progress: (4/20) | 7.57 s     [Task 18/25]  Current/Best:   10.33/  18.68 GFLOPS | Progress: (8/20) | 13.91 s     [Task 18/25]  Current/Best:   14.84/  18.68 GFLOPS | Progress: (12/20) | 16.86 s     [Task 18/25]  Current/Best:   19.61/  21.72 GFLOPS | Progress: (16/20) | 18.56 s     [Task 18/25]  Current/Best:   13.95/  21.72 GFLOPS | Progress: (20/20) | 21.04 s Done.
-     [Task 19/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 19/25]  Current/Best:   11.60/  22.23 GFLOPS | Progress: (4/20) | 5.77 s     [Task 19/25]  Current/Best:    8.42/  22.23 GFLOPS | Progress: (8/20) | 9.53 s     [Task 19/25]  Current/Best:   21.66/  22.23 GFLOPS | Progress: (12/20) | 13.28 s     [Task 19/25]  Current/Best:   20.96/  22.23 GFLOPS | Progress: (16/20) | 16.37 s     [Task 19/25]  Current/Best:   19.17/  22.23 GFLOPS | Progress: (20/20) | 18.64 s Done.
-     [Task 20/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 20/25]  Current/Best:   11.95/  15.94 GFLOPS | Progress: (4/20) | 7.31 s     [Task 20/25]  Current/Best:    8.63/  19.54 GFLOPS | Progress: (8/20) | 14.76 s     [Task 20/25]  Current/Best:    6.43/  20.28 GFLOPS | Progress: (12/20) | 17.16 s     [Task 20/25]  Current/Best:    4.91/  20.28 GFLOPS | Progress: (16/20) | 28.64 s     [Task 20/25]  Current/Best:   15.18/  20.28 GFLOPS | Progress: (20/20) | 31.07 s Done.
-     [Task 21/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 21/25]  Current/Best:    5.07/  17.49 GFLOPS | Progress: (4/20) | 5.55 s     [Task 21/25]  Current/Best:   11.15/  17.50 GFLOPS | Progress: (8/20) | 14.25 s     [Task 21/25]  Current/Best:   12.33/  17.50 GFLOPS | Progress: (12/20) | 25.16 s     [Task 21/25]  Current/Best:    5.41/  17.50 GFLOPS | Progress: (16/20) | 31.76 s     [Task 21/25]  Current/Best:    8.45/  20.64 GFLOPS | Progress: (20/20) | 42.54 s Done.
-     [Task 22/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 22/25]  Current/Best:    1.61/  21.21 GFLOPS | Progress: (4/20) | 5.76 s     [Task 22/25]  Current/Best:    5.22/  21.21 GFLOPS | Progress: (8/20) | 7.87 s     [Task 22/25]  Current/Best:    5.39/  21.21 GFLOPS | Progress: (12/20) | 15.51 s     [Task 22/25]  Current/Best:   17.92/  21.21 GFLOPS | Progress: (16/20) | 18.06 s     [Task 22/25]  Current/Best:   18.78/  21.21 GFLOPS | Progress: (20/20) | 19.62 s Done.
-     [Task 23/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 23/25]  Current/Best:   10.35/  11.77 GFLOPS | Progress: (4/20) | 6.20 s     [Task 23/25]  Current/Best:    6.42/  20.18 GFLOPS | Progress: (8/20) | 9.16 s     [Task 23/25]  Current/Best:   11.22/  23.51 GFLOPS | Progress: (12/20) | 13.09 s     [Task 23/25]  Current/Best:   21.42/  23.51 GFLOPS | Progress: (16/20) | 16.26 s     [Task 23/25]  Current/Best:   24.59/  24.59 GFLOPS | Progress: (20/20) | 20.11 s Done.
-     [Task 24/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 24/25]  Current/Best:    8.37/   8.37 GFLOPS | Progress: (4/20) | 12.85 s     [Task 24/25]  Current/Best:    2.84/   8.37 GFLOPS | Progress: (8/20) | 23.79 s     [Task 24/25]  Current/Best:   10.64/  10.64 GFLOPS | Progress: (12/20) | 34.75 s     [Task 24/25]  Current/Best:    4.28/  10.64 GFLOPS | Progress: (16/20) | 38.17 s     [Task 24/25]  Current/Best:   10.26/  10.64 GFLOPS | Progress: (20/20) | 49.10 s     [Task 25/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 25/25]  Current/Best:    9.70/   9.70 GFLOPS | Progress: (4/20) | 5.69 s     [Task 25/25]  Current/Best:    8.01/   9.70 GFLOPS | Progress: (8/20) | 16.62 s Done.
-     [Task 25/25]  Current/Best:    5.42/   9.70 GFLOPS | Progress: (12/20) | 19.84 s     [Task 25/25]  Current/Best:    9.11/   9.70 GFLOPS | Progress: (16/20) | 30.79 s     [Task 25/25]  Current/Best:    2.86/   9.70 GFLOPS | Progress: (20/20) | 36.39 s
+     [Task 22/25]  Current/Best:   10.71/  19.60 GFLOPS | Progress: (4/20) | 4.86 s     [Task 22/25]  Current/Best:   19.83/  21.08 GFLOPS | Progress: (8/20) | 6.54 s     [Task 22/25]  Current/Best:   17.72/  21.08 GFLOPS | Progress: (12/20) | 8.59 s     [Task 22/25]  Current/Best:   19.51/  21.08 GFLOPS | Progress: (16/20) | 13.59 s     [Task 22/25]  Current/Best:    5.22/  21.08 GFLOPS | Progress: (20/20) | 16.72 s Done.
+     [Task 23/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 23/25]  Current/Best:   13.29/  21.05 GFLOPS | Progress: (4/20) | 5.87 s     [Task 23/25]  Current/Best:   18.37/  21.05 GFLOPS | Progress: (8/20) | 8.98 s     [Task 23/25]  Current/Best:   23.18/  23.18 GFLOPS | Progress: (12/20) | 11.21 s     [Task 23/25]  Current/Best:   21.79/  23.18 GFLOPS | Progress: (16/20) | 14.62 s     [Task 23/25]  Current/Best:   10.89/  23.18 GFLOPS | Progress: (20/20) | 17.10 s Done.
+     [Task 24/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 24/25]  Current/Best:    7.69/   7.69 GFLOPS | Progress: (4/20) | 13.48 s     [Task 24/25]  Current/Best:    1.87/   7.69 GFLOPS | Progress: (8/20) | 25.70 s     [Task 24/25]  Current/Best:    2.29/   7.69 GFLOPS | Progress: (12/20) | 36.43 s     [Task 24/25]  Current/Best:    6.37/   8.28 GFLOPS | Progress: (16/20) | 40.36 s     [Task 24/25]  Current/Best:    1.50/   8.28 GFLOPS | Progress: (20/20) | 50.77 s     [Task 25/25]  Current/Best:    0.00/   0.00 GFLOPS | Progress: (0/20) | 0.00 s     [Task 25/25]  Current/Best:    3.10/   9.71 GFLOPS | Progress: (4/20) | 9.72 s     [Task 25/25]  Current/Best:    7.80/   9.71 GFLOPS | Progress: (8/20) | 11.81 s     [Task 25/25]  Current/Best:    5.77/   9.71 GFLOPS | Progress: (12/20) | 13.20 s     [Task 25/25]  Current/Best:   10.16/  10.16 GFLOPS | Progress: (16/20) | 24.14 s     [Task 25/25]  Current/Best:    3.11/  10.16 GFLOPS | Progress: (20
 /20) | 33.63 s
 
 
 
@@ -675,6 +674,7 @@ model using optimized operators to speed up our computations.
  .. code-block:: none
 
      Done.
+     Done.
 
 
 
@@ -708,8 +708,8 @@ Verify that the optimized model runs and produces the same results:
 
  .. code-block:: none
 
-    class='n02123045 tabby, tabby cat' with probability=0.621104
-    class='n02123159 tiger cat' with probability=0.356378
+    class='n02123045 tabby, tabby cat' with probability=0.621105
+    class='n02123159 tiger cat' with probability=0.356377
     class='n02124075 Egyptian cat' with probability=0.019712
     class='n02129604 tiger, Panthera tigris' with probability=0.001215
     class='n04040759 radiator' with probability=0.000262
@@ -766,8 +766,8 @@ improvement in comparing the optimized model to the unoptimized model.
 
  .. code-block:: none
 
-    optimized: {'mean': 388.6962999200023, 'median': 388.4985621999931, 'std': 2.9082941790278674}
-    unoptimized: {'mean': 466.01134932000605, 'median': 465.4960372000005, 'std': 1.3638957864294126}
+    optimized: {'mean': 375.7978562700373, 'median': 376.2825186000555, 'std': 2.1423596596912478}
+    unoptimized: {'mean': 467.253117500004, 'median': 466.7822684499697, 'std': 2.5871655919359116}
 
 
 
@@ -790,7 +790,7 @@ profiling/benchmarking.
 
 .. rst-class:: sphx-glr-timing
 
-   **Total running time of the script:** ( 13 minutes  12.720 seconds)
+   **Total running time of the script:** ( 12 minutes  49.344 seconds)
 
 
 .. _sphx_glr_download_tutorial_autotvm_relay_x86.py:
diff --git a/docs/_sources/tutorial/cross_compilation_and_rpc.rst.txt b/docs/_sources/tutorial/cross_compilation_and_rpc.rst.txt
index fcd74f9327..a974af4f7b 100644
--- a/docs/_sources/tutorial/cross_compilation_and_rpc.rst.txt
+++ b/docs/_sources/tutorial/cross_compilation_and_rpc.rst.txt
@@ -274,7 +274,7 @@ device and returns the measured cost. Network overhead is excluded.
 
  .. code-block:: none
 
-    1.244e-07 secs/op
+    1.149e-07 secs/op
 
 
 
diff --git a/docs/_sources/tutorial/intro_topi.rst.txt b/docs/_sources/tutorial/intro_topi.rst.txt
index 51b64a2a23..ce98d632db 100644
--- a/docs/_sources/tutorial/intro_topi.rst.txt
+++ b/docs/_sources/tutorial/intro_topi.rst.txt
@@ -270,7 +270,7 @@ As you can see, scheduled stages of computation have been accumulated and we can
 
  .. code-block:: none
 
-    [stage(a, placeholder(a, 0x1175c360)), stage(b, placeholder(b, 0x113b0720)), stage(T_add, compute(T_add, body=[a[ax0, ax1, ax2] + b[ax1, ax2]], axis=[T.iter_var(ax0, T.Range(0, 100), "DataPar", ""), T.iter_var(ax1, T.Range(0, 10), "DataPar", ""), T.iter_var(ax2, T.Range(0, 10), "DataPar", "")], reduce_axis=[], tag=broadcast, attrs={})), stage(T_multiply, compute(T_multiply, body=[a[ax0, ax1, ax2] * b[ax1, ax2]], axis=[T.iter_var(ax0, T.Range(0, 100), "DataPar", ""), T.iter_var(ax1, T [...]
+    [stage(a, placeholder(a, 0x273f1160)), stage(b, placeholder(b, 0x10e408b0)), stage(T_add, compute(T_add, body=[a[ax0, ax1, ax2] + b[ax1, ax2]], axis=[T.iter_var(ax0, T.Range(0, 100), "DataPar", ""), T.iter_var(ax1, T.Range(0, 10), "DataPar", ""), T.iter_var(ax2, T.Range(0, 10), "DataPar", "")], reduce_axis=[], tag=broadcast, attrs={})), stage(T_multiply, compute(T_multiply, body=[a[ax0, ax1, ax2] * b[ax1, ax2]], axis=[T.iter_var(ax0, T.Range(0, 100), "DataPar", ""), T.iter_var(ax1, T [...]
 
 
 
diff --git a/docs/_sources/tutorial/sg_execution_times.rst.txt b/docs/_sources/tutorial/sg_execution_times.rst.txt
index 070bac8b5f..fafb47969c 100644
--- a/docs/_sources/tutorial/sg_execution_times.rst.txt
+++ b/docs/_sources/tutorial/sg_execution_times.rst.txt
@@ -5,24 +5,24 @@
 
 Computation times
 =================
-**16:46.028** total execution time for **tutorial** files:
+**16:26.884** total execution time for **tutorial** files:
 
 +------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_tutorial_autotvm_relay_x86.py` (``autotvm_relay_x86.py``)                 | 13:12.720 | 0.0 MB |
+| :ref:`sphx_glr_tutorial_autotvm_relay_x86.py` (``autotvm_relay_x86.py``)                 | 12:49.344 | 0.0 MB |
 +------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_tutorial_auto_scheduler_matmul_x86.py` (``auto_scheduler_matmul_x86.py``) | 01:33.401 | 0.0 MB |
+| :ref:`sphx_glr_tutorial_auto_scheduler_matmul_x86.py` (``auto_scheduler_matmul_x86.py``) | 01:32.893 | 0.0 MB |
 +------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_tutorial_tensor_expr_get_started.py` (``tensor_expr_get_started.py``)     | 00:56.835 | 0.0 MB |
+| :ref:`sphx_glr_tutorial_tensor_expr_get_started.py` (``tensor_expr_get_started.py``)     | 00:57.211 | 0.0 MB |
 +------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_tutorial_relay_quick_start.py` (``relay_quick_start.py``)                 | 00:41.404 | 0.0 MB |
+| :ref:`sphx_glr_tutorial_relay_quick_start.py` (``relay_quick_start.py``)                 | 00:42.245 | 0.0 MB |
 +------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_tutorial_autotvm_matmul_x86.py` (``autotvm_matmul_x86.py``)               | 00:19.463 | 0.0 MB |
+| :ref:`sphx_glr_tutorial_autotvm_matmul_x86.py` (``autotvm_matmul_x86.py``)               | 00:23.244 | 0.0 MB |
 +------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_tutorial_tensor_ir_blitz_course.py` (``tensor_ir_blitz_course.py``)       | 00:01.173 | 0.0 MB |
+| :ref:`sphx_glr_tutorial_tensor_ir_blitz_course.py` (``tensor_ir_blitz_course.py``)       | 00:00.891 | 0.0 MB |
 +------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_tutorial_intro_topi.py` (``intro_topi.py``)                               | 00:00.859 | 0.0 MB |
+| :ref:`sphx_glr_tutorial_intro_topi.py` (``intro_topi.py``)                               | 00:00.871 | 0.0 MB |
 +------------------------------------------------------------------------------------------+-----------+--------+
-| :ref:`sphx_glr_tutorial_cross_compilation_and_rpc.py` (``cross_compilation_and_rpc.py``) | 00:00.173 | 0.0 MB |
+| :ref:`sphx_glr_tutorial_cross_compilation_and_rpc.py` (``cross_compilation_and_rpc.py``) | 00:00.185 | 0.0 MB |
 +------------------------------------------------------------------------------------------+-----------+--------+
 | :ref:`sphx_glr_tutorial_uma.py` (``uma.py``)                                             | 00:00.000 | 0.0 MB |
 +------------------------------------------------------------------------------------------+-----------+--------+
diff --git a/docs/_sources/tutorial/tensor_expr_get_started.rst.txt b/docs/_sources/tutorial/tensor_expr_get_started.rst.txt
index 11079e1bd8..aed02243d1 100644
--- a/docs/_sources/tutorial/tensor_expr_get_started.rst.txt
+++ b/docs/_sources/tutorial/tensor_expr_get_started.rst.txt
@@ -285,8 +285,8 @@ helper function to run a profile of the TVM generated code.
 
  .. code-block:: none
 
-    Numpy running time: 0.000006
-    naive: 0.000007
+    Numpy running time: 0.000005
+    naive: 0.000006
 
 
 
@@ -498,10 +498,10 @@ We can now compare the different schedules
  .. code-block:: none
 
                 Operator                  Timing             Performance
-                   numpy    5.897090004509664e-06                    1.0
-                   naive    7.1915000000000005e-06    1.2194997862505856
-                parallel              5.8704e-06       0.995474038129102
-                  vector             3.80292e-05       6.448807796882537
+                   numpy    5.198519993427908e-06                    1.0
+                   naive              5.6238e-06      1.0818079005389498
+                parallel              5.8657e-06       1.128340375225171
+                  vector             3.80859e-05       7.326296724481025
 
 
 
@@ -922,7 +922,7 @@ matrix multiplication.
 
  .. code-block:: none
 
-    Numpy running time: 0.014055
+    Numpy running time: 0.014452
 
 
 
@@ -980,7 +980,7 @@ optimizations.
 
  .. code-block:: none
 
-    none: 3.246483
+    none: 3.266342
 
 
 
@@ -1080,7 +1080,7 @@ schedule.
 
  .. code-block:: none
 
-    blocking: 0.290021
+    blocking: 0.291718
 
 
 
@@ -1164,7 +1164,7 @@ already cache friendly from our previous optimizations.
 
  .. code-block:: none
 
-    vectorization: 0.266522
+    vectorization: 0.271966
     # from tvm.script import ir as I
     # from tvm.script import tir as T
 
@@ -1230,7 +1230,7 @@ more cache friendly.
 
  .. code-block:: none
 
-    loop permutation: 0.110814
+    loop permutation: 0.112476
     # from tvm.script import ir as I
     # from tvm.script import tir as T
 
@@ -1321,7 +1321,7 @@ optimized schedule.
 
  .. code-block:: none
 
-    array packing: 0.103880
+    array packing: 0.104339
     # from tvm.script import ir as I
     # from tvm.script import tir as T
 
@@ -1404,7 +1404,7 @@ to `C` when all the block results are ready.
 
  .. code-block:: none
 
-    block caching: 0.096682
+    block caching: 0.094499
     # from tvm.script import ir as I
     # from tvm.script import tir as T
 
@@ -1478,7 +1478,7 @@ of thread-level parallelization.
 
  .. code-block:: none
 
-    parallelization: 0.115288
+    parallelization: 0.112313
     # from tvm.script import ir as I
     # from tvm.script import tir as T
 
@@ -1548,13 +1548,13 @@ working, we can compare the results.
  .. code-block:: none
 
                 Operator                  Timing             Performance
-                    none             3.246482942                     1.0
-                blocking     0.29002062689999997     0.08933379046844225
-           vectorization            0.2665220601     0.08209562928915584
-        loop permutation     0.11081388910000001      0.0341335195901978
-           array packing     0.10387985929999999     0.03199766059328335
-           block caching            0.0966817831    0.029780468533877176
-         parallelization     0.11528801960000001     0.03551166652025489
+                    none            3.2663423538                     1.0
+                blocking     0.29171842400000003     0.08931042505713475
+           vectorization     0.27196581329999997      0.0832631071215178
+        loop permutation            0.1124762593     0.03443492662952103
+           array packing            0.1043394522     0.03194381999750072
+           block caching            0.0944988301    0.028931085558150965
+         parallelization            0.1123132026     0.03438500635713736
 
 
 
diff --git a/docs/commit_hash b/docs/commit_hash
index 202940888b..6e848beee2 100644
--- a/docs/commit_hash
+++ b/docs/commit_hash
@@ -1 +1 @@
-7ab970d38e2dc14b6c8b77dea0d560e6ccc38f19
+c43fad1d603434d2316f3a2268e978dd06335c9a
diff --git a/docs/how_to/compile_models/from_darknet.html b/docs/how_to/compile_models/from_darknet.html
index c24a45fc50..daea5b2ed6 100644
--- a/docs/how_to/compile_models/from_darknet.html
+++ b/docs/how_to/compile_models/from_darknet.html
@@ -604,7 +604,7 @@ class:[&#39;truck 0.9266&#39;] left:471 top:83 right:689 bottom:169
 class:[&#39;bicycle 0.9984&#39;] left:111 top:113 right:577 bottom:447
 </pre></div>
 </div>
-<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 1 minutes  30.641 seconds)</p>
+<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 1 minutes  33.928 seconds)</p>
 <div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-how-to-compile-models-from-darknet-py">
 <div class="sphx-glr-download sphx-glr-download-python docutils container">
 <p><a class="reference download internal" download="" href="../../_downloads/7716f96385bd5abb6e822041e285be54/from_darknet.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">from_darknet.py</span></code></a></p>
diff --git a/docs/how_to/compile_models/from_oneflow.html b/docs/how_to/compile_models/from_oneflow.html
index 31a9ae1f17..c62f949b42 100644
--- a/docs/how_to/compile_models/from_oneflow.html
+++ b/docs/how_to/compile_models/from_oneflow.html
@@ -468,13 +468,15 @@ Deprecated in NumPy 1.20; for more details and guidance: https://numpy.org/devdo
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Downloading: &quot;https://oneflow-public.oss-cn-beijing.aliyuncs.com/model_zoo/flowvision/classification/ResNet/resnet18.zip&quot; to /workspace/.oneflow/flowvision_cache/resnet18.zip
 
   0%|          | 0.00/41.5M [00:00&lt;?, ?B/s]
- 15%|#5        | 6.33M/41.5M [00:00&lt;00:02, 13.8MB/s]
- 19%|#9        | 7.99M/41.5M [00:00&lt;00:02, 14.5MB/s]
- 39%|###8      | 16.0M/41.5M [00:00&lt;00:01, 22.6MB/s]
- 58%|#####7    | 24.0M/41.5M [00:01&lt;00:00, 31.0MB/s]
- 77%|#######7  | 32.0M/41.5M [00:01&lt;00:00, 39.1MB/s]
- 92%|#########2| 38.3M/41.5M [00:01&lt;00:00, 38.1MB/s]
-100%|##########| 41.5M/41.5M [00:01&lt;00:00, 30.9MB/s]
+ 15%|#5        | 6.33M/41.5M [00:00&lt;00:01, 18.6MB/s]
+ 20%|#9        | 8.11M/41.5M [00:00&lt;00:02, 16.6MB/s]
+ 35%|###4      | 14.3M/41.5M [00:00&lt;00:01, 27.9MB/s]
+ 42%|####2     | 17.5M/41.5M [00:00&lt;00:00, 28.9MB/s]
+ 54%|#####3    | 22.3M/41.5M [00:00&lt;00:00, 31.5MB/s]
+ 62%|######1   | 25.6M/41.5M [00:00&lt;00:00, 29.8MB/s]
+ 77%|#######7  | 32.0M/41.5M [00:01&lt;00:00, 37.2MB/s]
+ 92%|#########2| 38.3M/41.5M [00:01&lt;00:00, 41.5MB/s]
+100%|##########| 41.5M/41.5M [00:01&lt;00:00, 32.6MB/s]
 </pre></div>
 </div>
 </div>
diff --git a/docs/how_to/compile_models/from_paddle.html b/docs/how_to/compile_models/from_paddle.html
index 12b26b40e5..4a5e6e00cb 100644
--- a/docs/how_to/compile_models/from_paddle.html
+++ b/docs/how_to/compile_models/from_paddle.html
@@ -503,6 +503,7 @@ To begin, we’ll install PaddlePaddle&gt;=2.1.3:</p>
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>TVM prediction top-1 id: 282, class name:  282: &#39;tiger cat&#39;,
 </pre></div>
 </div>
+<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 1 minutes  1.793 seconds)</p>
 <div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-how-to-compile-models-from-paddle-py">
 <div class="sphx-glr-download sphx-glr-download-python docutils container">
 <p><a class="reference download internal" download="" href="../../_downloads/16269b77359771348d507395692524cf/from_paddle.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">from_paddle.py</span></code></a></p>
diff --git a/docs/how_to/compile_models/from_pytorch.html b/docs/how_to/compile_models/from_pytorch.html
index 77f3a8a51e..dde7c13275 100644
--- a/docs/how_to/compile_models/from_pytorch.html
+++ b/docs/how_to/compile_models/from_pytorch.html
@@ -451,11 +451,13 @@ be unstable.</p>
 Downloading: &quot;https://download.pytorch.org/models/resnet18-f37072fd.pth&quot; to /workspace/.cache/torch/hub/checkpoints/resnet18-f37072fd.pth
 
   0%|          | 0.00/44.7M [00:00&lt;?, ?B/s]
- 18%|#7        | 7.99M/44.7M [00:00&lt;00:00, 81.8MB/s]
- 35%|###5      | 15.8M/44.7M [00:00&lt;00:00, 77.4MB/s]
- 67%|######7   | 30.1M/44.7M [00:00&lt;00:00, 109MB/s]
- 91%|#########1| 40.7M/44.7M [00:00&lt;00:00, 103MB/s]
-100%|##########| 44.7M/44.7M [00:00&lt;00:00, 104MB/s]
+ 18%|#7        | 7.99M/44.7M [00:00&lt;00:00, 68.6MB/s]
+ 36%|###5      | 16.0M/44.7M [00:00&lt;00:00, 55.1MB/s]
+ 54%|#####3    | 24.0M/44.7M [00:00&lt;00:00, 60.6MB/s]
+ 72%|#######1  | 32.0M/44.7M [00:00&lt;00:00, 57.4MB/s]
+ 86%|########5 | 38.3M/44.7M [00:00&lt;00:00, 47.3MB/s]
+ 96%|#########6| 43.0M/44.7M [00:00&lt;00:00, 38.6MB/s]
+100%|##########| 44.7M/44.7M [00:01&lt;00:00, 46.5MB/s]
 </pre></div>
 </div>
 </div>
diff --git a/docs/how_to/compile_models/from_tensorflow.html b/docs/how_to/compile_models/from_tensorflow.html
index 6080ca30ef..e468de214f 100644
--- a/docs/how_to/compile_models/from_tensorflow.html
+++ b/docs/how_to/compile_models/from_tensorflow.html
@@ -671,7 +671,7 @@ banana (score = 0.00022)
 desk (score = 0.00019)
 </pre></div>
 </div>
-<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 1 minutes  27.967 seconds)</p>
+<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 1 minutes  29.054 seconds)</p>
 <div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-how-to-compile-models-from-tensorflow-py">
 <div class="sphx-glr-download sphx-glr-download-python docutils container">
 <p><a class="reference download internal" download="" href="../../_downloads/7f1d3d1b878694c201c614c807cdebc8/from_tensorflow.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">from_tensorflow.py</span></code></a></p>
diff --git a/docs/how_to/compile_models/sg_execution_times.html b/docs/how_to/compile_models/sg_execution_times.html
index 532d0d5863..a753a19b1f 100644
--- a/docs/how_to/compile_models/sg_execution_times.html
+++ b/docs/how_to/compile_models/sg_execution_times.html
@@ -360,7 +360,7 @@
             
   <div class="section" id="computation-times">
 <span id="sphx-glr-how-to-compile-models-sg-execution-times"></span><h1>Computation times<a class="headerlink" href="#computation-times" title="Permalink to this headline">¶</a></h1>
-<p><strong>06:24.915</strong> total execution time for <strong>how_to_compile_models</strong> files:</p>
+<p><strong>06:35.099</strong> total execution time for <strong>how_to_compile_models</strong> files:</p>
 <table class="docutils align-default">
 <colgroup>
 <col style="width: 81%" />
@@ -369,39 +369,39 @@
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="from_darknet.html#sphx-glr-how-to-compile-models-from-darknet-py"><span class="std std-ref">Compile YOLO-V2 and YOLO-V3 in DarkNet Models</span></a> (<code class="docutils literal notranslate"><span class="pre">from_darknet.py</span></code>)</p></td>
-<td><p>01:30.641</p></td>
+<td><p>01:33.928</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="from_tensorflow.html#sphx-glr-how-to-compile-models-from-tensorflow-py"><span class="std std-ref">Compile Tensorflow Models</span></a> (<code class="docutils literal notranslate"><span class="pre">from_tensorflow.py</span></code>)</p></td>
-<td><p>01:27.967</p></td>
+<td><p>01:29.054</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="from_paddle.html#sphx-glr-how-to-compile-models-from-paddle-py"><span class="std std-ref">Compile PaddlePaddle Models</span></a> (<code class="docutils literal notranslate"><span class="pre">from_paddle.py</span></code>)</p></td>
-<td><p>00:59.996</p></td>
+<td><p>01:01.793</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="from_oneflow.html#sphx-glr-how-to-compile-models-from-oneflow-py"><span class="std std-ref">Compile OneFlow Models</span></a> (<code class="docutils literal notranslate"><span class="pre">from_oneflow.py</span></code>)</p></td>
-<td><p>00:41.954</p></td>
+<td><p>00:44.170</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="from_coreml.html#sphx-glr-how-to-compile-models-from-coreml-py"><span class="std std-ref">Compile CoreML Models</span></a> (<code class="docutils literal notranslate"><span class="pre">from_coreml.py</span></code>)</p></td>
-<td><p>00:36.644</p></td>
+<td><p>00:37.239</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="from_pytorch.html#sphx-glr-how-to-compile-models-from-pytorch-py"><span class="std std-ref">Compile PyTorch Models</span></a> (<code class="docutils literal notranslate"><span class="pre">from_pytorch.py</span></code>)</p></td>
-<td><p>00:26.658</p></td>
+<td><p>00:27.673</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="from_keras.html#sphx-glr-how-to-compile-models-from-keras-py"><span class="std std-ref">Compile Keras Models</span></a> (<code class="docutils literal notranslate"><span class="pre">from_keras.py</span></code>)</p></td>
-<td><p>00:26.258</p></td>
+<td><p>00:26.628</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="from_tflite.html#sphx-glr-how-to-compile-models-from-tflite-py"><span class="std std-ref">Compile TFLite Models</span></a> (<code class="docutils literal notranslate"><span class="pre">from_tflite.py</span></code>)</p></td>
-<td><p>00:12.060</p></td>
+<td><p>00:11.817</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="from_onnx.html#sphx-glr-how-to-compile-models-from-onnx-py"><span class="std std-ref">Compile ONNX Models</span></a> (<code class="docutils literal notranslate"><span class="pre">from_onnx.py</span></code>)</p></td>
-<td><p>00:02.739</p></td>
+<td><p>00:02.797</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 </tbody>
diff --git a/docs/how_to/deploy_models/deploy_model_on_adreno.html b/docs/how_to/deploy_models/deploy_model_on_adreno.html
index f79cb474c0..f4a5d1c52e 100644
--- a/docs/how_to/deploy_models/deploy_model_on_adreno.html
+++ b/docs/how_to/deploy_models/deploy_model_on_adreno.html
@@ -850,10 +850,10 @@ Top5 predictions:
 Evaluate inference time cost...
 Execution time summary:
  mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)
- 3999.1846    3998.1028    4007.1648    3994.2190      4.1754
+ 3991.1209    3990.2472    3995.8217    3986.6934      2.7220
 </pre></div>
 </div>
-<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 1 minutes  16.657 seconds)</p>
+<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 1 minutes  17.099 seconds)</p>
 <div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-how-to-deploy-models-deploy-model-on-adreno-py">
 <div class="sphx-glr-download sphx-glr-download-python docutils container">
 <p><a class="reference download internal" download="" href="../../_downloads/2387d8448da213eb625e6b3d916327d4/deploy_model_on_adreno.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">deploy_model_on_adreno.py</span></code></a></p>
diff --git a/docs/how_to/deploy_models/deploy_model_on_adreno_tvmc.html b/docs/how_to/deploy_models/deploy_model_on_adreno_tvmc.html
index 645022daa3..a1414911b5 100644
--- a/docs/how_to/deploy_models/deploy_model_on_adreno_tvmc.html
+++ b/docs/how_to/deploy_models/deploy_model_on_adreno_tvmc.html
@@ -458,20 +458,21 @@ to run this tutorial with a real device over rpc.</p>
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/resnet/resnet50_weights_tf_dim_ordering_tf_kernels.h5
 
      8192/102967424 [..............................] - ETA: 0s
-  8380416/102967424 [=&gt;............................] - ETA: 1s
- 16769024/102967424 [===&gt;..........................] - ETA: 1s
- 25157632/102967424 [======&gt;.......................] - ETA: 1s
+  6635520/102967424 [&gt;.............................] - ETA: 1s
+  8380416/102967424 [=&gt;............................] - ETA: 2s
+ 15024128/102967424 [===&gt;..........................] - ETA: 1s
+ 16769024/102967424 [===&gt;..........................] - ETA: 2s
+ 23412736/102967424 [=====&gt;........................] - ETA: 1s
+ 25157632/102967424 [======&gt;.......................] - ETA: 2s
  33546240/102967424 [========&gt;.....................] - ETA: 1s
  41934848/102967424 [===========&gt;..................] - ETA: 1s
- 48578560/102967424 [=============&gt;................] - ETA: 0s
- 50323456/102967424 [=============&gt;................] - ETA: 0s
- 56967168/102967424 [===============&gt;..............] - ETA: 0s
- 58712064/102967424 [================&gt;.............] - ETA: 0s
- 64651264/102967424 [=================&gt;............] - ETA: 0s
+ 48578560/102967424 [=============&gt;................] - ETA: 1s
+ 50323456/102967424 [=============&gt;................] - ETA: 1s
+ 56967168/102967424 [===============&gt;..............] - ETA: 1s
+ 58712064/102967424 [================&gt;.............] - ETA: 1s
  65355776/102967424 [==================&gt;...........] - ETA: 0s
  67100672/102967424 [==================&gt;...........] - ETA: 0s
  69296128/102967424 [===================&gt;..........] - ETA: 0s
- 73744384/102967424 [====================&gt;.........] - ETA: 0s
  75489280/102967424 [====================&gt;.........] - ETA: 0s
  82124800/102967424 [======================&gt;.......] - ETA: 0s
  83877888/102967424 [=======================&gt;......] - ETA: 0s
diff --git a/docs/how_to/deploy_models/deploy_model_on_android.html b/docs/how_to/deploy_models/deploy_model_on_android.html
index f03fc153f3..290077fc0a 100644
--- a/docs/how_to/deploy_models/deploy_model_on_android.html
+++ b/docs/how_to/deploy_models/deploy_model_on_android.html
@@ -682,7 +682,7 @@ to the remote android device.</p>
 Evaluate inference time cost...
 Execution time summary:
  mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)
-  14.5346      13.9729      17.6800      13.7166       1.2525
+  13.9508      13.8109      14.6513      13.7311       0.2767
 </pre></div>
 </div>
 </div>
diff --git a/docs/how_to/deploy_models/deploy_object_detection_pytorch.html b/docs/how_to/deploy_models/deploy_object_detection_pytorch.html
index 8d992bd1d0..489477e6c8 100644
--- a/docs/how_to/deploy_models/deploy_object_detection_pytorch.html
+++ b/docs/how_to/deploy_models/deploy_object_detection_pytorch.html
@@ -474,20 +474,39 @@ be unstable.</p>
 Downloading: &quot;https://download.pytorch.org/models/maskrcnn_resnet50_fpn_coco-bf2d0c1e.pth&quot; to /workspace/.cache/torch/hub/checkpoints/maskrcnn_resnet50_fpn_coco-bf2d0c1e.pth
 
   0%|          | 0.00/170M [00:00&lt;?, ?B/s]
-  9%|9         | 15.4M/170M [00:00&lt;00:01, 161MB/s]
- 18%|#8        | 30.7M/170M [00:00&lt;00:01, 109MB/s]
- 25%|##4       | 42.0M/170M [00:00&lt;00:01, 100MB/s]
- 31%|###       | 52.0M/170M [00:00&lt;00:01, 96.9MB/s]
- 38%|###7      | 64.0M/170M [00:00&lt;00:01, 105MB/s]
- 45%|####4     | 75.9M/170M [00:00&lt;00:00, 110MB/s]
- 51%|#####1    | 86.7M/170M [00:00&lt;00:00, 107MB/s]
- 57%|#####7    | 97.0M/170M [00:00&lt;00:00, 105MB/s]
- 63%|######3   | 107M/170M [00:01&lt;00:00, 104MB/s]
- 69%|######8   | 117M/170M [00:01&lt;00:00, 85.0MB/s]
- 74%|#######4  | 126M/170M [00:01&lt;00:00, 75.7MB/s]
- 80%|########  | 136M/170M [00:01&lt;00:00, 83.8MB/s]
- 93%|#########2| 158M/170M [00:01&lt;00:00, 120MB/s]
-100%|##########| 170M/170M [00:01&lt;00:00, 103MB/s]
+  4%|3         | 6.30M/170M [00:00&lt;00:03, 46.3MB/s]
+  6%|6         | 10.7M/170M [00:00&lt;00:04, 39.2MB/s]
+  9%|8         | 14.4M/170M [00:00&lt;00:04, 36.2MB/s]
+ 11%|#         | 17.9M/170M [00:00&lt;00:04, 34.4MB/s]
+ 14%|#4        | 24.0M/170M [00:00&lt;00:04, 35.9MB/s]
+ 18%|#7        | 30.3M/170M [00:00&lt;00:03, 40.8MB/s]
+ 20%|##        | 34.2M/170M [00:00&lt;00:04, 34.6MB/s]
+ 24%|##3       | 40.0M/170M [00:01&lt;00:03, 39.8MB/s]
+ 27%|##7       | 46.3M/170M [00:01&lt;00:03, 42.2MB/s]
+ 30%|##9       | 50.4M/170M [00:01&lt;00:03, 39.8MB/s]
+ 33%|###2      | 56.0M/170M [00:01&lt;00:02, 43.9MB/s]
+ 37%|###6      | 62.3M/170M [00:01&lt;00:02, 49.1MB/s]
+ 40%|###9      | 67.1M/170M [00:01&lt;00:02, 42.6MB/s]
+ 42%|####2     | 72.0M/170M [00:01&lt;00:02, 38.1MB/s]
+ 45%|####4     | 75.9M/170M [00:02&lt;00:02, 38.0MB/s]
+ 47%|####7     | 80.0M/170M [00:02&lt;00:02, 35.3MB/s]
+ 52%|#####1    | 88.0M/170M [00:02&lt;00:01, 43.0MB/s]
+ 57%|#####6    | 96.0M/170M [00:02&lt;00:01, 43.9MB/s]
+ 60%|######    | 102M/170M [00:02&lt;00:01, 38.6MB/s]
+ 63%|######2   | 107M/170M [00:02&lt;00:01, 40.6MB/s]
+ 66%|######5   | 112M/170M [00:02&lt;00:01, 38.5MB/s]
+ 71%|#######   | 120M/170M [00:03&lt;00:01, 38.1MB/s]
+ 75%|#######4  | 127M/170M [00:03&lt;00:01, 44.2MB/s]
+ 77%|#######7  | 131M/170M [00:03&lt;00:01, 38.8MB/s]
+ 80%|#######9  | 135M/170M [00:03&lt;00:01, 35.7MB/s]
+ 82%|########1 | 139M/170M [00:03&lt;00:00, 35.3MB/s]
+ 85%|########4 | 144M/170M [00:03&lt;00:00, 34.0MB/s]
+ 88%|########8 | 150M/170M [00:03&lt;00:00, 40.2MB/s]
+ 91%|######### | 154M/170M [00:04&lt;00:00, 38.4MB/s]
+ 93%|#########3| 158M/170M [00:04&lt;00:00, 37.4MB/s]
+ 95%|#########5| 162M/170M [00:04&lt;00:00, 34.8MB/s]
+ 99%|#########8| 168M/170M [00:04&lt;00:00, 40.8MB/s]
+100%|##########| 170M/170M [00:04&lt;00:00, 39.6MB/s]
 /venv/apache-tvm-py3.8/lib/python3.8/site-packages/torch/nn/functional.py:3912: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).
   (torch.floor((input.size(i + 2).float() * torch.tensor(scale_factors[i], dtype=torch.float32)).float()))
 /venv/apache-tvm-py3.8/lib/python3.8/site-packages/torchvision/ops/boxes.py:157: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).
@@ -578,7 +597,7 @@ torchvision rcnn models.</p>
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Get 9 valid boxes
 </pre></div>
 </div>
-<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 3 minutes  17.891 seconds)</p>
+<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 3 minutes  22.901 seconds)</p>
 <div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-how-to-deploy-models-deploy-object-detection-pytorch-py">
 <div class="sphx-glr-download sphx-glr-download-python docutils container">
 <p><a class="reference download internal" download="" href="../../_downloads/7795da4b258c8feff986668b95ef57ad/deploy_object_detection_pytorch.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">deploy_object_detection_pytorch.py</span></code></a></p>
diff --git a/docs/how_to/deploy_models/deploy_prequantized.html b/docs/how_to/deploy_models/deploy_prequantized.html
index f9d654f2a4..a9330544a9 100644
--- a/docs/how_to/deploy_models/deploy_prequantized.html
+++ b/docs/how_to/deploy_models/deploy_prequantized.html
@@ -515,9 +515,8 @@ training. Other models require a full post training calibration.</p>
 Downloading: &quot;https://download.pytorch.org/models/mobilenet_v2-b0353104.pth&quot; to /workspace/.cache/torch/hub/checkpoints/mobilenet_v2-b0353104.pth
 
   0%|          | 0.00/13.6M [00:00&lt;?, ?B/s]
-  1%|          | 120k/13.6M [00:00&lt;00:11, 1.21MB/s]
- 59%|#####8    | 7.99M/13.6M [00:00&lt;00:00, 32.0MB/s]
-100%|##########| 13.6M/13.6M [00:00&lt;00:00, 39.5MB/s]
+ 59%|#####8    | 7.99M/13.6M [00:00&lt;00:00, 70.4MB/s]
+100%|##########| 13.6M/13.6M [00:00&lt;00:00, 65.7MB/s]
 </pre></div>
 </div>
 </div>
@@ -608,7 +607,7 @@ output values are identical out of 1000 outputs from mobilenet v2.</p>
 </div>
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Execution time summary:
  mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)
-  85.7789      85.7494      86.2410      85.4983       0.2070
+  85.8857      85.8731      86.4836      85.5766       0.2000
 </pre></div>
 </div>
 <div class="admonition note">
@@ -647,7 +646,7 @@ This includes support for the VNNI 8 bit dot product instruction (CascadeLake or
 <div class="section" id="deploy-a-quantized-tflite-model">
 <h2>Deploy a quantized TFLite Model<a class="headerlink" href="#deploy-a-quantized-tflite-model" title="Permalink to this headline">¶</a></h2>
 <p>TODO</p>
-<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 1 minutes  25.050 seconds)</p>
+<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 1 minutes  25.639 seconds)</p>
 <div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-how-to-deploy-models-deploy-prequantized-py">
 <div class="sphx-glr-download sphx-glr-download-python docutils container">
 <p><a class="reference download internal" download="" href="../../_downloads/fb8217c13f4351224c6cf3aacf1a87fc/deploy_prequantized.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">deploy_prequantized.py</span></code></a></p>
diff --git a/docs/how_to/deploy_models/deploy_prequantized_tflite.html b/docs/how_to/deploy_models/deploy_prequantized_tflite.html
index 44bf2f68ad..1708fa1833 100644
--- a/docs/how_to/deploy_models/deploy_prequantized_tflite.html
+++ b/docs/how_to/deploy_models/deploy_prequantized_tflite.html
@@ -600,7 +600,7 @@ TFLite Top-5 labels: [387 102 386 341 349]
 </div>
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Execution time summary:
  mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)
-  102.5356     102.3021     108.3737     101.6712      0.9531
+  104.4572     104.2794     106.8014     103.3968      0.6953
 </pre></div>
 </div>
 <div class="admonition note">
diff --git a/docs/how_to/deploy_models/sg_execution_times.html b/docs/how_to/deploy_models/sg_execution_times.html
index c18449747a..324558fc97 100644
--- a/docs/how_to/deploy_models/sg_execution_times.html
+++ b/docs/how_to/deploy_models/sg_execution_times.html
@@ -360,7 +360,7 @@
             
   <div class="section" id="computation-times">
 <span id="sphx-glr-how-to-deploy-models-sg-execution-times"></span><h1>Computation times<a class="headerlink" href="#computation-times" title="Permalink to this headline">¶</a></h1>
-<p><strong>09:21.042</strong> total execution time for <strong>how_to_deploy_models</strong> files:</p>
+<p><strong>09:28.769</strong> total execution time for <strong>how_to_deploy_models</strong> files:</p>
 <table class="docutils align-default">
 <colgroup>
 <col style="width: 86%" />
@@ -369,35 +369,35 @@
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="deploy_object_detection_pytorch.html#sphx-glr-how-to-deploy-models-deploy-object-detection-pytorch-py"><span class="std std-ref">Compile PyTorch Object Detection Models</span></a> (<code class="docutils literal notranslate"><span class="pre">deploy_object_detection_pytorch.py</span></code>)</p></td>
-<td><p>03:17.891</p></td>
+<td><p>03:22.901</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="deploy_prequantized.html#sphx-glr-how-to-deploy-models-deploy-prequantized-py"><span class="std std-ref">Deploy a Framework-prequantized Model with TVM</span></a> (<code class="docutils literal notranslate"><span class="pre">deploy_prequantized.py</span></code>)</p></td>
-<td><p>01:25.050</p></td>
+<td><p>01:25.639</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="deploy_model_on_adreno.html#sphx-glr-how-to-deploy-models-deploy-model-on-adreno-py"><span class="std std-ref">Deploy the Pretrained Model on Adrenoâ„¢</span></a> (<code class="docutils literal notranslate"><span class="pre">deploy_model_on_adreno.py</span></code>)</p></td>
-<td><p>01:16.657</p></td>
+<td><p>01:17.099</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="deploy_prequantized_tflite.html#sphx-glr-how-to-deploy-models-deploy-prequantized-tflite-py"><span class="std std-ref">Deploy a Framework-prequantized Model with TVM - Part 3 (TFLite)</span></a> (<code class="docutils literal notranslate"><span class="pre">deploy_prequantized_tflite.py</span></code>)</p></td>
-<td><p>00:49.171</p></td>
+<td><p>00:49.730</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="deploy_model_on_android.html#sphx-glr-how-to-deploy-models-deploy-model-on-android-py"><span class="std std-ref">Deploy the Pretrained Model on Android</span></a> (<code class="docutils literal notranslate"><span class="pre">deploy_model_on_android.py</span></code>)</p></td>
-<td><p>00:48.815</p></td>
+<td><p>00:49.401</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="deploy_model_on_adreno_tvmc.html#sphx-glr-how-to-deploy-models-deploy-model-on-adreno-tvmc-py"><span class="std std-ref">Deploy the Pretrained Model on Adrenoâ„¢ with tvmc Interface</span></a> (<code class="docutils literal notranslate"><span class="pre">deploy_model_on_adreno_tvmc.py</span></code>)</p></td>
-<td><p>00:46.112</p></td>
+<td><p>00:46.281</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="deploy_model_on_nano.html#sphx-glr-how-to-deploy-models-deploy-model-on-nano-py"><span class="std std-ref">Deploy the Pretrained Model on Jetson Nano</span></a> (<code class="docutils literal notranslate"><span class="pre">deploy_model_on_nano.py</span></code>)</p></td>
-<td><p>00:28.688</p></td>
+<td><p>00:28.967</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="deploy_model_on_rasp.html#sphx-glr-how-to-deploy-models-deploy-model-on-rasp-py"><span class="std std-ref">Deploy the Pretrained Model on Raspberry Pi</span></a> (<code class="docutils literal notranslate"><span class="pre">deploy_model_on_rasp.py</span></code>)</p></td>
-<td><p>00:28.650</p></td>
+<td><p>00:28.743</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="deploy_sparse.html#sphx-glr-how-to-deploy-models-deploy-sparse-py"><span class="std std-ref">Deploy a Hugging Face Pruned Model on CPU</span></a> (<code class="docutils literal notranslate"><span class="pre">deploy_sparse.py</span></code>)</p></td>
diff --git a/docs/how_to/extend_tvm/sg_execution_times.html b/docs/how_to/extend_tvm/sg_execution_times.html
index 557b7ab537..5835362eba 100644
--- a/docs/how_to/extend_tvm/sg_execution_times.html
+++ b/docs/how_to/extend_tvm/sg_execution_times.html
@@ -360,7 +360,7 @@
             
   <div class="section" id="computation-times">
 <span id="sphx-glr-how-to-extend-tvm-sg-execution-times"></span><h1>Computation times<a class="headerlink" href="#computation-times" title="Permalink to this headline">¶</a></h1>
-<p><strong>00:03.799</strong> total execution time for <strong>how_to_extend_tvm</strong> files:</p>
+<p><strong>00:03.895</strong> total execution time for <strong>how_to_extend_tvm</strong> files:</p>
 <table class="docutils align-default">
 <colgroup>
 <col style="width: 83%" />
@@ -369,11 +369,11 @@
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="use_pass_instrument.html#sphx-glr-how-to-extend-tvm-use-pass-instrument-py"><span class="std std-ref">How to Use TVM Pass Instrument</span></a> (<code class="docutils literal notranslate"><span class="pre">use_pass_instrument.py</span></code>)</p></td>
-<td><p>00:02.636</p></td>
+<td><p>00:02.715</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="use_pass_infra.html#sphx-glr-how-to-extend-tvm-use-pass-infra-py"><span class="std std-ref">How to Use TVM Pass Infra</span></a> (<code class="docutils literal notranslate"><span class="pre">use_pass_infra.py</span></code>)</p></td>
-<td><p>00:01.156</p></td>
+<td><p>00:01.173</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="low_level_custom_pass.html#sphx-glr-how-to-extend-tvm-low-level-custom-pass-py"><span class="std std-ref">Writing a Customized Pass</span></a> (<code class="docutils literal notranslate"><span class="pre">low_level_custom_pass.py</span></code>)</p></td>
diff --git a/docs/how_to/extend_tvm/use_pass_instrument.html b/docs/how_to/extend_tvm/use_pass_instrument.html
index 5bca2e61ac..77bdd45879 100644
--- a/docs/how_to/extend_tvm/use_pass_instrument.html
+++ b/docs/how_to/extend_tvm/use_pass_instrument.html
@@ -545,10 +545,10 @@ profile the execution time of each passes.</p>
 </pre></div>
 </div>
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Printing results of timing profile...
-InferType: 24463us [24463us] (48.82%; 48.82%)
-FoldScaleAxis: 25644us [7us] (51.18%; 51.18%)
-        FoldConstant: 25637us [1764us] (51.17%; 99.97%)
-                InferType: 23873us [23873us] (47.64%; 93.12%)
+InferType: 24361us [24361us] (48.76%; 48.76%)
+FoldScaleAxis: 25598us [6us] (51.24%; 51.24%)
+        FoldConstant: 25592us [1765us] (51.23%; 99.98%)
+                InferType: 23828us [23828us] (47.69%; 93.10%)
 </pre></div>
 </div>
 </div>
@@ -570,10 +570,10 @@ Refer to following sections and <a class="reference internal" href="../../refere
 </pre></div>
 </div>
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Printing results of timing profile...
-InferType: 23548us [23548us] (48.52%; 48.52%)
-FoldScaleAxis: 24985us [5us] (51.48%; 51.48%)
-        FoldConstant: 24980us [1587us] (51.47%; 99.98%)
-                InferType: 23393us [23393us] (48.20%; 93.65%)
+InferType: 23621us [23621us] (48.66%; 48.66%)
+FoldScaleAxis: 24920us [5us] (51.34%; 51.34%)
+        FoldConstant: 24915us [1633us] (51.33%; 99.98%)
+                InferType: 23282us [23282us] (47.96%; 93.44%)
 </pre></div>
 </div>
 <p>Register empty list to clear existing instruments.</p>
diff --git a/docs/how_to/optimize_operators/opt_conv_cuda.html b/docs/how_to/optimize_operators/opt_conv_cuda.html
index a76b905dfe..1382556750 100644
--- a/docs/how_to/optimize_operators/opt_conv_cuda.html
+++ b/docs/how_to/optimize_operators/opt_conv_cuda.html
@@ -595,7 +595,7 @@ latency of convolution.</p>
 <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Convolution: </span><span class="si">%f</span><span class="s2"> ms&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">evaluator</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span><span class="o">.</span><span class="n">mean</span> <span class="o">*</span> <span cl [...]
 </pre></div>
 </div>
-<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Convolution: 34.817760 ms
+<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Convolution: 53.693569 ms
 </pre></div>
 </div>
 <div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-how-to-optimize-operators-opt-conv-cuda-py">
diff --git a/docs/how_to/optimize_operators/opt_conv_tensorcore.html b/docs/how_to/optimize_operators/opt_conv_tensorcore.html
index 67cfa051d2..7143d25c6e 100644
--- a/docs/how_to/optimize_operators/opt_conv_tensorcore.html
+++ b/docs/how_to/optimize_operators/opt_conv_tensorcore.html
@@ -877,7 +877,7 @@ be able to run on our build server</p>
     <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;conv2d with tensor core: </span><span class="si">%f</span><span class="s2"> ms&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">evaluator</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span><span class="o">.</span><span class="n">mean</span> <span class="o">* [...]
 </pre></div>
 </div>
-<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>conv2d with tensor core: 12.094259 ms
+<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>conv2d with tensor core: 12.272643 ms
 </pre></div>
 </div>
 </div>
diff --git a/docs/how_to/optimize_operators/opt_gemm.html b/docs/how_to/optimize_operators/opt_gemm.html
index d61f1d2634..4c63570378 100644
--- a/docs/how_to/optimize_operators/opt_gemm.html
+++ b/docs/how_to/optimize_operators/opt_gemm.html
@@ -492,8 +492,8 @@ Then we write a baseline implementation, the simplest way to write a matrix mult
 <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Baseline: </span><span class="si">%f</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">evaluator</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span><span class="o">.</span><span class="n">mean</span><span class="p">)</span>
 </pre></div>
 </div>
-<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Numpy running time: 0.014070
-Baseline: 3.248753
+<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Numpy running time: 0.014645
+Baseline: 3.262186
 </pre></div>
 </div>
 <p>In TVM, we can always inspect lower level IR to debug or optimize our schedule.
@@ -552,7 +552,7 @@ fill 32 * 32 * sizeof(float) which is 4KB in the cache whose total size is 32KB
 <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Opt1: </span><span class="si">%f</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">evaluator</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span><span class="o">.</span><span class="n">mean</span><span class="p">)</span>
 </pre></div>
 </div>
-<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Opt1: 0.284145
+<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Opt1: 0.285507
 </pre></div>
 </div>
 <p>Here is the generated IR after blocking.</p>
@@ -609,7 +609,7 @@ vastly.</p>
 <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Opt2: </span><span class="si">%f</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">evaluator</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span><span class="o">.</span><span class="n">mean</span><span class="p">)</span>
 </pre></div>
 </div>
-<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Opt2: 0.266407
+<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Opt2: 0.257766
 </pre></div>
 </div>
 <p>Here is the generated IR after vectorization.</p>
@@ -664,7 +664,7 @@ the access pattern for A matrix is more cache friendly.</p>
 <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Opt3: </span><span class="si">%f</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">evaluator</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span><span class="o">.</span><span class="n">mean</span><span class="p">)</span>
 </pre></div>
 </div>
-<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Opt3: 0.110200
+<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Opt3: 0.109861
 </pre></div>
 </div>
 <p>Here is the generated IR after loop permutation.</p>
@@ -741,7 +741,7 @@ flattening.</p>
 <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Opt4: </span><span class="si">%f</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">evaluator</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span><span class="o">.</span><span class="n">mean</span><span class="p">)</span>
 </pre></div>
 </div>
-<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Opt4: 0.102943
+<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Opt4: 0.103514
 </pre></div>
 </div>
 <p>Here is the generated IR after array packing.</p>
@@ -819,7 +819,7 @@ write to C when all the block results are ready.</p>
 <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Opt5: </span><span class="si">%f</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">evaluator</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span><span class="p">)</span><span class="o">.</span><span class="n">mean</span><span class="p">)</span>
 </pre></div>
 </div>
-<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Opt5: 0.097029
+<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Opt5: 0.094170
 </pre></div>
 </div>
 <p>Here is the generated IR after blocking.</p>
@@ -899,7 +899,7 @@ class Module:
 <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Opt6: </span><span class="si">%f</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">opt6_time</span><span class="p">)</span>
 </pre></div>
 </div>
-<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Opt6: 0.114715
+<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Opt6: 0.112322
 </pre></div>
 </div>
 <p>Here is the generated IR after parallelization.</p>
diff --git a/docs/how_to/optimize_operators/sg_execution_times.html b/docs/how_to/optimize_operators/sg_execution_times.html
index 043588721c..b5e2f96689 100644
--- a/docs/how_to/optimize_operators/sg_execution_times.html
+++ b/docs/how_to/optimize_operators/sg_execution_times.html
@@ -360,7 +360,7 @@
             
   <div class="section" id="computation-times">
 <span id="sphx-glr-how-to-optimize-operators-sg-execution-times"></span><h1>Computation times<a class="headerlink" href="#computation-times" title="Permalink to this headline">¶</a></h1>
-<p><strong>00:31.271</strong> total execution time for <strong>how_to_optimize_operators</strong> files:</p>
+<p><strong>00:31.404</strong> total execution time for <strong>how_to_optimize_operators</strong> files:</p>
 <table class="docutils align-default">
 <colgroup>
 <col style="width: 83%" />
@@ -369,15 +369,15 @@
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="opt_gemm.html#sphx-glr-how-to-optimize-operators-opt-gemm-py"><span class="std std-ref">How to optimize GEMM on CPU</span></a> (<code class="docutils literal notranslate"><span class="pre">opt_gemm.py</span></code>)</p></td>
-<td><p>00:28.393</p></td>
+<td><p>00:28.274</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="opt_conv_tensorcore.html#sphx-glr-how-to-optimize-operators-opt-conv-tensorcore-py"><span class="std std-ref">How to optimize convolution using TensorCores</span></a> (<code class="docutils literal notranslate"><span class="pre">opt_conv_tensorcore.py</span></code>)</p></td>
-<td><p>00:01.723</p></td>
+<td><p>00:01.836</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="opt_conv_cuda.html#sphx-glr-how-to-optimize-operators-opt-conv-cuda-py"><span class="std std-ref">How to optimize convolution on GPU</span></a> (<code class="docutils literal notranslate"><span class="pre">opt_conv_cuda.py</span></code>)</p></td>
-<td><p>00:01.154</p></td>
+<td><p>00:01.294</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 </tbody>
diff --git a/docs/how_to/tune_with_autoscheduler/sg_execution_times.html b/docs/how_to/tune_with_autoscheduler/sg_execution_times.html
index 580f9b489c..9a830748c5 100644
--- a/docs/how_to/tune_with_autoscheduler/sg_execution_times.html
+++ b/docs/how_to/tune_with_autoscheduler/sg_execution_times.html
@@ -360,32 +360,32 @@
             
   <div class="section" id="computation-times">
 <span id="sphx-glr-how-to-tune-with-autoscheduler-sg-execution-times"></span><h1>Computation times<a class="headerlink" href="#computation-times" title="Permalink to this headline">¶</a></h1>
-<p><strong>03:27.571</strong> total execution time for <strong>how_to_tune_with_autoscheduler</strong> files:</p>
+<p><strong>03:30.324</strong> total execution time for <strong>how_to_tune_with_autoscheduler</strong> files:</p>
 <table class="docutils align-default">
 <colgroup>
-<col style="width: 85%" />
-<col style="width: 9%" />
+<col style="width: 84%" />
+<col style="width: 10%" />
 <col style="width: 6%" />
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="tune_network_x86.html#sphx-glr-how-to-tune-with-autoscheduler-tune-network-x86-py"><span class="std std-ref">Auto-scheduling a Neural Network for x86 CPU</span></a> (<code class="docutils literal notranslate"><span class="pre">tune_network_x86.py</span></code>)</p></td>
-<td><p>01:30.382</p></td>
+<td><p>01:31.529</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="tune_network_cuda.html#sphx-glr-how-to-tune-with-autoscheduler-tune-network-cuda-py"><span class="std std-ref">Auto-scheduling a Neural Network for NVIDIA GPU</span></a> (<code class="docutils literal notranslate"><span class="pre">tune_network_cuda.py</span></code>)</p></td>
-<td><p>01:09.596</p></td>
+<td><p>01:10.519</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="tune_network_arm.html#sphx-glr-how-to-tune-with-autoscheduler-tune-network-arm-py"><span class="std std-ref">Auto-scheduling a Neural Network for ARM CPU</span></a> (<code class="docutils literal notranslate"><span class="pre">tune_network_arm.py</span></code>)</p></td>
-<td><p>00:17.196</p></td>
+<td><p>00:17.321</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="tune_network_mali.html#sphx-glr-how-to-tune-with-autoscheduler-tune-network-mali-py"><span class="std std-ref">Auto-scheduling a Neural Network for mali GPU</span></a> (<code class="docutils literal notranslate"><span class="pre">tune_network_mali.py</span></code>)</p></td>
-<td><p>00:15.730</p></td>
+<td><p>00:15.1000</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="tune_conv2d_layer_cuda.html#sphx-glr-how-to-tune-with-autoscheduler-tune-conv2d-layer-cuda-py"><span class="std std-ref">Auto-scheduling a Convolution Layer for GPU</span></a> (<code class="docutils literal notranslate"><span class="pre">tune_conv2d_layer_cuda.py</span></code>)</p></td>
-<td><p>00:14.566</p></td>
+<td><p>00:14.855</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="tune_sparse_x86.html#sphx-glr-how-to-tune-with-autoscheduler-tune-sparse-x86-py"><span class="std std-ref">Auto-scheduling Sparse Matrix Multiplication on CPU with Custom Sketch Rule</span></a> (<code class="docutils literal notranslate"><span class="pre">tune_sparse_x86.py</span></code>)</p></td>
diff --git a/docs/how_to/tune_with_autoscheduler/tune_conv2d_layer_cuda.html b/docs/how_to/tune_with_autoscheduler/tune_conv2d_layer_cuda.html
index 28c71739be..c521dbf338 100644
--- a/docs/how_to/tune_with_autoscheduler/tune_conv2d_layer_cuda.html
+++ b/docs/how_to/tune_with_autoscheduler/tune_conv2d_layer_cuda.html
@@ -1032,7 +1032,7 @@ class Module:
 <span class="p">)</span>
 </pre></div>
 </div>
-<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Execution time of this operator: 0.337 ms
+<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Execution time of this operator: 0.334 ms
 </pre></div>
 </div>
 </div>
diff --git a/docs/how_to/tune_with_autoscheduler/tune_network_cuda.html b/docs/how_to/tune_with_autoscheduler/tune_network_cuda.html
index 5d06e6e46f..cd49b2e87f 100644
--- a/docs/how_to/tune_with_autoscheduler/tune_network_cuda.html
+++ b/docs/how_to/tune_with_autoscheduler/tune_network_cuda.html
@@ -923,7 +923,7 @@ so we can read the log file and load the best schedules.</p>
 Evaluate inference time cost...
 Execution time summary:
  mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)
-   3.2062       3.2061       3.2067       3.2058       0.0004
+   3.2002       3.2004       3.2005       3.1997       0.0004
 </pre></div>
 </div>
 </div>
@@ -945,7 +945,7 @@ to learn how to use the RPC Tracker and RPC Server.
 To use the RPC Tracker in auto-scheduler, replace the runner in <code class="code docutils literal notranslate"><span class="pre">TuningOptions</span></code>
 with <a class="reference internal" href="../../reference/api/python/auto_scheduler.html#tvm.auto_scheduler.RPCRunner" title="tvm.auto_scheduler.RPCRunner"><code class="xref any py py-class docutils literal notranslate"><span class="pre">auto_scheduler.RPCRunner</span></code></a>.</p></li>
 </ol>
-<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 1 minutes  9.596 seconds)</p>
+<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 1 minutes  10.519 seconds)</p>
 <div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-how-to-tune-with-autoscheduler-tune-network-cuda-py">
 <div class="sphx-glr-download sphx-glr-download-python docutils container">
 <p><a class="reference download internal" download="" href="../../_downloads/eafe360d52540634c9eea0fa89e804bd/tune_network_cuda.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">tune_network_cuda.py</span></code></a></p>
diff --git a/docs/how_to/tune_with_autoscheduler/tune_network_x86.html b/docs/how_to/tune_with_autoscheduler/tune_network_x86.html
index 22f7b95e11..1b8f5e61c5 100644
--- a/docs/how_to/tune_with_autoscheduler/tune_network_x86.html
+++ b/docs/how_to/tune_with_autoscheduler/tune_network_x86.html
@@ -945,7 +945,7 @@ so we can read the log file and load the best schedules.</p>
 Evaluate inference time cost...
 Execution time summary:
  mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)
-  715.1135     714.5413     717.9783     712.8209      2.1440
+  704.7770     703.9222     707.6222     702.7866      2.0646
 </pre></div>
 </div>
 </div>
@@ -967,7 +967,7 @@ to learn how to use the RPC Tracker and RPC Server.
 To use the RPC Tracker in auto-scheduler, replace the runner in <code class="code docutils literal notranslate"><span class="pre">TuningOptions</span></code>
 with <a class="reference internal" href="../../reference/api/python/auto_scheduler.html#tvm.auto_scheduler.RPCRunner" title="tvm.auto_scheduler.RPCRunner"><code class="xref any py py-class docutils literal notranslate"><span class="pre">auto_scheduler.RPCRunner</span></code></a>.</p></li>
 </ol>
-<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 1 minutes  30.382 seconds)</p>
+<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 1 minutes  31.529 seconds)</p>
 <div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-how-to-tune-with-autoscheduler-tune-network-x86-py">
 <div class="sphx-glr-download sphx-glr-download-python docutils container">
 <p><a class="reference download internal" download="" href="../../_downloads/e416b94ca1090b0897c0f6e0df95b911/tune_network_x86.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">tune_network_x86.py</span></code></a></p>
diff --git a/docs/how_to/tune_with_autotvm/sg_execution_times.html b/docs/how_to/tune_with_autotvm/sg_execution_times.html
index 99c07bca13..405ff8ad64 100644
--- a/docs/how_to/tune_with_autotvm/sg_execution_times.html
+++ b/docs/how_to/tune_with_autotvm/sg_execution_times.html
@@ -360,7 +360,7 @@
             
   <div class="section" id="computation-times">
 <span id="sphx-glr-how-to-tune-with-autotvm-sg-execution-times"></span><h1>Computation times<a class="headerlink" href="#computation-times" title="Permalink to this headline">¶</a></h1>
-<p><strong>00:23.092</strong> total execution time for <strong>how_to_tune_with_autotvm</strong> files:</p>
+<p><strong>00:22.707</strong> total execution time for <strong>how_to_tune_with_autotvm</strong> files:</p>
 <table class="docutils align-default">
 <colgroup>
 <col style="width: 84%" />
@@ -369,11 +369,11 @@
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="tune_conv2d_cuda.html#sphx-glr-how-to-tune-with-autotvm-tune-conv2d-cuda-py"><span class="std std-ref">Tuning High Performance Convolution on NVIDIA GPUs</span></a> (<code class="docutils literal notranslate"><span class="pre">tune_conv2d_cuda.py</span></code>)</p></td>
-<td><p>00:23.057</p></td>
+<td><p>00:22.671</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="tune_relay_x86.html#sphx-glr-how-to-tune-with-autotvm-tune-relay-x86-py"><span class="std std-ref">Auto-tuning a Convolutional Network for x86 CPU</span></a> (<code class="docutils literal notranslate"><span class="pre">tune_relay_x86.py</span></code>)</p></td>
-<td><p>00:00.020</p></td>
+<td><p>00:00.021</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="tune_relay_cuda.html#sphx-glr-how-to-tune-with-autotvm-tune-relay-cuda-py"><span class="std std-ref">Auto-tuning a Convolutional Network for NVIDIA GPU</span></a> (<code class="docutils literal notranslate"><span class="pre">tune_relay_cuda.py</span></code>)</p></td>
diff --git a/docs/how_to/tune_with_autotvm/tune_conv2d_cuda.html b/docs/how_to/tune_with_autotvm/tune_conv2d_cuda.html
index def53d297a..82edd8f5f5 100644
--- a/docs/how_to/tune_with_autotvm/tune_conv2d_cuda.html
+++ b/docs/how_to/tune_with_autotvm/tune_conv2d_cuda.html
@@ -630,7 +630,7 @@ and measure running time.</p>
 
 Best config:
 ,None
-Time cost of this operator: 0.037235
+Time cost of this operator: 0.037113
 </pre></div>
 </div>
 <div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-how-to-tune-with-autotvm-tune-conv2d-cuda-py">
diff --git a/docs/how_to/work_with_microtvm/micro_autotune.html b/docs/how_to/work_with_microtvm/micro_autotune.html
index 16716705e1..99bcab1b4c 100644
--- a/docs/how_to/work_with_microtvm/micro_autotune.html
+++ b/docs/how_to/work_with_microtvm/micro_autotune.html
@@ -664,10 +664,10 @@ the tuned operator.</p>
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>########## Build without Autotuning ##########
 Node Name                                     Ops                                           Time(us)  Time(%)  Shape              Inputs  Outputs  Measurements(us)
 ---------                                     ---                                           --------  -------  -----              ------  -------  ----------------
-tvmgen_default_fused_nn_contrib_conv2d_NCHWc  tvmgen_default_fused_nn_contrib_conv2d_NCHWc  295.5     98.719   (1, 2, 10, 10, 3)  2       1        [295.5]
-tvmgen_default_fused_layout_transform_1       tvmgen_default_fused_layout_transform_1       2.91      0.972    (1, 6, 10, 10)     1       1        [2.91]
-tvmgen_default_fused_layout_transform         tvmgen_default_fused_layout_transform         0.925     0.309    (1, 1, 10, 10, 3)  1       1        [0.925]
-Total_time                                    -                                             299.336   -        -                  -       -        -
+tvmgen_default_fused_nn_contrib_conv2d_NCHWc  tvmgen_default_fused_nn_contrib_conv2d_NCHWc  297.9     98.74    (1, 2, 10, 10, 3)  2       1        [297.9]
+tvmgen_default_fused_layout_transform_1       tvmgen_default_fused_layout_transform_1       2.878     0.954    (1, 6, 10, 10)     1       1        [2.878]
+tvmgen_default_fused_layout_transform         tvmgen_default_fused_layout_transform         0.923     0.306    (1, 1, 10, 10, 3)  1       1        [0.923]
+Total_time                                    -                                             301.7     -        -                  -       -        -
 </pre></div>
 </div>
 </div>
@@ -719,13 +719,13 @@ Total_time                                    -
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>########## Build with Autotuning ##########
 Node Name                                     Ops                                           Time(us)  Time(%)  Shape              Inputs  Outputs  Measurements(us)
 ---------                                     ---                                           --------  -------  -----              ------  -------  ----------------
-tvmgen_default_fused_nn_contrib_conv2d_NCHWc  tvmgen_default_fused_nn_contrib_conv2d_NCHWc  98.562    97.385   (1, 6, 10, 10, 1)  2       1        [98.562]
-tvmgen_default_fused_layout_transform_1       tvmgen_default_fused_layout_transform_1       1.717     1.696    (1, 6, 10, 10)     1       1        [1.717]
-tvmgen_default_fused_layout_transform         tvmgen_default_fused_layout_transform         0.929     0.918    (1, 1, 10, 10, 3)  1       1        [0.929]
-Total_time                                    -                                             101.209   -        -                  -       -        -
+tvmgen_default_fused_nn_contrib_conv2d_NCHWc  tvmgen_default_fused_nn_contrib_conv2d_NCHWc  100.0     97.491   (1, 6, 10, 10, 1)  2       1        [100.0]
+tvmgen_default_fused_layout_transform_1       tvmgen_default_fused_layout_transform_1       1.742     1.698    (1, 6, 10, 10)     1       1        [1.742]
+tvmgen_default_fused_layout_transform         tvmgen_default_fused_layout_transform         0.832     0.811    (1, 3, 10, 10, 1)  1       1        [0.832]
+Total_time                                    -                                             102.574   -        -                  -       -        -
 </pre></div>
 </div>
-<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 1 minutes  21.362 seconds)</p>
+<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 1 minutes  23.551 seconds)</p>
 <div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-how-to-work-with-microtvm-micro-autotune-py">
 <div class="sphx-glr-download sphx-glr-download-python docutils container">
 <p><a class="reference download internal" download="" href="../../_downloads/9ccca8fd489a1486ac71b55a55c320c5/micro_autotune.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">micro_autotune.py</span></code></a></p>
diff --git a/docs/how_to/work_with_microtvm/micro_pytorch.html b/docs/how_to/work_with_microtvm/micro_pytorch.html
index 47465fa8bf..b524c9b4ca 100644
--- a/docs/how_to/work_with_microtvm/micro_pytorch.html
+++ b/docs/how_to/work_with_microtvm/micro_pytorch.html
@@ -475,8 +475,7 @@ download a cat image and preprocess it to use as the model input.</p>
 Downloading: &quot;https://download.pytorch.org/models/quantized/mobilenet_v2_qnnpack_37f702c5.pth&quot; to /workspace/.cache/torch/hub/checkpoints/mobilenet_v2_qnnpack_37f702c5.pth
 
   0%|          | 0.00/3.42M [00:00&lt;?, ?B/s]
- 61%|######    | 2.09M/3.42M [00:00&lt;00:00, 16.0MB/s]
-100%|##########| 3.42M/3.42M [00:00&lt;00:00, 25.4MB/s]
+100%|##########| 3.42M/3.42M [00:00&lt;00:00, 36.8MB/s]
 /venv/apache-tvm-py3.8/lib/python3.8/site-packages/torch/_utils.py:314: UserWarning: TypedStorage is deprecated. It will be removed in the future and UntypedStorage will be the only storage class. This should only matter to you if you are using storages directly.  To access UntypedStorage directly, use tensor.untyped_storage() instead of tensor.storage()
   device=storage.device,
 /workspace/python/tvm/relay/frontend/pytorch_utils.py:47: DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead.
@@ -604,7 +603,7 @@ via the host <cite>main.cc`</cite> or if a Zephyr emulated board is selected as
 Torch top-1 id: 282, class name: tiger cat
 </pre></div>
 </div>
-<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 1 minutes  24.317 seconds)</p>
+<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 1 minutes  26.927 seconds)</p>
 <div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-how-to-work-with-microtvm-micro-pytorch-py">
 <div class="sphx-glr-download sphx-glr-download-python docutils container">
 <p><a class="reference download internal" download="" href="../../_downloads/12b9ecc04c41abaa12022061771821d1/micro_pytorch.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">micro_pytorch.py</span></code></a></p>
diff --git a/docs/how_to/work_with_microtvm/micro_train.html b/docs/how_to/work_with_microtvm/micro_train.html
index e4e9d3a5a4..8b37f73658 100644
--- a/docs/how_to/work_with_microtvm/micro_train.html
+++ b/docs/how_to/work_with_microtvm/micro_train.html
@@ -543,7 +543,7 @@ take about <strong>2 minutes</strong> to download the Stanford Cars, while COCO
 <a href="https://docs.python.org/3/library/shutil.html#shutil.move" title="shutil.move" class="sphx-glr-backref-module-shutil sphx-glr-backref-type-py-function"><span class="n">shutil</span><span class="o">.</span><span class="n">move</span></a><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><a href="https://docs.python.org/3/library/stdtypes.html#str" title="builtins.str" class="sphx-glr-backref-module-builtins sphx-glr-backref-typ [...]
 </pre></div>
 </div>
-<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>&#39;/tmp/tmpi68341_c/images/random&#39;
+<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>&#39;/tmp/tmpd034jfyb/images/random&#39;
 </pre></div>
 </div>
 </div>
@@ -603,8 +603,8 @@ objects to other stuff? We can display some examples from our datasets using <co
     <span class="n">plt</span><span class="o">.</span><span class="n">axis</span><span class="p">(</span><span class="s2">&quot;off&quot;</span><span class="p">)</span>
 </pre></div>
 </div>
-<img src="../../_images/sphx_glr_micro_train_001.png" srcset="../../_images/sphx_glr_micro_train_001.png" alt="[1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0]" class = "sphx-glr-single-img"/><div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>/tmp/tmpi68341_c/images/target contains 8144 images
-/tmp/tmpi68341_c/images/random contains 5000 images
+<img src="../../_images/sphx_glr_micro_train_001.png" srcset="../../_images/sphx_glr_micro_train_001.png" alt="[1.0, 0.0], [1.0, 0.0], [1.0, 0.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [0.0, 1.0], [1.0, 0.0], [0.0, 1.0]" class = "sphx-glr-single-img"/><div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>/tmp/tmpd034jfyb/images/target contains 8144 images
+/tmp/tmpd034jfyb/images/random contains 5000 images
 </pre></div>
 </div>
 </div>
@@ -716,13 +716,13 @@ the time on our validation set).</p>
 </pre></div>
 </div>
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Epoch 1/3
-328/328 - 37s - loss: 0.2210 - accuracy: 0.9245 - val_loss: 0.1308 - val_accuracy: 0.9551 - 37s/epoch - 114ms/step
+328/328 - 38s - loss: 0.2585 - accuracy: 0.9148 - val_loss: 0.1634 - val_accuracy: 0.9445 - 38s/epoch - 116ms/step
 Epoch 2/3
-328/328 - 34s - loss: 0.1044 - accuracy: 0.9613 - val_loss: 0.0893 - val_accuracy: 0.9675 - 34s/epoch - 104ms/step
+328/328 - 34s - loss: 0.1052 - accuracy: 0.9609 - val_loss: 0.1110 - val_accuracy: 0.9630 - 34s/epoch - 104ms/step
 Epoch 3/3
-328/328 - 34s - loss: 0.0660 - accuracy: 0.9746 - val_loss: 0.1146 - val_accuracy: 0.9656 - 34s/epoch - 104ms/step
+328/328 - 34s - loss: 0.0708 - accuracy: 0.9744 - val_loss: 0.0897 - val_accuracy: 0.9698 - 34s/epoch - 104ms/step
 
-&lt;keras.callbacks.History object at 0x7f5a8a562880&gt;
+&lt;keras.callbacks.History object at 0x7f138d3f58e0&gt;
 </pre></div>
 </div>
 </div>
@@ -986,7 +986,7 @@ as intended.</p>
 <p>From here, we could modify the model to read live images from the camera - we have another
 Arduino tutorial for how to do that <a class="reference external" href="https://github.com/guberti/tvm-arduino-demos/tree/master/examples/person_detection">on GitHub</a>. Alternatively, we could also
 <a class="reference external" href="https://tvm.apache.org/docs/how_to/work_with_microtvm/micro_autotune.html">use TVM’s autotuning capabilities</a> to dramatically improve the model’s performance.</p>
-<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 4 minutes  23.457 seconds)</p>
+<p class="sphx-glr-timing"><strong>Total running time of the script:</strong> ( 4 minutes  29.976 seconds)</p>
 <div class="sphx-glr-footer sphx-glr-footer-example docutils container" id="sphx-glr-download-how-to-work-with-microtvm-micro-train-py">
 <div class="sphx-glr-download sphx-glr-download-python docutils container">
 <p><a class="reference download internal" download="" href="../../_downloads/b52cec46baf4f78d6bcd94cbe269c8a6/micro_train.py"><code class="xref download docutils literal notranslate"><span class="pre">Download</span> <span class="pre">Python</span> <span class="pre">source</span> <span class="pre">code:</span> <span class="pre">micro_train.py</span></code></a></p>
diff --git a/docs/how_to/work_with_microtvm/sg_execution_times.html b/docs/how_to/work_with_microtvm/sg_execution_times.html
index 96d3399f1d..d83302ea8c 100644
--- a/docs/how_to/work_with_microtvm/sg_execution_times.html
+++ b/docs/how_to/work_with_microtvm/sg_execution_times.html
@@ -360,7 +360,7 @@
             
   <div class="section" id="computation-times">
 <span id="sphx-glr-how-to-work-with-microtvm-sg-execution-times"></span><h1>Computation times<a class="headerlink" href="#computation-times" title="Permalink to this headline">¶</a></h1>
-<p><strong>07:35.855</strong> total execution time for <strong>how_to_work_with_microtvm</strong> files:</p>
+<p><strong>07:48.758</strong> total execution time for <strong>how_to_work_with_microtvm</strong> files:</p>
 <table class="docutils align-default">
 <colgroup>
 <col style="width: 82%" />
@@ -369,27 +369,27 @@
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="micro_train.html#sphx-glr-how-to-work-with-microtvm-micro-train-py"><span class="std std-ref">5. Training Vision Models for microTVM on Arduino</span></a> (<code class="docutils literal notranslate"><span class="pre">micro_train.py</span></code>)</p></td>
-<td><p>04:23.457</p></td>
+<td><p>04:29.976</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="micro_pytorch.html#sphx-glr-how-to-work-with-microtvm-micro-pytorch-py"><span class="std std-ref">4. microTVM PyTorch Tutorial</span></a> (<code class="docutils literal notranslate"><span class="pre">micro_pytorch.py</span></code>)</p></td>
-<td><p>01:24.317</p></td>
+<td><p>01:26.927</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="micro_autotune.html#sphx-glr-how-to-work-with-microtvm-micro-autotune-py"><span class="std std-ref">6. Model Tuning with microTVM</span></a> (<code class="docutils literal notranslate"><span class="pre">micro_autotune.py</span></code>)</p></td>
-<td><p>01:21.362</p></td>
+<td><p>01:23.551</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="micro_aot.html#sphx-glr-how-to-work-with-microtvm-micro-aot-py"><span class="std std-ref">3. microTVM Ahead-of-Time (AOT) Compilation</span></a> (<code class="docutils literal notranslate"><span class="pre">micro_aot.py</span></code>)</p></td>
-<td><p>00:11.404</p></td>
+<td><p>00:11.629</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="micro_custom_ide.html#sphx-glr-how-to-work-with-microtvm-micro-custom-ide-py"><span class="std std-ref">9. Bring microTVM to your own development environment</span></a> (<code class="docutils literal notranslate"><span class="pre">micro_custom_ide.py</span></code>)</p></td>
-<td><p>00:08.427</p></td>
+<td><p>00:08.419</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="micro_tflite.html#sphx-glr-how-to-work-with-microtvm-micro-tflite-py"><span class="std std-ref">2. microTVM TFLite Tutorial</span></a> (<code class="docutils literal notranslate"><span class="pre">micro_tflite.py</span></code>)</p></td>
-<td><p>00:06.888</p></td>
+<td><p>00:08.256</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="micro_ethosu.html#sphx-glr-how-to-work-with-microtvm-micro-ethosu-py"><span class="std std-ref">7. Running TVM on bare metal Arm(R) Cortex(R)-M55 CPU and Ethos(TM)-U55 NPU with CMSIS-NN</span></a> (<code class="docutils literal notranslate"><span class="pre">micro_ethosu.py</span></code>)</p></td>
diff --git a/docs/how_to/work_with_relay/sg_execution_times.html b/docs/how_to/work_with_relay/sg_execution_times.html
index 8c97789cdb..0f3ebb66d8 100644
--- a/docs/how_to/work_with_relay/sg_execution_times.html
+++ b/docs/how_to/work_with_relay/sg_execution_times.html
@@ -360,7 +360,7 @@
             
   <div class="section" id="computation-times">
 <span id="sphx-glr-how-to-work-with-relay-sg-execution-times"></span><h1>Computation times<a class="headerlink" href="#computation-times" title="Permalink to this headline">¶</a></h1>
-<p><strong>00:36.235</strong> total execution time for <strong>how_to_work_with_relay</strong> files:</p>
+<p><strong>00:37.212</strong> total execution time for <strong>how_to_work_with_relay</strong> files:</p>
 <table class="docutils align-default">
 <colgroup>
 <col style="width: 84%" />
@@ -369,15 +369,15 @@
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="using_pipeline_executor.html#sphx-glr-how-to-work-with-relay-using-pipeline-executor-py"><span class="std std-ref">Using Pipeline Executor in Relay</span></a> (<code class="docutils literal notranslate"><span class="pre">using_pipeline_executor.py</span></code>)</p></td>
-<td><p>00:31.317</p></td>
+<td><p>00:32.119</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="using_external_lib.html#sphx-glr-how-to-work-with-relay-using-external-lib-py"><span class="std std-ref">Using External Libraries in Relay</span></a> (<code class="docutils literal notranslate"><span class="pre">using_external_lib.py</span></code>)</p></td>
-<td><p>00:03.014</p></td>
+<td><p>00:03.103</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="build_gcn.html#sphx-glr-how-to-work-with-relay-build-gcn-py"><span class="std std-ref">Building a Graph Convolutional Network</span></a> (<code class="docutils literal notranslate"><span class="pre">build_gcn.py</span></code>)</p></td>
-<td><p>00:01.897</p></td>
+<td><p>00:01.984</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="using_relay_viz.html#sphx-glr-how-to-work-with-relay-using-relay-viz-py"><span class="std std-ref">Use Relay Visualizer to Visualize Relay</span></a> (<code class="docutils literal notranslate"><span class="pre">using_relay_viz.py</span></code>)</p></td>
diff --git a/docs/how_to/work_with_schedules/intrin_math.html b/docs/how_to/work_with_schedules/intrin_math.html
index 25b3d03d88..fe89985307 100644
--- a/docs/how_to/work_with_schedules/intrin_math.html
+++ b/docs/how_to/work_with_schedules/intrin_math.html
@@ -572,7 +572,7 @@ The following example customizes CUDA lowering rule for <code class="code docuti
 <a href="../../reference/api/python/ir.html#tvm.ir.register_intrin_lowering" title="tvm.ir.register_intrin_lowering" class="sphx-glr-backref-module-tvm-ir sphx-glr-backref-type-py-function"><span class="n">register_intrin_lowering</span></a><span class="p">(</span><span class="s2">&quot;tir.exp&quot;</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="s2">&quot;cuda&quot;</span><span class="p">,</span> <span class="n">f</span><span class="o">= [...]
 </pre></div>
 </div>
-<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>&lt;function my_cuda_math_rule at 0x7f5c6c00da60&gt;
+<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>&lt;function my_cuda_math_rule at 0x7f1567998550&gt;
 </pre></div>
 </div>
 <p>Register the rule to TVM with override option to override existing rule.
diff --git a/docs/how_to/work_with_schedules/sg_execution_times.html b/docs/how_to/work_with_schedules/sg_execution_times.html
index 9a4df36409..5bec647b81 100644
--- a/docs/how_to/work_with_schedules/sg_execution_times.html
+++ b/docs/how_to/work_with_schedules/sg_execution_times.html
@@ -360,7 +360,7 @@
             
   <div class="section" id="computation-times">
 <span id="sphx-glr-how-to-work-with-schedules-sg-execution-times"></span><h1>Computation times<a class="headerlink" href="#computation-times" title="Permalink to this headline">¶</a></h1>
-<p><strong>00:04.945</strong> total execution time for <strong>how_to_work_with_schedules</strong> files:</p>
+<p><strong>00:05.321</strong> total execution time for <strong>how_to_work_with_schedules</strong> files:</p>
 <table class="docutils align-default">
 <colgroup>
 <col style="width: 83%" />
@@ -369,19 +369,19 @@
 </colgroup>
 <tbody>
 <tr class="row-odd"><td><p><a class="reference internal" href="intrin_math.html#sphx-glr-how-to-work-with-schedules-intrin-math-py"><span class="std std-ref">Intrinsics and Math Functions</span></a> (<code class="docutils literal notranslate"><span class="pre">intrin_math.py</span></code>)</p></td>
-<td><p>00:02.354</p></td>
+<td><p>00:02.462</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="tensorize.html#sphx-glr-how-to-work-with-schedules-tensorize-py"><span class="std std-ref">Use Tensorize to Leverage Hardware Intrinsics</span></a> (<code class="docutils literal notranslate"><span class="pre">tensorize.py</span></code>)</p></td>
-<td><p>00:00.975</p></td>
+<td><p>00:01.199</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="reduction.html#sphx-glr-how-to-work-with-schedules-reduction-py"><span class="std std-ref">Reduction</span></a> (<code class="docutils literal notranslate"><span class="pre">reduction.py</span></code>)</p></td>
-<td><p>00:00.673</p></td>
+<td><p>00:00.694</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="scan.html#sphx-glr-how-to-work-with-schedules-scan-py"><span class="std std-ref">Scan and Recurrent Kernel</span></a> (<code class="docutils literal notranslate"><span class="pre">scan.py</span></code>)</p></td>
-<td><p>00:00.663</p></td>
+<td><p>00:00.687</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="extern_op.html#sphx-glr-how-to-work-with-schedules-extern-op-py"><span class="std std-ref">External Tensor Functions</span></a> (<code class="docutils literal notranslate"><span class="pre">extern_op.py</span></code>)</p></td>
@@ -393,7 +393,7 @@
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="tedd.html#sphx-glr-how-to-work-with-schedules-tedd-py"><span class="std std-ref">Use Tensor Expression Debug Display (TEDD) for Visualization</span></a> (<code class="docutils literal notranslate"><span class="pre">tedd.py</span></code>)</p></td>
-<td><p>00:00.065</p></td>
+<td><p>00:00.064</p></td>
 <td><p>0.0 MB</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="tuple_inputs.html#sphx-glr-how-to-work-with-schedules-tuple-inputs-py"><span class="std std-ref">Compute and Reduce with Tuple Inputs</span></a> (<code class="docutils literal notranslate"><span class="pre">tuple_inputs.py</span></code>)</p></td>
diff --git a/docs/install/nnpack.html b/docs/install/nnpack.html
index 61f3a9d084..262b273e47 100644
--- a/docs/install/nnpack.html
+++ b/docs/install/nnpack.html
@@ -249,17 +249,7 @@
               <p class="caption" role="heading"><span class="caption-text">Getting Started</span></p>
 <ul class="current">
 <li class="toctree-l1 current"><a class="reference internal" href="index.html">Installing TVM</a><ul class="current">
-<li class="toctree-l2 current"><a class="reference internal" href="from_source.html">Install from Source</a><ul class="current">
-<li class="toctree-l3"><a class="reference internal" href="from_source.html#developers-get-source-from-github">Developers: Get Source from Github</a></li>
-<li class="toctree-l3"><a class="reference internal" href="from_source.html#build-the-shared-library">Build the Shared Library</a></li>
-<li class="toctree-l3"><a class="reference internal" href="from_source.html#python-package-installation">Python Package Installation</a></li>
-<li class="toctree-l3 current"><a class="reference internal" href="from_source.html#install-contrib-libraries">Install Contrib Libraries</a><ul class="current">
-<li class="toctree-l4 current"><a class="current reference internal" href="#">NNPACK Contrib Installation</a></li>
-</ul>
-</li>
-<li class="toctree-l3"><a class="reference internal" href="from_source.html#enable-c-tests">Enable C++ Tests</a></li>
-</ul>
-</li>
+<li class="toctree-l2"><a class="reference internal" href="from_source.html">Install from Source</a></li>
 <li class="toctree-l2"><a class="reference internal" href="docker.html">Docker Images</a></li>
 <li class="toctree-l2 current"><a class="current reference internal" href="#">NNPACK Contrib Installation</a><ul>
 <li class="toctree-l3"><a class="reference internal" href="#conditions">Conditions</a></li>
diff --git a/docs/reference/api/doxygen/annotated.html b/docs/reference/api/doxygen/annotated.html
index 2791597884..771de6c951 100644
--- a/docs/reference/api/doxygen/annotated.html
+++ b/docs/reference/api/doxygen/annotated.html
@@ -422,108 +422,110 @@ $(function() {
 <tr id="row_1_5_98_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1WildcardPattern.html" target="_self">WildcardPattern</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1WildcardPatternNode.html" title="Wildcard Pattern is a pattern that can match anything.">WildcardPatternNode</a> </td></tr>
 <tr id="row_1_5_99_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1TypePatternNode.html" target="_self">TypePatternNode</a></td><td class="desc">Pattern for matching a certain type </td></tr>
 <tr id="row_1_5_100_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1TypePattern.html" target="_self">TypePattern</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1TypePatternNode.html" title="Pattern for matching a certain type.">TypePatternNode</a> </td></tr>
-<tr id="row_1_5_101_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ShapePatternNode.html" target="_self">ShapePatternNode</a></td><td class="desc">A pattern that asserting a root pattern has a certain shape </td></tr>
-<tr id="row_1_5_102_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ShapePattern.html" target="_self">ShapePattern</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1ShapePatternNode.html" title="A pattern that asserting a root pattern has a certain shape.">ShapePatternNode</a> </td></tr>
-<tr id="row_1_5_103_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1SameShapeConstraintNode.html" target="_self">SameShapeConstraintNode</a></td><td class="desc">A pattern that asserting multiple root patterns have the same shape </td></tr>
-<tr id="row_1_5_104_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1SameShapeConstraint.html" target="_self">SameShapeConstraint</a></td><td class="desc">Managed reference to SameShapePatternNode </td></tr>
-<tr id="row_1_5_105_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DataTypePatternNode.html" target="_self">DataTypePatternNode</a></td><td class="desc">A pattern that asserting a root pattern has a certain data type </td></tr>
-<tr id="row_1_5_106_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DataTypePattern.html" target="_self">DataTypePattern</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1DataTypePatternNode.html" title="A pattern that asserting a root pattern has a certain data type.">DataTypePatternNode</a> [...]
-<tr id="row_1_5_107_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1AttrPatternNode.html" target="_self">AttrPatternNode</a></td><td class="desc">A pattern that asserting a root pattern has certain attributes </td></tr>
-<tr id="row_1_5_108_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1AttrPattern.html" target="_self">AttrPattern</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1AttrPatternNode.html" title="A pattern that asserting a root pattern has certain attributes.">AttrPatternNode</a> </td></tr>
-<tr id="row_1_5_109_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ExternFuncPatternNode.html" target="_self">ExternFuncPatternNode</a></td><td class="desc">A pattern of external function </td></tr>
-<tr id="row_1_5_110_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ExternFuncPattern.html" target="_self">ExternFuncPattern</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1ExternFuncPatternNode.html" title="A pattern of external function.">ExternFuncPatternNode</a> </td></tr>
-<tr id="row_1_5_111_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor.html" target="_self">DFPatternFunctor</a></td><td class="desc">A dynamical functor that dispatches on in the first <a class="el" href="classtvm_1_1relax_1_1DFPattern.html" title="Managed reference to dataflow patterns.">DFPattern</a> argument </ [...]
-<tr id="row_1_5_112_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html" target="_self">DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_113_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html" target="_self">DFPatternVisitor</a></td><td class="desc">A simple visitor wrapper around <a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor.html" title="A dynamical functor that dispatches on in the first DFPattern argument.">DFPatt [...]
-<tr id="row_1_5_114_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ExecBuilderNode.html" target="_self">ExecBuilderNode</a></td><td class="desc">A builder provides api to build VM executable with instructions </td></tr>
-<tr id="row_1_5_115_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ExecBuilder.html" target="_self">ExecBuilder</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_116_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1IdNode.html" target="_self">IdNode</a></td><td class="desc">The unique identifier of variables </td></tr>
-<tr id="row_1_5_117_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1Id.html" target="_self">Id</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_118_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1StructInfoNode.html" target="_self">StructInfoNode</a></td><td class="desc">Base type of all structure information </td></tr>
-<tr id="row_1_5_119_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1StructInfo.html" target="_self">StructInfo</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1StructInfoNode.html" title="Base type of all structure information.">StructInfoNode</a> </td></tr>
-<tr id="row_1_5_120_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1CallNode.html" target="_self">CallNode</a></td><td class="desc"><a class="el" href="classtvm_1_1relax_1_1Call.html">Call</a> corresponds to callable invocation. Corresponds to operation in computational graph terminology </td></tr>
-<tr id="row_1_5_121_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1Call.html" target="_self">Call</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_122_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1IfNode.html" target="_self">IfNode</a></td><td class="desc">Condition expression </td></tr>
-<tr id="row_1_5_123_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1If.html" target="_self">If</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_124_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1TupleNode.html" target="_self">TupleNode</a></td><td class="desc"><a class="el" href="classtvm_1_1relax_1_1Tuple.html">Tuple</a> container </td></tr>
-<tr id="row_1_5_125_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1Tuple.html" target="_self">Tuple</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_126_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1TupleGetItemNode.html" target="_self">TupleGetItemNode</a></td><td class="desc">Get index-th field out of a tuple </td></tr>
-<tr id="row_1_5_127_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1TupleGetItem.html" target="_self">TupleGetItem</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_128_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1LeafExprNode.html" target="_self">LeafExprNode</a></td><td class="desc">Base type of all (non-function) leaf Exprs </td></tr>
-<tr id="row_1_5_129_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1LeafExpr.html" target="_self">LeafExpr</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1BaseExprNode.html" title="Base type of all the expressions.">BaseExprNode</a> </td></tr>
-<tr id="row_1_5_130_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ShapeExprNode.html" target="_self">ShapeExprNode</a></td><td class="desc">A shape expression which allows users to construct a shape containing <a class="el" href="classtvm_1_1PrimExpr.html" title="Reference to PrimExprNode.">PrimExpr</a> </td></tr>
-<tr id="row_1_5_131_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ShapeExpr.html" target="_self">ShapeExpr</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_132_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1VarNode.html" target="_self">VarNode</a></td><td class="desc">The variable class for all Relax bindings </td></tr>
-<tr id="row_1_5_133_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1Var.html" target="_self">Var</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_134_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DataflowVarNode.html" target="_self">DataflowVarNode</a></td><td class="desc">A sub-type of the variable node used to mark dataflow variables from normal visible "function local" bindings </td></tr>
-<tr id="row_1_5_135_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DataflowVar.html" target="_self">DataflowVar</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_136_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ConstantNode.html" target="_self">ConstantNode</a></td><td class="desc"><a class="el" href="classtvm_1_1relax_1_1Constant.html">Constant</a> tensor </td></tr>
-<tr id="row_1_5_137_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1Constant.html" target="_self">Constant</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_138_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1PrimValueNode.html" target="_self">PrimValueNode</a></td><td class="desc"><a class="el" href="classtvm_1_1relax_1_1PrimValue.html" title="Managed reference to PrimValueNode.">PrimValue</a> </td></tr>
-<tr id="row_1_5_139_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1PrimValue.html" target="_self">PrimValue</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1PrimValueNode.html" title="PrimValue.">PrimValueNode</a> </td></tr>
-<tr id="row_1_5_140_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1StringImmNode.html" target="_self">StringImmNode</a></td><td class="desc">Represent a string literal constant </td></tr>
-<tr id="row_1_5_141_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1StringImm.html" target="_self">StringImm</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1StringImm.html" title="Managed reference to StringImm.">StringImm</a> </td></tr>
-<tr id="row_1_5_142_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DataTypeImmNode.html" target="_self">DataTypeImmNode</a></td><td class="desc">Represent a data type constant </td></tr>
-<tr id="row_1_5_143_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DataTypeImm.html" target="_self">DataTypeImm</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1DataTypeImm.html" title="Managed reference to DataTypeImm.">DataTypeImm</a> </td></tr>
-<tr id="row_1_5_144_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1BindingNode.html" target="_self">BindingNode</a></td><td class="desc">The base class of a variable binding in Relax </td></tr>
-<tr id="row_1_5_145_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1Binding.html" target="_self">Binding</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_146_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1MatchCastNode.html" target="_self">MatchCastNode</a></td><td class="desc">Runtime-match the value to the struct info </td></tr>
-<tr id="row_1_5_147_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1MatchCast.html" target="_self">MatchCast</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1MatchCastNode.html" title="Runtime-match the value to the struct info.">MatchCastNode</a> </td></tr>
-<tr id="row_1_5_148_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1VarBindingNode.html" target="_self">VarBindingNode</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_149_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1VarBinding.html" target="_self">VarBinding</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_150_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1BindingBlockNode.html" target="_self">BindingBlockNode</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_151_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1BindingBlock.html" target="_self">BindingBlock</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_152_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DataflowBlockNode.html" target="_self">DataflowBlockNode</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_153_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DataflowBlock.html" target="_self">DataflowBlock</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_154_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1SeqExprNode.html" target="_self">SeqExprNode</a></td><td class="desc">A sequence of blocks followed by an expression </td></tr>
-<tr id="row_1_5_155_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1SeqExpr.html" target="_self">SeqExpr</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_156_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1FunctionNode.html" target="_self">FunctionNode</a></td><td class="desc">A Relax function </td></tr>
-<tr id="row_1_5_157_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1Function.html" target="_self">Function</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_158_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ExternFuncNode.html" target="_self">ExternFuncNode</a></td><td class="desc">The extern function, which can represent packed function </td></tr>
-<tr id="row_1_5_159_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ExternFunc.html" target="_self">ExternFunc</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_160_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ExprFunctor.html" target="_self">ExprFunctor</a></td><td class="desc">A dynamical functor that dispatches on in the first Expr argument. You can use this as a more powerful Visitor, since it allows you to define function signatures of Visit <a class="el" href="c [...]
-<tr id="row_1_5_161_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ExprFunctor_3_01R_07const_01Expr_01_6n_00_01Args_8_8_8_08_4.html" target="_self">ExprFunctor&lt; R(const Expr &amp;n, Args...)&gt;</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_162_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ExprVisitor.html" target="_self">ExprVisitor</a></td><td class="desc">A simple visitor wrapper around <a class="el" href="classtvm_1_1relax_1_1ExprFunctor.html" title="A dynamical functor that dispatches on in the first Expr argument. You can use this as a more  [...]
-<tr id="row_1_5_163_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ExprMutatorBase.html" target="_self">ExprMutatorBase</a></td><td class="desc">A mutator works in unnormalized form </td></tr>
-<tr id="row_1_5_164_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ExprMutator.html" target="_self">ExprMutator</a></td><td class="desc">A mutator works in normal form </td></tr>
-<tr id="row_1_5_165_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1NestedMsg.html" target="_self">NestedMsg</a></td><td class="desc">Container that stores possibly nested message with leaf message type T </td></tr>
-<tr id="row_1_5_166_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ObjectStructInfoNode.html" target="_self">ObjectStructInfoNode</a></td><td class="desc">Opaque object </td></tr>
-<tr id="row_1_5_167_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ObjectStructInfo.html" target="_self">ObjectStructInfo</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1ObjectStructInfoNode.html" title="Opaque object.">ObjectStructInfoNode</a> </td></tr>
-<tr id="row_1_5_168_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1PrimStructInfoNode.html" target="_self">PrimStructInfoNode</a></td><td class="desc">Primitive value </td></tr>
-<tr id="row_1_5_169_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1PrimStructInfo.html" target="_self">PrimStructInfo</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1PrimStructInfoNode.html" title="Primitive value.">PrimStructInfoNode</a> </td></tr>
-<tr id="row_1_5_170_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ShapeStructInfoNode.html" target="_self">ShapeStructInfoNode</a></td><td class="desc"><a class="el" href="classtvm_1_1relax_1_1StructInfo.html" title="Managed reference to StructInfoNode.">StructInfo</a> of shape value </td></tr>
-<tr id="row_1_5_171_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ShapeStructInfo.html" target="_self">ShapeStructInfo</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1ShapeStructInfoNode.html" title="StructInfo of shape value.">ShapeStructInfoNode</a> </td></tr>
-<tr id="row_1_5_172_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1TensorStructInfoNode.html" target="_self">TensorStructInfoNode</a></td><td class="desc"><a class="el" href="classtvm_1_1relax_1_1StructInfo.html" title="Managed reference to StructInfoNode.">StructInfo</a> of Tensor </td></tr>
-<tr id="row_1_5_173_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1TensorStructInfo.html" target="_self">TensorStructInfo</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1TensorStructInfoNode.html" title="StructInfo of Tensor.">TensorStructInfoNode</a> </td></tr>
-<tr id="row_1_5_174_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1TupleStructInfoNode.html" target="_self">TupleStructInfoNode</a></td><td class="desc"><a class="el" href="classtvm_1_1relax_1_1StructInfo.html" title="Managed reference to StructInfoNode.">StructInfo</a> of <a class="el" href="classtvm_1_1relax_1_1Tuple.html">Tu [...]
-<tr id="row_1_5_175_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1TupleStructInfo.html" target="_self">TupleStructInfo</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1TupleStructInfoNode.html" title="StructInfo of Tuple.">TupleStructInfoNode</a> </td></tr>
-<tr id="row_1_5_176_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1FuncStructInfoNode.html" target="_self">FuncStructInfoNode</a></td><td class="desc">Structure information about function </td></tr>
-<tr id="row_1_5_177_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1FuncStructInfo.html" target="_self">FuncStructInfo</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1FuncStructInfoNode.html" title="Structure information about function.">FuncStructInfoNode</a> </td></tr>
-<tr id="row_1_5_178_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1StructInfoFunctor.html" target="_self">StructInfoFunctor</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_179_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1StructInfoFunctor_3_01R_07const_01StructInfo_01_6n_00_01Args_8_8_8_08_4.html" target="_self">StructInfoFunctor&lt; R(const StructInfo &amp;n, Args...)&gt;</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_180_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1StructInfoVisitor.html" target="_self">StructInfoVisitor</a></td><td class="desc">A struct info visitor </td></tr>
-<tr id="row_1_5_181_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1StructInfoMutator.html" target="_self">StructInfoMutator</a></td><td class="desc"><a class="el" href="classtvm_1_1relax_1_1StructInfoMutator.html" title="StructInfoMutator that mutates struct info.">StructInfoMutator</a> that mutates struct info </td></tr>
-<tr id="row_1_5_182_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1MatchResultNode.html" target="_self">MatchResultNode</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_183_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1MatchResult.html" target="_self">MatchResult</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1MatchResultNode.html">MatchResultNode</a> </td></tr>
-<tr id="row_1_5_184_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ChoiceNode.html" target="_self">ChoiceNode</a></td><td class="desc"><a class="el" href="classtvm_1_1relax_1_1Choice.html" title="Managed reference to ChoiceNode.">Choice</a> manages a set of keys for transformation and constraint functions </td></tr>
-<tr id="row_1_5_185_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1Choice.html" target="_self">Choice</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1ChoiceNode.html" title="Choice manages a set of keys for transformation and constraint functions.">ChoiceNode</a> </td></tr>
-<tr id="row_1_5_186_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1KnobNode.html" target="_self">KnobNode</a></td><td class="desc"><a class="el" href="classtvm_1_1relax_1_1Knob.html" title="Managed reference to KnobNode.">Knob</a> manages a set of valid choices for an optimization </td></tr>
-<tr id="row_1_5_187_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1Knob.html" target="_self">Knob</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1KnobNode.html" title="Knob manages a set of valid choices for an optimization.">KnobNode</a> </td></tr>
-<tr id="row_1_5_188_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1TraceNode.html" target="_self">TraceNode</a></td><td class="desc"><a class="el" href="classtvm_1_1relax_1_1Trace.html" title="Managed reference to TraceNode.">Trace</a> manages history of optimization decisions </td></tr>
-<tr id="row_1_5_189_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1Trace.html" target="_self">Trace</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1TraceNode.html" title="Trace manages history of optimization decisions.">TraceNode</a> </td></tr>
-<tr id="row_1_5_190_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1TuningRecordNode.html" target="_self">TuningRecordNode</a></td><td class="desc">The class of tuning records </td></tr>
-<tr id="row_1_5_191_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1TuningRecord.html" target="_self">TuningRecord</a></td><td class="desc">The managed reference of <a class="el" href="classtvm_1_1relax_1_1TuningRecordNode.html" title="The class of tuning records.">TuningRecordNode</a> </td></tr>
-<tr id="row_1_5_192_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structtvm_1_1relax_1_1WorkloadEqual.html" target="_self">WorkloadEqual</a></td><td class="desc">The equality check for Workload </td></tr>
-<tr id="row_1_5_193_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DatabaseNode.html" target="_self">DatabaseNode</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_194_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1Database.html" target="_self">Database</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1DatabaseNode.html">DatabaseNode</a> </td></tr>
-<tr id="row_1_5_195_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ShapeTypeNode.html" target="_self">ShapeTypeNode</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_196_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ShapeType.html" target="_self">ShapeType</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_197_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ObjectTypeNode.html" target="_self">ObjectTypeNode</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_198_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ObjectType.html" target="_self">ObjectType</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_199_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DynTensorTypeNode.html" target="_self">DynTensorTypeNode</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_200_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DynTensorType.html" target="_self">DynTensorType</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1DynTensorTypeNode.html">DynTensorTypeNode</a> </td></tr>
-<tr id="row_1_5_201_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1PackedFuncTypeNode.html" target="_self">PackedFuncTypeNode</a></td><td class="desc"></td></tr>
-<tr id="row_1_5_202_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1PackedFuncType.html" target="_self">PackedFuncType</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_101_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1StructInfoPatternNode.html" target="_self">StructInfoPatternNode</a></td><td class="desc">Pattern for matching a certain struct info </td></tr>
+<tr id="row_1_5_102_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html" target="_self">StructInfoPattern</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_103_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ShapePatternNode.html" target="_self">ShapePatternNode</a></td><td class="desc">A pattern that asserting a root pattern has a certain shape </td></tr>
+<tr id="row_1_5_104_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ShapePattern.html" target="_self">ShapePattern</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1ShapePatternNode.html" title="A pattern that asserting a root pattern has a certain shape.">ShapePatternNode</a> </td></tr>
+<tr id="row_1_5_105_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1SameShapeConstraintNode.html" target="_self">SameShapeConstraintNode</a></td><td class="desc">A pattern that asserting multiple root patterns have the same shape </td></tr>
+<tr id="row_1_5_106_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1SameShapeConstraint.html" target="_self">SameShapeConstraint</a></td><td class="desc">Managed reference to SameShapePatternNode </td></tr>
+<tr id="row_1_5_107_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DataTypePatternNode.html" target="_self">DataTypePatternNode</a></td><td class="desc">A pattern that asserting a root pattern has a certain data type </td></tr>
+<tr id="row_1_5_108_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DataTypePattern.html" target="_self">DataTypePattern</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1DataTypePatternNode.html" title="A pattern that asserting a root pattern has a certain data type.">DataTypePatternNode</a> [...]
+<tr id="row_1_5_109_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1AttrPatternNode.html" target="_self">AttrPatternNode</a></td><td class="desc">A pattern that asserting a root pattern has certain attributes </td></tr>
+<tr id="row_1_5_110_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1AttrPattern.html" target="_self">AttrPattern</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1AttrPatternNode.html" title="A pattern that asserting a root pattern has certain attributes.">AttrPatternNode</a> </td></tr>
+<tr id="row_1_5_111_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ExternFuncPatternNode.html" target="_self">ExternFuncPatternNode</a></td><td class="desc">A pattern of external function </td></tr>
+<tr id="row_1_5_112_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ExternFuncPattern.html" target="_self">ExternFuncPattern</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1ExternFuncPatternNode.html" title="A pattern of external function.">ExternFuncPatternNode</a> </td></tr>
+<tr id="row_1_5_113_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor.html" target="_self">DFPatternFunctor</a></td><td class="desc">A dynamical functor that dispatches on in the first <a class="el" href="classtvm_1_1relax_1_1DFPattern.html" title="Managed reference to dataflow patterns.">DFPattern</a> argument </ [...]
+<tr id="row_1_5_114_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html" target="_self">DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_115_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html" target="_self">DFPatternVisitor</a></td><td class="desc">A simple visitor wrapper around <a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor.html" title="A dynamical functor that dispatches on in the first DFPattern argument.">DFPatt [...]
+<tr id="row_1_5_116_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ExecBuilderNode.html" target="_self">ExecBuilderNode</a></td><td class="desc">A builder provides api to build VM executable with instructions </td></tr>
+<tr id="row_1_5_117_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ExecBuilder.html" target="_self">ExecBuilder</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_118_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1IdNode.html" target="_self">IdNode</a></td><td class="desc">The unique identifier of variables </td></tr>
+<tr id="row_1_5_119_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1Id.html" target="_self">Id</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_120_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1StructInfoNode.html" target="_self">StructInfoNode</a></td><td class="desc">Base type of all structure information </td></tr>
+<tr id="row_1_5_121_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1StructInfo.html" target="_self">StructInfo</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1StructInfoNode.html" title="Base type of all structure information.">StructInfoNode</a> </td></tr>
+<tr id="row_1_5_122_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1CallNode.html" target="_self">CallNode</a></td><td class="desc"><a class="el" href="classtvm_1_1relax_1_1Call.html">Call</a> corresponds to callable invocation. Corresponds to operation in computational graph terminology </td></tr>
+<tr id="row_1_5_123_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1Call.html" target="_self">Call</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_124_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1IfNode.html" target="_self">IfNode</a></td><td class="desc">Condition expression </td></tr>
+<tr id="row_1_5_125_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1If.html" target="_self">If</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_126_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1TupleNode.html" target="_self">TupleNode</a></td><td class="desc"><a class="el" href="classtvm_1_1relax_1_1Tuple.html">Tuple</a> container </td></tr>
+<tr id="row_1_5_127_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1Tuple.html" target="_self">Tuple</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_128_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1TupleGetItemNode.html" target="_self">TupleGetItemNode</a></td><td class="desc">Get index-th field out of a tuple </td></tr>
+<tr id="row_1_5_129_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1TupleGetItem.html" target="_self">TupleGetItem</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_130_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1LeafExprNode.html" target="_self">LeafExprNode</a></td><td class="desc">Base type of all (non-function) leaf Exprs </td></tr>
+<tr id="row_1_5_131_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1LeafExpr.html" target="_self">LeafExpr</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1BaseExprNode.html" title="Base type of all the expressions.">BaseExprNode</a> </td></tr>
+<tr id="row_1_5_132_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ShapeExprNode.html" target="_self">ShapeExprNode</a></td><td class="desc">A shape expression which allows users to construct a shape containing <a class="el" href="classtvm_1_1PrimExpr.html" title="Reference to PrimExprNode.">PrimExpr</a> </td></tr>
+<tr id="row_1_5_133_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ShapeExpr.html" target="_self">ShapeExpr</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_134_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1VarNode.html" target="_self">VarNode</a></td><td class="desc">The variable class for all Relax bindings </td></tr>
+<tr id="row_1_5_135_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1Var.html" target="_self">Var</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_136_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DataflowVarNode.html" target="_self">DataflowVarNode</a></td><td class="desc">A sub-type of the variable node used to mark dataflow variables from normal visible "function local" bindings </td></tr>
+<tr id="row_1_5_137_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DataflowVar.html" target="_self">DataflowVar</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_138_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ConstantNode.html" target="_self">ConstantNode</a></td><td class="desc"><a class="el" href="classtvm_1_1relax_1_1Constant.html">Constant</a> tensor </td></tr>
+<tr id="row_1_5_139_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1Constant.html" target="_self">Constant</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_140_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1PrimValueNode.html" target="_self">PrimValueNode</a></td><td class="desc"><a class="el" href="classtvm_1_1relax_1_1PrimValue.html" title="Managed reference to PrimValueNode.">PrimValue</a> </td></tr>
+<tr id="row_1_5_141_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1PrimValue.html" target="_self">PrimValue</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1PrimValueNode.html" title="PrimValue.">PrimValueNode</a> </td></tr>
+<tr id="row_1_5_142_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1StringImmNode.html" target="_self">StringImmNode</a></td><td class="desc">Represent a string literal constant </td></tr>
+<tr id="row_1_5_143_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1StringImm.html" target="_self">StringImm</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1StringImm.html" title="Managed reference to StringImm.">StringImm</a> </td></tr>
+<tr id="row_1_5_144_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DataTypeImmNode.html" target="_self">DataTypeImmNode</a></td><td class="desc">Represent a data type constant </td></tr>
+<tr id="row_1_5_145_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DataTypeImm.html" target="_self">DataTypeImm</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1DataTypeImm.html" title="Managed reference to DataTypeImm.">DataTypeImm</a> </td></tr>
+<tr id="row_1_5_146_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1BindingNode.html" target="_self">BindingNode</a></td><td class="desc">The base class of a variable binding in Relax </td></tr>
+<tr id="row_1_5_147_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1Binding.html" target="_self">Binding</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_148_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1MatchCastNode.html" target="_self">MatchCastNode</a></td><td class="desc">Runtime-match the value to the struct info </td></tr>
+<tr id="row_1_5_149_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1MatchCast.html" target="_self">MatchCast</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1MatchCastNode.html" title="Runtime-match the value to the struct info.">MatchCastNode</a> </td></tr>
+<tr id="row_1_5_150_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1VarBindingNode.html" target="_self">VarBindingNode</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_151_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1VarBinding.html" target="_self">VarBinding</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_152_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1BindingBlockNode.html" target="_self">BindingBlockNode</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_153_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1BindingBlock.html" target="_self">BindingBlock</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_154_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DataflowBlockNode.html" target="_self">DataflowBlockNode</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_155_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DataflowBlock.html" target="_self">DataflowBlock</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_156_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1SeqExprNode.html" target="_self">SeqExprNode</a></td><td class="desc">A sequence of blocks followed by an expression </td></tr>
+<tr id="row_1_5_157_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1SeqExpr.html" target="_self">SeqExpr</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_158_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1FunctionNode.html" target="_self">FunctionNode</a></td><td class="desc">A Relax function </td></tr>
+<tr id="row_1_5_159_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1Function.html" target="_self">Function</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_160_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ExternFuncNode.html" target="_self">ExternFuncNode</a></td><td class="desc">The extern function, which can represent packed function </td></tr>
+<tr id="row_1_5_161_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ExternFunc.html" target="_self">ExternFunc</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_162_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ExprFunctor.html" target="_self">ExprFunctor</a></td><td class="desc">A dynamical functor that dispatches on in the first Expr argument. You can use this as a more powerful Visitor, since it allows you to define function signatures of Visit <a class="el" href="c [...]
+<tr id="row_1_5_163_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ExprFunctor_3_01R_07const_01Expr_01_6n_00_01Args_8_8_8_08_4.html" target="_self">ExprFunctor&lt; R(const Expr &amp;n, Args...)&gt;</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_164_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ExprVisitor.html" target="_self">ExprVisitor</a></td><td class="desc">A simple visitor wrapper around <a class="el" href="classtvm_1_1relax_1_1ExprFunctor.html" title="A dynamical functor that dispatches on in the first Expr argument. You can use this as a more  [...]
+<tr id="row_1_5_165_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ExprMutatorBase.html" target="_self">ExprMutatorBase</a></td><td class="desc">A mutator works in unnormalized form </td></tr>
+<tr id="row_1_5_166_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ExprMutator.html" target="_self">ExprMutator</a></td><td class="desc">A mutator works in normal form </td></tr>
+<tr id="row_1_5_167_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1NestedMsg.html" target="_self">NestedMsg</a></td><td class="desc">Container that stores possibly nested message with leaf message type T </td></tr>
+<tr id="row_1_5_168_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ObjectStructInfoNode.html" target="_self">ObjectStructInfoNode</a></td><td class="desc">Opaque object </td></tr>
+<tr id="row_1_5_169_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ObjectStructInfo.html" target="_self">ObjectStructInfo</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1ObjectStructInfoNode.html" title="Opaque object.">ObjectStructInfoNode</a> </td></tr>
+<tr id="row_1_5_170_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1PrimStructInfoNode.html" target="_self">PrimStructInfoNode</a></td><td class="desc">Primitive value </td></tr>
+<tr id="row_1_5_171_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1PrimStructInfo.html" target="_self">PrimStructInfo</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1PrimStructInfoNode.html" title="Primitive value.">PrimStructInfoNode</a> </td></tr>
+<tr id="row_1_5_172_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ShapeStructInfoNode.html" target="_self">ShapeStructInfoNode</a></td><td class="desc"><a class="el" href="classtvm_1_1relax_1_1StructInfo.html" title="Managed reference to StructInfoNode.">StructInfo</a> of shape value </td></tr>
+<tr id="row_1_5_173_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ShapeStructInfo.html" target="_self">ShapeStructInfo</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1ShapeStructInfoNode.html" title="StructInfo of shape value.">ShapeStructInfoNode</a> </td></tr>
+<tr id="row_1_5_174_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1TensorStructInfoNode.html" target="_self">TensorStructInfoNode</a></td><td class="desc"><a class="el" href="classtvm_1_1relax_1_1StructInfo.html" title="Managed reference to StructInfoNode.">StructInfo</a> of Tensor </td></tr>
+<tr id="row_1_5_175_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1TensorStructInfo.html" target="_self">TensorStructInfo</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1TensorStructInfoNode.html" title="StructInfo of Tensor.">TensorStructInfoNode</a> </td></tr>
+<tr id="row_1_5_176_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1TupleStructInfoNode.html" target="_self">TupleStructInfoNode</a></td><td class="desc"><a class="el" href="classtvm_1_1relax_1_1StructInfo.html" title="Managed reference to StructInfoNode.">StructInfo</a> of <a class="el" href="classtvm_1_1relax_1_1Tuple.html">Tu [...]
+<tr id="row_1_5_177_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1TupleStructInfo.html" target="_self">TupleStructInfo</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1TupleStructInfoNode.html" title="StructInfo of Tuple.">TupleStructInfoNode</a> </td></tr>
+<tr id="row_1_5_178_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1FuncStructInfoNode.html" target="_self">FuncStructInfoNode</a></td><td class="desc">Structure information about function </td></tr>
+<tr id="row_1_5_179_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1FuncStructInfo.html" target="_self">FuncStructInfo</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1FuncStructInfoNode.html" title="Structure information about function.">FuncStructInfoNode</a> </td></tr>
+<tr id="row_1_5_180_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1StructInfoFunctor.html" target="_self">StructInfoFunctor</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_181_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1StructInfoFunctor_3_01R_07const_01StructInfo_01_6n_00_01Args_8_8_8_08_4.html" target="_self">StructInfoFunctor&lt; R(const StructInfo &amp;n, Args...)&gt;</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_182_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1StructInfoVisitor.html" target="_self">StructInfoVisitor</a></td><td class="desc">A struct info visitor </td></tr>
+<tr id="row_1_5_183_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1StructInfoMutator.html" target="_self">StructInfoMutator</a></td><td class="desc"><a class="el" href="classtvm_1_1relax_1_1StructInfoMutator.html" title="StructInfoMutator that mutates struct info.">StructInfoMutator</a> that mutates struct info </td></tr>
+<tr id="row_1_5_184_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1MatchResultNode.html" target="_self">MatchResultNode</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_185_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1MatchResult.html" target="_self">MatchResult</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1MatchResultNode.html">MatchResultNode</a> </td></tr>
+<tr id="row_1_5_186_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ChoiceNode.html" target="_self">ChoiceNode</a></td><td class="desc"><a class="el" href="classtvm_1_1relax_1_1Choice.html" title="Managed reference to ChoiceNode.">Choice</a> manages a set of keys for transformation and constraint functions </td></tr>
+<tr id="row_1_5_187_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1Choice.html" target="_self">Choice</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1ChoiceNode.html" title="Choice manages a set of keys for transformation and constraint functions.">ChoiceNode</a> </td></tr>
+<tr id="row_1_5_188_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1KnobNode.html" target="_self">KnobNode</a></td><td class="desc"><a class="el" href="classtvm_1_1relax_1_1Knob.html" title="Managed reference to KnobNode.">Knob</a> manages a set of valid choices for an optimization </td></tr>
+<tr id="row_1_5_189_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1Knob.html" target="_self">Knob</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1KnobNode.html" title="Knob manages a set of valid choices for an optimization.">KnobNode</a> </td></tr>
+<tr id="row_1_5_190_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1TraceNode.html" target="_self">TraceNode</a></td><td class="desc"><a class="el" href="classtvm_1_1relax_1_1Trace.html" title="Managed reference to TraceNode.">Trace</a> manages history of optimization decisions </td></tr>
+<tr id="row_1_5_191_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1Trace.html" target="_self">Trace</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1TraceNode.html" title="Trace manages history of optimization decisions.">TraceNode</a> </td></tr>
+<tr id="row_1_5_192_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1TuningRecordNode.html" target="_self">TuningRecordNode</a></td><td class="desc">The class of tuning records </td></tr>
+<tr id="row_1_5_193_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1TuningRecord.html" target="_self">TuningRecord</a></td><td class="desc">The managed reference of <a class="el" href="classtvm_1_1relax_1_1TuningRecordNode.html" title="The class of tuning records.">TuningRecordNode</a> </td></tr>
+<tr id="row_1_5_194_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structtvm_1_1relax_1_1WorkloadEqual.html" target="_self">WorkloadEqual</a></td><td class="desc">The equality check for Workload </td></tr>
+<tr id="row_1_5_195_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DatabaseNode.html" target="_self">DatabaseNode</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_196_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1Database.html" target="_self">Database</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1DatabaseNode.html">DatabaseNode</a> </td></tr>
+<tr id="row_1_5_197_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ShapeTypeNode.html" target="_self">ShapeTypeNode</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_198_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ShapeType.html" target="_self">ShapeType</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_199_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ObjectTypeNode.html" target="_self">ObjectTypeNode</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_200_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1ObjectType.html" target="_self">ObjectType</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_201_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DynTensorTypeNode.html" target="_self">DynTensorTypeNode</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_202_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1DynTensorType.html" target="_self">DynTensorType</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1relax_1_1DynTensorTypeNode.html">DynTensorTypeNode</a> </td></tr>
+<tr id="row_1_5_203_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1PackedFuncTypeNode.html" target="_self">PackedFuncTypeNode</a></td><td class="desc"></td></tr>
+<tr id="row_1_5_204_" class="even" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1relax_1_1PackedFuncType.html" target="_self">PackedFuncType</a></td><td class="desc"></td></tr>
 <tr id="row_1_6_" class="even" style="display:none;"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_1_6_" class="arrow" onclick="toggleFolder('1_6_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacetvm_1_1relay.html" target="_self">relay</a></td><td class="desc">Relay: a high level functional IR for TVM </td></tr>
 <tr id="row_1_6_0_" class="even" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_1_6_0_" class="arrow" onclick="toggleFolder('1_6_0_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacetvm_1_1relay_1_1qnn.html" target="_self">qnn</a></td><td class="desc"></td></tr>
 <tr id="row_1_6_0_0_" class="even" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structtvm_1_1relay_1_1qnn_1_1RequantizeAttrs.html" target="_self">RequantizeAttrs</a></td><td class="desc">Attribute for requantize operator </td></tr>
diff --git a/docs/reference/api/doxygen/classes.html b/docs/reference/api/doxygen/classes.html
index ca86094eda..515cccdc2c 100644
--- a/docs/reference/api/doxygen/classes.html
+++ b/docs/reference/api/doxygen/classes.html
@@ -120,7 +120,7 @@ $(function() {
 <dd><a class="el" href="classtvm_1_1tir_1_1Ramp.html">Ramp</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)</dd><dd><a class="el" href="classtvm_1_1tir_1_1RampNode.html">RampNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)</dd><dd><a class="el" href="classtvm_1_1auto__scheduler_1_1RandomModel.html">RandomModel</a> (<a class="el" href="namespacetvm_1_1auto__scheduler.html">tvm::auto_scheduler</a>)</dd><dd><a class="el" href="classtvm_1_1auto__scheduler [...]
 <dl class="classindex odd">
 <dt class="alphachar"><a name="letter_S">S</a></dt>
-<dd><a class="el" href="classtvm_1_1relax_1_1SameShapeConstraint.html">SameShapeConstraint</a> (<a class="el" href="namespacetvm_1_1relax.html">tvm::relax</a>)</dd><dd><a class="el" href="classtvm_1_1relax_1_1SameShapeConstraintNode.html">SameShapeConstraintNode</a> (<a class="el" href="namespacetvm_1_1relax.html">tvm::relax</a>)</dd><dd><a class="el" href="classtvm_1_1te_1_1ScanOp.html">ScanOp</a> (<a class="el" href="namespacetvm_1_1te.html">tvm::te</a>)</dd><dd><a class="el" href="str [...]
+<dd><a class="el" href="classtvm_1_1relax_1_1SameShapeConstraint.html">SameShapeConstraint</a> (<a class="el" href="namespacetvm_1_1relax.html">tvm::relax</a>)</dd><dd><a class="el" href="classtvm_1_1relax_1_1SameShapeConstraintNode.html">SameShapeConstraintNode</a> (<a class="el" href="namespacetvm_1_1relax.html">tvm::relax</a>)</dd><dd><a class="el" href="classtvm_1_1te_1_1ScanOp.html">ScanOp</a> (<a class="el" href="namespacetvm_1_1te.html">tvm::te</a>)</dd><dd><a class="el" href="str [...]
 <dl class="classindex even">
 <dt class="alphachar"><a name="letter_T">T</a></dt>
 <dd><a class="el" href="structtvm_1_1relay_1_1TakeAttrs.html">TakeAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)</dd><dd><a class="el" href="structtvm_1_1relax_1_1TakeAttrs.html">TakeAttrs</a> (<a class="el" href="namespacetvm_1_1relax.html">tvm::relax</a>)</dd><dd><a class="el" href="classtvm_1_1Target.html">Target</a> (<a class="el" href="namespacetvm.html">tvm</a>)</dd><dd><a class="el" href="classtvm_1_1TargetKind.html">TargetKind</a> (<a class="el" href=" [...]
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPattern-members.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPattern-members.html
index 87bfe4e491..56e1124c4d 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPattern-members.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPattern-members.html
@@ -90,24 +90,25 @@ $(function() {
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#aef57e18f93cc317ba30efbd986a7df18">HasDtype</a>(const std::string &amp;dtype) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a38905d1b7e0ab207b658afce9e50f838">HasSameShapeAs</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a16acd19f1cda9add85d03ce7afa06ad3">HasShape</a>(const Array&lt; PrimExpr &gt; &amp;shape) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1AndPattern.html#a2ec75ee1a8be4febdc15925d178c9266">TVM_DEFINE_OBJECT_REF_METHODS</a>(AndPattern, DFPattern, AndPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1AndPattern.html">tvm::relax::AndPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">tvm::relax::DFPattern::TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a>(const StructInfo &amp;struct_info) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1AndPattern.html#a2ec75ee1a8be4febdc15925d178c9266">TVM_DEFINE_OBJECT_REF_METHODS</a>(AndPattern, DFPattern, AndPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1AndPattern.html">tvm::relax::AndPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">tvm::relax::DFPattern::TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPattern.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPattern.html
index a05a836bde..fd2ebd121f 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPattern.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPattern.html
@@ -80,13 +80,13 @@ $(function() {
 <div class="dynheader">
 Inheritance diagram for tvm::relax::AndPattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1AndPattern__inherit__graph.svg" width="219" height="823"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1AndPattern__inherit__graph.svg" width="219" height="838"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <div class="dynheader">
 Collaboration diagram for tvm::relax::AndPattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1AndPattern__coll__graph.svg" width="219" height="1112"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1AndPattern__coll__graph.svg" width="219" height="1127"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <table class="memberdecls">
@@ -116,6 +116,9 @@ Public Member Functions</h2></td></tr>
 <tr class="memitem:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1AttrPattern.html">AttrPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">HasAttr</a> (const <a class="el" href="classtvm_1_1runtime_1_1Map.html">Map</a>&lt; <a class="el" href="classtvm_1_1run [...]
 <tr class="memdesc:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating an <a class="el" href="classtvm_1_1relax_1_1AttrPattern.html" title="Managed reference to AttrPatternNode.">AttrPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">More...</a><br /></td></tr>
 <tr class="separator:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a> (const <a class="el" href="classtvm_1_1relax_1_1StructInfo.html">StructInfo</a> &amp;stru [...]
+<tr class="memdesc:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">More...</a><br /></td></tr>
+<tr class="separator:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1TypePattern.html">TypePattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a> (const <a class="el" href="classtvm_1_1Type.html">Type</a> &amp;type) const</td></tr>
 <tr class="memdesc:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1TypePattern.html" title="Managed reference to TypePatternNode.">TypePattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">More...</a><br /></td></tr>
 <tr class="separator:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPatternNode.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPatternNode.html
index d87554287e..43eec7d999 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPatternNode.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPatternNode.html
@@ -88,7 +88,7 @@ Inheritance diagram for tvm::relax::AndPatternNode:</div>
 <div class="dynheader">
 Collaboration diagram for tvm::relax::AndPatternNode:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1AndPatternNode__coll__graph.svg" width="556" height="1346"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1AndPatternNode__coll__graph.svg" width="556" height="1360"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <table class="memberdecls">
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPatternNode__coll__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPatternNode__coll__graph.svg
index e292d5641c..b01313429f 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPatternNode__coll__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPatternNode__coll__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::AndPatternNode Pages: 1 -->
-<svg width="417pt" height="1009pt"
- viewBox="0.00 0.00 417.00 1009.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1005)">
+<svg width="417pt" height="1020pt"
+ viewBox="0.00 0.00 417.00 1020.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1016)">
 <title>tvm::relax::AndPatternNode</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-1005 413,-1005 413,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-1016 413,-1016 413,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -28,93 +28,94 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1relax_1_1DFPatternNode.html" target="_top" xlink:title="Base type of all dataflow patterns.">
-<polygon fill="white" stroke="black" points="53.5,-210 53.5,-278 226.5,-278 226.5,-210 53.5,-210"/>
-<text text-anchor="middle" x="140" y="-266" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPatternNode</text>
-<polyline fill="none" stroke="black" points="53.5,-259 226.5,-259 "/>
-<text text-anchor="start" x="61.5" y="-247" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<polyline fill="none" stroke="black" points="53.5,-240 226.5,-240 "/>
-<text text-anchor="start" x="61.5" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT</text>
-<text text-anchor="start" x="61.5" y="-217" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
+<polygon fill="white" stroke="black" points="53.5,-215.5 53.5,-283.5 226.5,-283.5 226.5,-215.5 53.5,-215.5"/>
+<text text-anchor="middle" x="140" y="-271.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPatternNode</text>
+<polyline fill="none" stroke="black" points="53.5,-264.5 226.5,-264.5 "/>
+<text text-anchor="start" x="61.5" y="-252.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<polyline fill="none" stroke="black" points="53.5,-245.5 226.5,-245.5 "/>
+<text text-anchor="start" x="61.5" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT</text>
+<text text-anchor="start" x="61.5" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
 </a>
 </g>
 </g>
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M159.17,-200.45C175.26,-164.73 198.05,-114.14 213.62,-79.59"/>
-<polygon fill="none" stroke="midnightblue" points="155.94,-199.09 155.03,-209.64 162.33,-201.96 155.94,-199.09"/>
+<path fill="none" stroke="midnightblue" d="M158.8,-205.62C175.08,-168.51 198.4,-115.33 214.09,-79.55"/>
+<polygon fill="none" stroke="midnightblue" points="155.43,-204.6 154.62,-215.16 161.84,-207.41 155.43,-204.6"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1Object.html" target="_top" xlink:title="base class of all object containers.">
-<polygon fill="white" stroke="black" points="0,-387.5 0,-774.5 184,-774.5 184,-387.5 0,-387.5"/>
-<text text-anchor="middle" x="92" y="-762.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::Object</text>
-<polyline fill="none" stroke="black" points="0,-755.5 184,-755.5 "/>
-<text text-anchor="start" x="8" y="-743.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<text text-anchor="start" x="8" y="-732.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_final</text>
-<text text-anchor="start" x="8" y="-721.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_child_slots</text>
-<text text-anchor="start" x="8" y="-710.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_child_slots_can</text>
-<text text-anchor="start" x="8" y="-699.5" font-family="Helvetica,sans-Serif" font-size="10.00">_overflow</text>
-<text text-anchor="start" x="8" y="-688.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_visit</text>
-<text text-anchor="start" x="8" y="-677.5" font-family="Helvetica,sans-Serif" font-size="10.00">_attrs</text>
-<text text-anchor="start" x="8" y="-666.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_sequal</text>
-<text text-anchor="start" x="8" y="-655.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
-<text text-anchor="start" x="8" y="-644.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_shash</text>
-<text text-anchor="start" x="8" y="-633.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
-<text text-anchor="start" x="8" y="-622.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_index</text>
-<text text-anchor="start" x="8" y="-611.5" font-family="Helvetica,sans-Serif" font-size="10.00"># type_index_</text>
-<text text-anchor="start" x="8" y="-600.5" font-family="Helvetica,sans-Serif" font-size="10.00"># ref_counter_</text>
-<polyline fill="none" stroke="black" points="0,-593.5 184,-593.5 "/>
-<text text-anchor="start" x="8" y="-581.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ type_index()</text>
-<text text-anchor="start" x="8" y="-570.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetTypeKey()</text>
-<text text-anchor="start" x="8" y="-559.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetTypeKeyHash()</text>
-<text text-anchor="start" x="8" y="-548.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ IsInstance()</text>
-<text text-anchor="start" x="8" y="-537.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<polygon fill="white" stroke="black" points="0,-398.5 0,-785.5 184,-785.5 184,-398.5 0,-398.5"/>
+<text text-anchor="middle" x="92" y="-773.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::Object</text>
+<polyline fill="none" stroke="black" points="0,-766.5 184,-766.5 "/>
+<text text-anchor="start" x="8" y="-754.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<text text-anchor="start" x="8" y="-743.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_final</text>
+<text text-anchor="start" x="8" y="-732.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_child_slots</text>
+<text text-anchor="start" x="8" y="-721.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_child_slots_can</text>
+<text text-anchor="start" x="8" y="-710.5" font-family="Helvetica,sans-Serif" font-size="10.00">_overflow</text>
+<text text-anchor="start" x="8" y="-699.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_visit</text>
+<text text-anchor="start" x="8" y="-688.5" font-family="Helvetica,sans-Serif" font-size="10.00">_attrs</text>
+<text text-anchor="start" x="8" y="-677.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_sequal</text>
+<text text-anchor="start" x="8" y="-666.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
+<text text-anchor="start" x="8" y="-655.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_shash</text>
+<text text-anchor="start" x="8" y="-644.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
+<text text-anchor="start" x="8" y="-633.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_index</text>
+<text text-anchor="start" x="8" y="-622.5" font-family="Helvetica,sans-Serif" font-size="10.00"># type_index_</text>
+<text text-anchor="start" x="8" y="-611.5" font-family="Helvetica,sans-Serif" font-size="10.00"># ref_counter_</text>
+<polyline fill="none" stroke="black" points="0,-604.5 184,-604.5 "/>
+<text text-anchor="start" x="8" y="-592.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ type_index()</text>
+<text text-anchor="start" x="8" y="-581.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetTypeKey()</text>
+<text text-anchor="start" x="8" y="-570.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetTypeKeyHash()</text>
+<text text-anchor="start" x="8" y="-559.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ IsInstance()</text>
+<text text-anchor="start" x="8" y="-548.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="8" y="-537.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Object()</text>
 <text text-anchor="start" x="8" y="-526.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Object()</text>
 <text text-anchor="start" x="8" y="-515.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Object()</text>
-<text text-anchor="start" x="8" y="-504.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Object()</text>
+<text text-anchor="start" x="8" y="-504.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
 <text text-anchor="start" x="8" y="-493.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
-<text text-anchor="start" x="8" y="-482.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
-<text text-anchor="start" x="8" y="-471.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeIndex2Key()</text>
-<text text-anchor="start" x="8" y="-460.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeIndex2KeyHash()</text>
-<text text-anchor="start" x="8" y="-449.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeKey2Index()</text>
-<text text-anchor="start" x="8" y="-438.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _GetOrAllocRuntimeTypeIndex()</text>
-<text text-anchor="start" x="8" y="-427.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ RuntimeTypeIndex()</text>
-<text text-anchor="start" x="8" y="-416.5" font-family="Helvetica,sans-Serif" font-size="10.00"># IncRef()</text>
-<text text-anchor="start" x="8" y="-405.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DecRef()</text>
-<text text-anchor="start" x="8" y="-394.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetOrAllocRuntimeTypeIndex()</text>
+<text text-anchor="start" x="8" y="-482.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeIndex2Key()</text>
+<text text-anchor="start" x="8" y="-471.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeIndex2KeyHash()</text>
+<text text-anchor="start" x="8" y="-460.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeKey2Index()</text>
+<text text-anchor="start" x="8" y="-449.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _GetOrAllocRuntimeTypeIndex()</text>
+<text text-anchor="start" x="8" y="-438.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ RuntimeTypeIndex()</text>
+<text text-anchor="start" x="8" y="-427.5" font-family="Helvetica,sans-Serif" font-size="10.00"># IncRef()</text>
+<text text-anchor="start" x="8" y="-416.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DecRef()</text>
+<text text-anchor="start" x="8" y="-405.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetOrAllocRuntimeTypeIndex()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M121.12,-376.74C126.61,-338.42 131.73,-302.72 135.25,-278.18"/>
-<polygon fill="none" stroke="midnightblue" points="117.6,-376.67 119.64,-387.07 124.53,-377.67 117.6,-376.67"/>
+<path fill="none" stroke="midnightblue" d="M120.58,-388.26C126.31,-347.61 131.68,-309.52 135.31,-283.75"/>
+<polygon fill="none" stroke="midnightblue" points="117.09,-387.97 119.16,-398.36 124.02,-388.95 117.09,-387.97"/>
 </g>
 <!-- Node3&#45;&gt;Node3 -->
 <g id="edge3" class="edge">
 <title>Node3&#45;&gt;Node3</title>
-<path fill="none" stroke="#404040" d="M184.28,-614.92C195.02,-608.66 202,-597.36 202,-581 202,-570.01 198.85,-561.3 193.52,-554.87"/>
-<polygon fill="none" stroke="#404040" points="193.46,-554.81 186.29,-554 184.28,-547.08 191.45,-547.89 193.46,-554.81"/>
-<text text-anchor="middle" x="228" y="-578.5" font-family="Helvetica,sans-Serif" font-size="10.00"> #deleter_</text>
+<path fill="none" stroke="#404040" d="M184.28,-625.92C195.02,-619.66 202,-608.36 202,-592 202,-581.01 198.85,-572.3 193.52,-565.87"/>
+<polygon fill="none" stroke="#404040" points="193.46,-565.81 186.29,-565 184.28,-558.08 191.45,-558.89 193.46,-565.81"/>
+<text text-anchor="middle" x="228" y="-589.5" font-family="Helvetica,sans-Serif" font-size="10.00"> #deleter_</text>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node">
 <title>Node4</title>
 <g id="a_node4"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="253,-138.5 253,-349.5 409,-349.5 409,-138.5 253,-138.5"/>
-<text text-anchor="middle" x="331" y="-337.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="253,-330.5 409,-330.5 "/>
-<text text-anchor="middle" x="331" y="-318.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="253,-311.5 409,-311.5 "/>
+<polygon fill="white" stroke="black" points="253,-138.5 253,-360.5 409,-360.5 409,-138.5 253,-138.5"/>
+<text text-anchor="middle" x="331" y="-348.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="253,-341.5 409,-341.5 "/>
+<text text-anchor="middle" x="331" y="-329.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="253,-322.5 409,-322.5 "/>
+<text text-anchor="start" x="261" y="-310.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="261" y="-299.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="261" y="-288.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="261" y="-277.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="261" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="261" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="261" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="261" y="-288.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="261" y="-277.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="261" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="261" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="261" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="261" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="261" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="261" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -130,76 +131,76 @@
 <!-- Node4&#45;&gt;Node1 -->
 <g id="edge4" class="edge">
 <title>Node4&#45;&gt;Node1</title>
-<path fill="none" stroke="#404040" d="M279.24,-138.45C270.96,-121.73 262.75,-105.13 255.51,-90.51"/>
-<polygon fill="none" stroke="#404040" points="255.5,-90.49 249.25,-86.89 250.18,-79.73 256.42,-83.34 255.5,-90.49"/>
-<text text-anchor="middle" x="284.5" y="-112" font-family="Helvetica,sans-Serif" font-size="10.00"> +left</text>
-<text text-anchor="middle" x="284.5" y="-101" font-family="Helvetica,sans-Serif" font-size="10.00">+right</text>
+<path fill="none" stroke="#404040" d="M277.93,-138.37C269.88,-121.69 261.95,-105.22 254.96,-90.71"/>
+<polygon fill="none" stroke="#404040" points="254.78,-90.34 248.57,-86.67 249.57,-79.53 255.78,-83.2 254.78,-90.34"/>
+<text text-anchor="middle" x="281.5" y="-112" font-family="Helvetica,sans-Serif" font-size="10.00"> +left</text>
+<text text-anchor="middle" x="281.5" y="-101" font-family="Helvetica,sans-Serif" font-size="10.00">+right</text>
 </g>
 <!-- Node5 -->
 <g id="node5" class="node">
 <title>Node5</title>
 <g id="a_node5"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="272,-464.5 272,-697.5 406,-697.5 406,-464.5 272,-464.5"/>
-<text text-anchor="middle" x="339" y="-685.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="272,-678.5 406,-678.5 "/>
-<text text-anchor="start" x="280" y="-666.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<polyline fill="none" stroke="black" points="272,-659.5 406,-659.5 "/>
+<polygon fill="white" stroke="black" points="272,-475.5 272,-708.5 406,-708.5 406,-475.5 272,-475.5"/>
+<text text-anchor="middle" x="339" y="-696.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="272,-689.5 406,-689.5 "/>
+<text text-anchor="start" x="280" y="-677.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<polyline fill="none" stroke="black" points="272,-670.5 406,-670.5 "/>
+<text text-anchor="start" x="280" y="-658.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="280" y="-647.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="280" y="-636.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="280" y="-625.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="280" y="-614.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="280" y="-603.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="280" y="-592.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="280" y="-581.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="280" y="-570.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="280" y="-559.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="280" y="-548.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="280" y="-537.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="280" y="-636.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="280" y="-625.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="280" y="-614.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="280" y="-603.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="280" y="-592.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="280" y="-581.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="280" y="-570.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="280" y="-559.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="280" y="-548.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="280" y="-537.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="280" y="-526.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="280" y="-515.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="280" y="-504.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="280" y="-493.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="280" y="-482.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="280" y="-471.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="280" y="-515.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="280" y="-504.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="280" y="-493.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="280" y="-482.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node5&#45;&gt;Node4 -->
 <g id="edge5" class="edge">
 <title>Node5&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M335.99,-454.12C335.17,-419.65 334.29,-382.67 333.5,-349.54"/>
-<polygon fill="none" stroke="midnightblue" points="332.5,-454.33 336.24,-464.24 339.5,-454.16 332.5,-454.33"/>
+<path fill="none" stroke="midnightblue" d="M336.04,-465.18C335.24,-430.92 334.37,-394.08 333.59,-360.76"/>
+<polygon fill="none" stroke="midnightblue" points="332.55,-465.33 336.28,-475.25 339.54,-465.17 332.55,-465.33"/>
 </g>
 <!-- Node6 -->
 <g id="node6" class="node">
 <title>Node6</title>
 <g id="a_node6"><a xlink:href="classtvm_1_1runtime_1_1ObjectPtr.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="black" points="269,-822.5 269,-1000.5 409,-1000.5 409,-822.5 269,-822.5"/>
-<text text-anchor="start" x="277" y="-988.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
-<text text-anchor="middle" x="339" y="-977.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
-<polyline fill="none" stroke="black" points="269,-970.5 409,-970.5 "/>
-<text text-anchor="middle" x="339" y="-958.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="269,-951.5 409,-951.5 "/>
+<polygon fill="white" stroke="black" points="269,-833.5 269,-1011.5 409,-1011.5 409,-833.5 269,-833.5"/>
+<text text-anchor="start" x="277" y="-999.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
+<text text-anchor="middle" x="339" y="-988.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
+<polyline fill="none" stroke="black" points="269,-981.5 409,-981.5 "/>
+<text text-anchor="middle" x="339" y="-969.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="269,-962.5 409,-962.5 "/>
+<text text-anchor="start" x="277" y="-950.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="277" y="-939.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="277" y="-928.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="277" y="-917.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="277" y="-906.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="277" y="-895.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="277" y="-884.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="277" y="-873.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
-<text text-anchor="start" x="277" y="-862.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
-<text text-anchor="start" x="277" y="-851.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="277" y="-840.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="277" y="-829.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
+<text text-anchor="start" x="277" y="-884.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
+<text text-anchor="start" x="277" y="-873.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
+<text text-anchor="start" x="277" y="-862.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="277" y="-851.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="277" y="-840.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
 </a>
 </g>
 </g>
 <!-- Node6&#45;&gt;Node5 -->
 <g id="edge6" class="edge">
 <title>Node6&#45;&gt;Node5</title>
-<path fill="none" stroke="#404040" d="M339,-822.47C339,-787.91 339,-747.57 339,-709.92"/>
-<polygon fill="none" stroke="#404040" points="339,-709.8 335,-703.8 339,-697.8 343,-703.8 339,-709.8"/>
-<text text-anchor="middle" x="358.5" y="-796" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
+<path fill="none" stroke="#404040" d="M339,-833.47C339,-798.91 339,-758.57 339,-720.92"/>
+<polygon fill="none" stroke="#404040" points="339,-720.8 335,-714.8 339,-708.8 343,-714.8 339,-720.8"/>
+<text text-anchor="middle" x="358.5" y="-807" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPattern__coll__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPattern__coll__graph.svg
index 3aa2be49a5..3402d000b1 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPattern__coll__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPattern__coll__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::AndPattern Pages: 1 -->
-<svg width="164pt" height="834pt"
- viewBox="0.00 0.00 164.00 834.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 830)">
+<svg width="164pt" height="845pt"
+ viewBox="0.00 0.00 164.00 845.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 841)">
 <title>tvm::relax::AndPattern</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-830 160,-830 160,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-841 160,-841 160,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -28,17 +28,18 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="0,-117.5 0,-328.5 156,-328.5 156,-117.5 0,-117.5"/>
-<text text-anchor="middle" x="78" y="-316.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="0,-309.5 156,-309.5 "/>
-<text text-anchor="middle" x="78" y="-297.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="0,-290.5 156,-290.5 "/>
+<polygon fill="white" stroke="black" points="0,-117.5 0,-339.5 156,-339.5 156,-117.5 0,-117.5"/>
+<text text-anchor="middle" x="78" y="-327.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="0,-320.5 156,-320.5 "/>
+<text text-anchor="middle" x="78" y="-308.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-301.5 156,-301.5 "/>
+<text text-anchor="start" x="8" y="-289.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="8" y="-278.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-267.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-256.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="8" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="8" y="-234.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="8" y="-223.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-267.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="8" y="-256.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="8" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="8" y="-234.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-223.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="8" y="-212.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="8" y="-201.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="8" y="-190.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -54,74 +55,74 @@
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M78,-107.49C78,-97.59 78,-88.11 78,-79.56"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-107.5 78,-117.5 81.5,-107.5 74.5,-107.5"/>
+<path fill="none" stroke="midnightblue" d="M78,-107.14C78,-97.43 78,-88.15 78,-79.78"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-107.39 78,-117.39 81.5,-107.39 74.5,-107.39"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="11,-366.5 11,-599.5 145,-599.5 145,-366.5 11,-366.5"/>
-<text text-anchor="middle" x="78" y="-587.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="11,-580.5 145,-580.5 "/>
-<text text-anchor="start" x="19" y="-568.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<polyline fill="none" stroke="black" points="11,-561.5 145,-561.5 "/>
+<polygon fill="white" stroke="black" points="11,-377.5 11,-610.5 145,-610.5 145,-377.5 11,-377.5"/>
+<text text-anchor="middle" x="78" y="-598.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="11,-591.5 145,-591.5 "/>
+<text text-anchor="start" x="19" y="-579.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<polyline fill="none" stroke="black" points="11,-572.5 145,-572.5 "/>
+<text text-anchor="start" x="19" y="-560.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="19" y="-549.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-538.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-527.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="19" y="-516.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="19" y="-505.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="19" y="-494.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="19" y="-483.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="19" y="-472.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="19" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="19" y="-450.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="19" y="-439.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-538.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="19" y="-527.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="19" y="-516.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="19" y="-505.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="19" y="-494.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="19" y="-483.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="19" y="-472.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="19" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="19" y="-450.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-439.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="19" y="-428.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-417.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-406.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="19" y="-395.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="19" y="-384.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="19" y="-373.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="19" y="-417.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="19" y="-406.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="19" y="-395.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="19" y="-384.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M78,-355.96C78,-346.87 78,-337.76 78,-328.81"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-356.21 78,-366.21 81.5,-356.21 74.5,-356.21"/>
+<path fill="none" stroke="midnightblue" d="M78,-367.36C78,-358.07 78,-348.73 78,-339.54"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-367.43 78,-377.43 81.5,-367.43 74.5,-367.43"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node">
 <title>Node4</title>
 <g id="a_node4"><a xlink:href="classtvm_1_1runtime_1_1ObjectPtr.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="black" points="8,-647.5 8,-825.5 148,-825.5 148,-647.5 8,-647.5"/>
-<text text-anchor="start" x="16" y="-813.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
-<text text-anchor="middle" x="78" y="-802.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
-<polyline fill="none" stroke="black" points="8,-795.5 148,-795.5 "/>
-<text text-anchor="middle" x="78" y="-783.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="8,-776.5 148,-776.5 "/>
+<polygon fill="white" stroke="black" points="8,-658.5 8,-836.5 148,-836.5 148,-658.5 8,-658.5"/>
+<text text-anchor="start" x="16" y="-824.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
+<text text-anchor="middle" x="78" y="-813.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
+<polyline fill="none" stroke="black" points="8,-806.5 148,-806.5 "/>
+<text text-anchor="middle" x="78" y="-794.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="8,-787.5 148,-787.5 "/>
+<text text-anchor="start" x="16" y="-775.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-764.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-753.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-742.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-731.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-720.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-709.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-698.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-687.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
-<text text-anchor="start" x="16" y="-676.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="16" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="16" y="-654.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
+<text text-anchor="start" x="16" y="-709.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
+<text text-anchor="start" x="16" y="-698.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
+<text text-anchor="start" x="16" y="-687.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="16" y="-676.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="16" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
 </a>
 </g>
 </g>
 <!-- Node4&#45;&gt;Node3 -->
 <g id="edge3" class="edge">
 <title>Node4&#45;&gt;Node3</title>
-<path fill="none" stroke="#404040" d="M78,-647.18C78,-635.84 78,-624.05 78,-612.23"/>
-<polygon fill="none" stroke="#404040" points="78,-611.91 74,-605.91 78,-599.91 82,-605.91 78,-611.91"/>
-<text text-anchor="middle" x="97.5" y="-621" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
+<path fill="none" stroke="#404040" d="M78,-658.18C78,-646.84 78,-635.05 78,-623.23"/>
+<polygon fill="none" stroke="#404040" points="78,-622.91 74,-616.91 78,-610.91 82,-616.91 78,-622.91"/>
+<text text-anchor="middle" x="97.5" y="-632" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPattern__inherit__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPattern__inherit__graph.svg
index e89974b568..74762a15e4 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPattern__inherit__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AndPattern__inherit__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::AndPattern Pages: 1 -->
-<svg width="164pt" height="617pt"
- viewBox="0.00 0.00 164.00 617.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 613)">
+<svg width="164pt" height="628pt"
+ viewBox="0.00 0.00 164.00 628.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 624)">
 <title>tvm::relax::AndPattern</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-613 160,-613 160,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-624 160,-624 160,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -28,17 +28,18 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="0,-116.5 0,-327.5 156,-327.5 156,-116.5 0,-116.5"/>
-<text text-anchor="middle" x="78" y="-315.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="0,-308.5 156,-308.5 "/>
-<text text-anchor="middle" x="78" y="-296.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="0,-289.5 156,-289.5 "/>
+<polygon fill="white" stroke="black" points="0,-116.5 0,-338.5 156,-338.5 156,-116.5 0,-116.5"/>
+<text text-anchor="middle" x="78" y="-326.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="0,-319.5 156,-319.5 "/>
+<text text-anchor="middle" x="78" y="-307.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-300.5 156,-300.5 "/>
+<text text-anchor="start" x="8" y="-288.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="8" y="-277.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="8" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="8" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="8" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="8" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="8" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="8" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="8" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="8" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="8" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -54,44 +55,44 @@
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M78,-106.05C78,-96.73 78,-87.8 78,-79.7"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-106.29 78,-116.29 81.5,-106.29 74.5,-106.29"/>
+<path fill="none" stroke="midnightblue" d="M78,-106.43C78,-96.94 78,-87.86 78,-79.66"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-106.45 78,-116.45 81.5,-106.45 74.5,-106.45"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="11,-364.5 11,-608.5 145,-608.5 145,-364.5 11,-364.5"/>
-<text text-anchor="middle" x="78" y="-596.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="11,-589.5 145,-589.5 "/>
-<text text-anchor="start" x="19" y="-577.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<text text-anchor="start" x="19" y="-566.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
-<polyline fill="none" stroke="black" points="11,-559.5 145,-559.5 "/>
+<polygon fill="white" stroke="black" points="11,-375.5 11,-619.5 145,-619.5 145,-375.5 11,-375.5"/>
+<text text-anchor="middle" x="78" y="-607.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="11,-600.5 145,-600.5 "/>
+<text text-anchor="start" x="19" y="-588.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<text text-anchor="start" x="19" y="-577.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
+<polyline fill="none" stroke="black" points="11,-570.5 145,-570.5 "/>
+<text text-anchor="start" x="19" y="-558.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="19" y="-547.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="19" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="19" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="19" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="19" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="19" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="19" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="19" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="19" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="19" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="19" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="19" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="19" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="19" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="19" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="19" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="19" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="19" y="-426.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="19" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="19" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="19" y="-371.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="19" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="19" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="19" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="19" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M78,-354.19C78,-345.29 78,-336.38 78,-327.64"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-354.24 78,-364.24 81.5,-354.24 74.5,-354.24"/>
+<path fill="none" stroke="midnightblue" d="M78,-365.4C78,-356.5 78,-347.57 78,-338.79"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-365.44 78,-375.44 81.5,-365.44 74.5,-365.44"/>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPattern-members.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPattern-members.html
index 220ed655b2..2960ce1c3a 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPattern-members.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPattern-members.html
@@ -90,24 +90,25 @@ $(function() {
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#aef57e18f93cc317ba30efbd986a7df18">HasDtype</a>(const std::string &amp;dtype) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a38905d1b7e0ab207b658afce9e50f838">HasSameShapeAs</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a16acd19f1cda9add85d03ce7afa06ad3">HasShape</a>(const Array&lt; PrimExpr &gt; &amp;shape) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1AttrPattern.html#ab5536a28d536bbaa3e859c59244e904a">TVM_DEFINE_OBJECT_REF_METHODS</a>(AttrPattern, DFPattern, AttrPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1AttrPattern.html">tvm::relax::AttrPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">tvm::relax::DFPattern::TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a>(const StructInfo &amp;struct_info) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1AttrPattern.html#ab5536a28d536bbaa3e859c59244e904a">TVM_DEFINE_OBJECT_REF_METHODS</a>(AttrPattern, DFPattern, AttrPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1AttrPattern.html">tvm::relax::AttrPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">tvm::relax::DFPattern::TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPattern.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPattern.html
index ffafdb54b4..be3ed5d7d0 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPattern.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPattern.html
@@ -80,13 +80,13 @@ $(function() {
 <div class="dynheader">
 Inheritance diagram for tvm::relax::AttrPattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1AttrPattern__inherit__graph.svg" width="219" height="823"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1AttrPattern__inherit__graph.svg" width="219" height="838"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <div class="dynheader">
 Collaboration diagram for tvm::relax::AttrPattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1AttrPattern__coll__graph.svg" width="219" height="1112"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1AttrPattern__coll__graph.svg" width="219" height="1127"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <table class="memberdecls">
@@ -116,6 +116,9 @@ Public Member Functions</h2></td></tr>
 <tr class="memitem:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1AttrPattern.html">AttrPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">HasAttr</a> (const <a class="el" href="classtvm_1_1runtime_1_1Map.html">Map</a>&lt; <a class="el" href="classtvm_1_1run [...]
 <tr class="memdesc:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating an <a class="el" href="classtvm_1_1relax_1_1AttrPattern.html" title="Managed reference to AttrPatternNode.">AttrPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">More...</a><br /></td></tr>
 <tr class="separator:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a> (const <a class="el" href="classtvm_1_1relax_1_1StructInfo.html">StructInfo</a> &amp;stru [...]
+<tr class="memdesc:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">More...</a><br /></td></tr>
+<tr class="separator:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1TypePattern.html">TypePattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a> (const <a class="el" href="classtvm_1_1Type.html">Type</a> &amp;type) const</td></tr>
 <tr class="memdesc:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1TypePattern.html" title="Managed reference to TypePatternNode.">TypePattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">More...</a><br /></td></tr>
 <tr class="separator:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPatternNode.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPatternNode.html
index 89d5f46144..da1d32cff7 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPatternNode.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPatternNode.html
@@ -88,7 +88,7 @@ Inheritance diagram for tvm::relax::AttrPatternNode:</div>
 <div class="dynheader">
 Collaboration diagram for tvm::relax::AttrPatternNode:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1AttrPatternNode__coll__graph.svg" width="632" height="1871"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1AttrPatternNode__coll__graph.svg" width="632" height="1886"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <table class="memberdecls">
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPatternNode__coll__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPatternNode__coll__graph.svg
index a26fe37844..5d4e1b43f1 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPatternNode__coll__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPatternNode__coll__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::AttrPatternNode Pages: 1 -->
-<svg width="474pt" height="1403pt"
- viewBox="0.00 0.00 474.00 1403.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1399)">
+<svg width="474pt" height="1414pt"
+ viewBox="0.00 0.00 474.00 1414.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1410)">
 <title>tvm::relax::AttrPatternNode</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-1399 470,-1399 470,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-1410 470,-1410 470,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -48,73 +48,74 @@
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1Object.html" target="_top" xlink:title="base class of all object containers.">
-<polygon fill="white" stroke="black" points="0,-510.5 0,-897.5 184,-897.5 184,-510.5 0,-510.5"/>
-<text text-anchor="middle" x="92" y="-885.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::Object</text>
-<polyline fill="none" stroke="black" points="0,-878.5 184,-878.5 "/>
-<text text-anchor="start" x="8" y="-866.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<text text-anchor="start" x="8" y="-855.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_final</text>
-<text text-anchor="start" x="8" y="-844.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_child_slots</text>
-<text text-anchor="start" x="8" y="-833.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_child_slots_can</text>
-<text text-anchor="start" x="8" y="-822.5" font-family="Helvetica,sans-Serif" font-size="10.00">_overflow</text>
-<text text-anchor="start" x="8" y="-811.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_visit</text>
-<text text-anchor="start" x="8" y="-800.5" font-family="Helvetica,sans-Serif" font-size="10.00">_attrs</text>
-<text text-anchor="start" x="8" y="-789.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_sequal</text>
-<text text-anchor="start" x="8" y="-778.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
-<text text-anchor="start" x="8" y="-767.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_shash</text>
-<text text-anchor="start" x="8" y="-756.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
-<text text-anchor="start" x="8" y="-745.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_index</text>
-<text text-anchor="start" x="8" y="-734.5" font-family="Helvetica,sans-Serif" font-size="10.00"># type_index_</text>
-<text text-anchor="start" x="8" y="-723.5" font-family="Helvetica,sans-Serif" font-size="10.00"># ref_counter_</text>
-<polyline fill="none" stroke="black" points="0,-716.5 184,-716.5 "/>
-<text text-anchor="start" x="8" y="-704.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ type_index()</text>
-<text text-anchor="start" x="8" y="-693.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetTypeKey()</text>
-<text text-anchor="start" x="8" y="-682.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetTypeKeyHash()</text>
-<text text-anchor="start" x="8" y="-671.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ IsInstance()</text>
-<text text-anchor="start" x="8" y="-660.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<polygon fill="white" stroke="black" points="0,-521.5 0,-908.5 184,-908.5 184,-521.5 0,-521.5"/>
+<text text-anchor="middle" x="92" y="-896.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::Object</text>
+<polyline fill="none" stroke="black" points="0,-889.5 184,-889.5 "/>
+<text text-anchor="start" x="8" y="-877.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<text text-anchor="start" x="8" y="-866.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_final</text>
+<text text-anchor="start" x="8" y="-855.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_child_slots</text>
+<text text-anchor="start" x="8" y="-844.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_child_slots_can</text>
+<text text-anchor="start" x="8" y="-833.5" font-family="Helvetica,sans-Serif" font-size="10.00">_overflow</text>
+<text text-anchor="start" x="8" y="-822.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_visit</text>
+<text text-anchor="start" x="8" y="-811.5" font-family="Helvetica,sans-Serif" font-size="10.00">_attrs</text>
+<text text-anchor="start" x="8" y="-800.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_sequal</text>
+<text text-anchor="start" x="8" y="-789.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
+<text text-anchor="start" x="8" y="-778.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_shash</text>
+<text text-anchor="start" x="8" y="-767.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
+<text text-anchor="start" x="8" y="-756.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_index</text>
+<text text-anchor="start" x="8" y="-745.5" font-family="Helvetica,sans-Serif" font-size="10.00"># type_index_</text>
+<text text-anchor="start" x="8" y="-734.5" font-family="Helvetica,sans-Serif" font-size="10.00"># ref_counter_</text>
+<polyline fill="none" stroke="black" points="0,-727.5 184,-727.5 "/>
+<text text-anchor="start" x="8" y="-715.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ type_index()</text>
+<text text-anchor="start" x="8" y="-704.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetTypeKey()</text>
+<text text-anchor="start" x="8" y="-693.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetTypeKeyHash()</text>
+<text text-anchor="start" x="8" y="-682.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ IsInstance()</text>
+<text text-anchor="start" x="8" y="-671.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="8" y="-660.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Object()</text>
 <text text-anchor="start" x="8" y="-649.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Object()</text>
 <text text-anchor="start" x="8" y="-638.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Object()</text>
-<text text-anchor="start" x="8" y="-627.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Object()</text>
+<text text-anchor="start" x="8" y="-627.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
 <text text-anchor="start" x="8" y="-616.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
-<text text-anchor="start" x="8" y="-605.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
-<text text-anchor="start" x="8" y="-594.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeIndex2Key()</text>
-<text text-anchor="start" x="8" y="-583.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeIndex2KeyHash()</text>
-<text text-anchor="start" x="8" y="-572.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeKey2Index()</text>
-<text text-anchor="start" x="8" y="-561.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _GetOrAllocRuntimeTypeIndex()</text>
-<text text-anchor="start" x="8" y="-550.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ RuntimeTypeIndex()</text>
-<text text-anchor="start" x="8" y="-539.5" font-family="Helvetica,sans-Serif" font-size="10.00"># IncRef()</text>
-<text text-anchor="start" x="8" y="-528.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DecRef()</text>
-<text text-anchor="start" x="8" y="-517.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetOrAllocRuntimeTypeIndex()</text>
+<text text-anchor="start" x="8" y="-605.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeIndex2Key()</text>
+<text text-anchor="start" x="8" y="-594.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeIndex2KeyHash()</text>
+<text text-anchor="start" x="8" y="-583.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeKey2Index()</text>
+<text text-anchor="start" x="8" y="-572.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _GetOrAllocRuntimeTypeIndex()</text>
+<text text-anchor="start" x="8" y="-561.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ RuntimeTypeIndex()</text>
+<text text-anchor="start" x="8" y="-550.5" font-family="Helvetica,sans-Serif" font-size="10.00"># IncRef()</text>
+<text text-anchor="start" x="8" y="-539.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DecRef()</text>
+<text text-anchor="start" x="8" y="-528.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetOrAllocRuntimeTypeIndex()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M101.19,-500.23C105.83,-397.89 110.99,-284.01 113.48,-228.94"/>
-<polygon fill="none" stroke="midnightblue" points="97.68,-500.26 100.73,-510.41 104.68,-500.58 97.68,-500.26"/>
+<path fill="none" stroke="midnightblue" d="M101,-511.07C105.71,-404.93 111.01,-285.56 113.52,-228.86"/>
+<polygon fill="none" stroke="midnightblue" points="97.49,-511.15 100.55,-521.3 104.49,-511.46 97.49,-511.15"/>
 </g>
 <!-- Node3&#45;&gt;Node3 -->
 <g id="edge3" class="edge">
 <title>Node3&#45;&gt;Node3</title>
-<path fill="none" stroke="#404040" d="M184.28,-737.92C195.02,-731.66 202,-720.36 202,-704 202,-693.01 198.85,-684.3 193.52,-677.87"/>
-<polygon fill="none" stroke="#404040" points="193.46,-677.81 186.29,-677 184.28,-670.08 191.45,-670.89 193.46,-677.81"/>
-<text text-anchor="middle" x="228" y="-701.5" font-family="Helvetica,sans-Serif" font-size="10.00"> #deleter_</text>
+<path fill="none" stroke="#404040" d="M184.28,-748.92C195.02,-742.66 202,-731.36 202,-715 202,-704.01 198.85,-695.3 193.52,-688.87"/>
+<polygon fill="none" stroke="#404040" points="193.46,-688.81 186.29,-688 184.28,-681.08 191.45,-681.89 193.46,-688.81"/>
+<text text-anchor="middle" x="228" y="-712.5" font-family="Helvetica,sans-Serif" font-size="10.00"> #deleter_</text>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node">
 <title>Node4</title>
 <g id="a_node4"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="185,-280.5 185,-491.5 341,-491.5 341,-280.5 185,-280.5"/>
-<text text-anchor="middle" x="263" y="-479.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="185,-472.5 341,-472.5 "/>
-<text text-anchor="middle" x="263" y="-460.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="185,-453.5 341,-453.5 "/>
+<polygon fill="white" stroke="black" points="185,-280.5 185,-502.5 341,-502.5 341,-280.5 185,-280.5"/>
+<text text-anchor="middle" x="263" y="-490.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="185,-483.5 341,-483.5 "/>
+<text text-anchor="middle" x="263" y="-471.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="185,-464.5 341,-464.5 "/>
+<text text-anchor="start" x="193" y="-452.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="193" y="-441.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="193" y="-430.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="193" y="-419.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="193" y="-408.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="193" y="-397.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="193" y="-386.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="193" y="-430.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="193" y="-419.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="193" y="-408.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="193" y="-397.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="193" y="-386.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="193" y="-375.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="193" y="-364.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="193" y="-353.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -130,95 +131,95 @@
 <!-- Node4&#45;&gt;Node1 -->
 <g id="edge4" class="edge">
 <title>Node4&#45;&gt;Node1</title>
-<path fill="none" stroke="#404040" d="M255.11,-280.34C254.71,-274.13 254.34,-267.99 254,-262 250.68,-203.65 248.13,-136.57 246.6,-91.76"/>
-<polygon fill="none" stroke="#404040" points="246.6,-91.74 242.4,-85.87 246.2,-79.74 250.4,-85.61 246.6,-91.74"/>
+<path fill="none" stroke="#404040" d="M255.08,-280.46C254.7,-274.22 254.33,-268.03 254,-262 250.77,-203.65 248.2,-136.57 246.65,-91.76"/>
+<polygon fill="none" stroke="#404040" points="246.64,-91.73 242.44,-85.87 246.23,-79.74 250.44,-85.6 246.64,-91.73"/>
 <text text-anchor="middle" x="277.5" y="-192" font-family="Helvetica,sans-Serif" font-size="10.00"> +pattern</text>
 </g>
 <!-- Node5 -->
 <g id="node5" class="node">
 <title>Node5</title>
 <g id="a_node5"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="227,-935.5 227,-1168.5 361,-1168.5 361,-935.5 227,-935.5"/>
-<text text-anchor="middle" x="294" y="-1156.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="227,-1149.5 361,-1149.5 "/>
-<text text-anchor="start" x="235" y="-1137.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<polyline fill="none" stroke="black" points="227,-1130.5 361,-1130.5 "/>
+<polygon fill="white" stroke="black" points="227,-946.5 227,-1179.5 361,-1179.5 361,-946.5 227,-946.5"/>
+<text text-anchor="middle" x="294" y="-1167.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="227,-1160.5 361,-1160.5 "/>
+<text text-anchor="start" x="235" y="-1148.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<polyline fill="none" stroke="black" points="227,-1141.5 361,-1141.5 "/>
+<text text-anchor="start" x="235" y="-1129.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="235" y="-1118.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="235" y="-1107.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="235" y="-1096.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="235" y="-1085.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="235" y="-1074.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="235" y="-1063.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="235" y="-1052.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="235" y="-1041.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="235" y="-1030.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="235" y="-1019.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="235" y="-1008.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="235" y="-1107.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="235" y="-1096.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="235" y="-1085.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="235" y="-1074.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="235" y="-1063.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="235" y="-1052.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="235" y="-1041.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="235" y="-1030.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="235" y="-1019.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="235" y="-1008.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="235" y="-997.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="235" y="-986.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="235" y="-975.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="235" y="-964.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="235" y="-953.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="235" y="-942.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="235" y="-986.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="235" y="-975.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="235" y="-964.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="235" y="-953.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node5&#45;&gt;Node4 -->
 <g id="edge5" class="edge">
 <title>Node5&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M288.13,-925.29C282.27,-799.74 273.36,-609 267.88,-491.5"/>
-<polygon fill="none" stroke="midnightblue" points="284.64,-925.51 288.6,-935.34 291.63,-925.19 284.64,-925.51"/>
+<path fill="none" stroke="midnightblue" d="M288.17,-936.15C282.39,-811.3 273.62,-621.88 268.11,-502.77"/>
+<polygon fill="none" stroke="midnightblue" points="284.68,-936.32 288.64,-946.15 291.67,-936 284.68,-936.32"/>
 </g>
 <!-- Node8 -->
 <g id="node8" class="node">
 <title>Node8</title>
 <g id="a_node8"><a xlink:href="classtvm_1_1Attrs.html" target="_top" xlink:title="Managed reference to BaseAttrsNode.">
-<polygon fill="white" stroke="black" points="310,-670 310,-738 466,-738 466,-670 310,-670"/>
-<text text-anchor="middle" x="388" y="-726" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Attrs</text>
-<polyline fill="none" stroke="black" points="310,-719 466,-719 "/>
-<text text-anchor="middle" x="388" y="-707" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="310,-700 466,-700 "/>
-<text text-anchor="start" x="318" y="-688" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="318" y="-677" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="310,-681 310,-749 466,-749 466,-681 310,-681"/>
+<text text-anchor="middle" x="388" y="-737" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Attrs</text>
+<polyline fill="none" stroke="black" points="310,-730 466,-730 "/>
+<text text-anchor="middle" x="388" y="-718" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="310,-711 466,-711 "/>
+<text text-anchor="start" x="318" y="-699" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="318" y="-688" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node5&#45;&gt;Node8 -->
 <g id="edge9" class="edge">
 <title>Node5&#45;&gt;Node8</title>
-<path fill="none" stroke="midnightblue" d="M328.1,-925.5C346.31,-858.46 367.32,-781.12 378.99,-738.16"/>
-<polygon fill="none" stroke="midnightblue" points="324.68,-924.74 325.43,-935.31 331.43,-926.57 324.68,-924.74"/>
+<path fill="none" stroke="midnightblue" d="M328.1,-936.5C346.31,-869.46 367.32,-792.12 378.99,-749.16"/>
+<polygon fill="none" stroke="midnightblue" points="324.68,-935.74 325.43,-946.31 331.43,-937.57 324.68,-935.74"/>
 </g>
 <!-- Node6 -->
 <g id="node6" class="node">
 <title>Node6</title>
 <g id="a_node6"><a xlink:href="classtvm_1_1runtime_1_1ObjectPtr.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="black" points="224,-1216.5 224,-1394.5 364,-1394.5 364,-1216.5 224,-1216.5"/>
-<text text-anchor="start" x="232" y="-1382.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
-<text text-anchor="middle" x="294" y="-1371.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
-<polyline fill="none" stroke="black" points="224,-1364.5 364,-1364.5 "/>
-<text text-anchor="middle" x="294" y="-1352.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="224,-1345.5 364,-1345.5 "/>
+<polygon fill="white" stroke="black" points="224,-1227.5 224,-1405.5 364,-1405.5 364,-1227.5 224,-1227.5"/>
+<text text-anchor="start" x="232" y="-1393.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
+<text text-anchor="middle" x="294" y="-1382.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
+<polyline fill="none" stroke="black" points="224,-1375.5 364,-1375.5 "/>
+<text text-anchor="middle" x="294" y="-1363.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="224,-1356.5 364,-1356.5 "/>
+<text text-anchor="start" x="232" y="-1344.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="232" y="-1333.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="232" y="-1322.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="232" y="-1311.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="232" y="-1300.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="232" y="-1289.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="232" y="-1278.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="232" y="-1267.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
-<text text-anchor="start" x="232" y="-1256.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
-<text text-anchor="start" x="232" y="-1245.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="232" y="-1234.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="232" y="-1223.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
+<text text-anchor="start" x="232" y="-1278.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
+<text text-anchor="start" x="232" y="-1267.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
+<text text-anchor="start" x="232" y="-1256.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="232" y="-1245.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="232" y="-1234.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
 </a>
 </g>
 </g>
 <!-- Node6&#45;&gt;Node5 -->
 <g id="edge6" class="edge">
 <title>Node6&#45;&gt;Node5</title>
-<path fill="none" stroke="#404040" d="M294,-1216.18C294,-1204.84 294,-1193.05 294,-1181.23"/>
-<polygon fill="none" stroke="#404040" points="294,-1180.91 290,-1174.91 294,-1168.91 298,-1174.91 294,-1180.91"/>
-<text text-anchor="middle" x="313.5" y="-1190" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
+<path fill="none" stroke="#404040" d="M294,-1227.18C294,-1215.84 294,-1204.05 294,-1192.23"/>
+<polygon fill="none" stroke="#404040" points="294,-1191.91 290,-1185.91 294,-1179.91 298,-1185.91 294,-1191.91"/>
+<text text-anchor="middle" x="313.5" y="-1201" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
 </g>
 <!-- Node7 -->
 <g id="node7" class="node">
@@ -250,8 +251,8 @@
 <!-- Node8&#45;&gt;Node7 -->
 <g id="edge8" class="edge">
 <title>Node8&#45;&gt;Node7</title>
-<path fill="none" stroke="midnightblue" d="M388,-659.7C388,-570.86 388,-367.46 388,-261.86"/>
-<polygon fill="none" stroke="midnightblue" points="384.5,-659.7 388,-669.7 391.5,-659.7 384.5,-659.7"/>
+<path fill="none" stroke="midnightblue" d="M388,-670.57C388,-579.81 388,-369.56 388,-261.79"/>
+<polygon fill="none" stroke="midnightblue" points="384.5,-670.78 388,-680.78 391.5,-670.78 384.5,-670.78"/>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPattern__coll__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPattern__coll__graph.svg
index 336ab20b9d..3f2a9c452e 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPattern__coll__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPattern__coll__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::AttrPattern Pages: 1 -->
-<svg width="164pt" height="834pt"
- viewBox="0.00 0.00 164.00 834.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 830)">
+<svg width="164pt" height="845pt"
+ viewBox="0.00 0.00 164.00 845.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 841)">
 <title>tvm::relax::AttrPattern</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-830 160,-830 160,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-841 160,-841 160,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -28,17 +28,18 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="0,-117.5 0,-328.5 156,-328.5 156,-117.5 0,-117.5"/>
-<text text-anchor="middle" x="78" y="-316.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="0,-309.5 156,-309.5 "/>
-<text text-anchor="middle" x="78" y="-297.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="0,-290.5 156,-290.5 "/>
+<polygon fill="white" stroke="black" points="0,-117.5 0,-339.5 156,-339.5 156,-117.5 0,-117.5"/>
+<text text-anchor="middle" x="78" y="-327.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="0,-320.5 156,-320.5 "/>
+<text text-anchor="middle" x="78" y="-308.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-301.5 156,-301.5 "/>
+<text text-anchor="start" x="8" y="-289.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="8" y="-278.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-267.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-256.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="8" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="8" y="-234.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="8" y="-223.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-267.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="8" y="-256.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="8" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="8" y="-234.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-223.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="8" y="-212.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="8" y="-201.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="8" y="-190.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -54,74 +55,74 @@
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M78,-107.49C78,-97.59 78,-88.11 78,-79.56"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-107.5 78,-117.5 81.5,-107.5 74.5,-107.5"/>
+<path fill="none" stroke="midnightblue" d="M78,-107.14C78,-97.43 78,-88.15 78,-79.78"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-107.39 78,-117.39 81.5,-107.39 74.5,-107.39"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="11,-366.5 11,-599.5 145,-599.5 145,-366.5 11,-366.5"/>
-<text text-anchor="middle" x="78" y="-587.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="11,-580.5 145,-580.5 "/>
-<text text-anchor="start" x="19" y="-568.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<polyline fill="none" stroke="black" points="11,-561.5 145,-561.5 "/>
+<polygon fill="white" stroke="black" points="11,-377.5 11,-610.5 145,-610.5 145,-377.5 11,-377.5"/>
+<text text-anchor="middle" x="78" y="-598.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="11,-591.5 145,-591.5 "/>
+<text text-anchor="start" x="19" y="-579.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<polyline fill="none" stroke="black" points="11,-572.5 145,-572.5 "/>
+<text text-anchor="start" x="19" y="-560.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="19" y="-549.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-538.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-527.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="19" y="-516.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="19" y="-505.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="19" y="-494.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="19" y="-483.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="19" y="-472.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="19" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="19" y="-450.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="19" y="-439.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-538.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="19" y="-527.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="19" y="-516.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="19" y="-505.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="19" y="-494.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="19" y="-483.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="19" y="-472.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="19" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="19" y="-450.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-439.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="19" y="-428.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-417.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-406.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="19" y="-395.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="19" y="-384.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="19" y="-373.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="19" y="-417.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="19" y="-406.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="19" y="-395.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="19" y="-384.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M78,-355.96C78,-346.87 78,-337.76 78,-328.81"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-356.21 78,-366.21 81.5,-356.21 74.5,-356.21"/>
+<path fill="none" stroke="midnightblue" d="M78,-367.36C78,-358.07 78,-348.73 78,-339.54"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-367.43 78,-377.43 81.5,-367.43 74.5,-367.43"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node">
 <title>Node4</title>
 <g id="a_node4"><a xlink:href="classtvm_1_1runtime_1_1ObjectPtr.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="black" points="8,-647.5 8,-825.5 148,-825.5 148,-647.5 8,-647.5"/>
-<text text-anchor="start" x="16" y="-813.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
-<text text-anchor="middle" x="78" y="-802.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
-<polyline fill="none" stroke="black" points="8,-795.5 148,-795.5 "/>
-<text text-anchor="middle" x="78" y="-783.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="8,-776.5 148,-776.5 "/>
+<polygon fill="white" stroke="black" points="8,-658.5 8,-836.5 148,-836.5 148,-658.5 8,-658.5"/>
+<text text-anchor="start" x="16" y="-824.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
+<text text-anchor="middle" x="78" y="-813.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
+<polyline fill="none" stroke="black" points="8,-806.5 148,-806.5 "/>
+<text text-anchor="middle" x="78" y="-794.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="8,-787.5 148,-787.5 "/>
+<text text-anchor="start" x="16" y="-775.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-764.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-753.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-742.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-731.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-720.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-709.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-698.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-687.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
-<text text-anchor="start" x="16" y="-676.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="16" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="16" y="-654.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
+<text text-anchor="start" x="16" y="-709.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
+<text text-anchor="start" x="16" y="-698.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
+<text text-anchor="start" x="16" y="-687.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="16" y="-676.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="16" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
 </a>
 </g>
 </g>
 <!-- Node4&#45;&gt;Node3 -->
 <g id="edge3" class="edge">
 <title>Node4&#45;&gt;Node3</title>
-<path fill="none" stroke="#404040" d="M78,-647.18C78,-635.84 78,-624.05 78,-612.23"/>
-<polygon fill="none" stroke="#404040" points="78,-611.91 74,-605.91 78,-599.91 82,-605.91 78,-611.91"/>
-<text text-anchor="middle" x="97.5" y="-621" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
+<path fill="none" stroke="#404040" d="M78,-658.18C78,-646.84 78,-635.05 78,-623.23"/>
+<polygon fill="none" stroke="#404040" points="78,-622.91 74,-616.91 78,-610.91 82,-616.91 78,-622.91"/>
+<text text-anchor="middle" x="97.5" y="-632" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPattern__inherit__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPattern__inherit__graph.svg
index d4fc1a63fb..22212c5258 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPattern__inherit__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1AttrPattern__inherit__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::AttrPattern Pages: 1 -->
-<svg width="164pt" height="617pt"
- viewBox="0.00 0.00 164.00 617.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 613)">
+<svg width="164pt" height="628pt"
+ viewBox="0.00 0.00 164.00 628.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 624)">
 <title>tvm::relax::AttrPattern</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-613 160,-613 160,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-624 160,-624 160,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -28,17 +28,18 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="0,-116.5 0,-327.5 156,-327.5 156,-116.5 0,-116.5"/>
-<text text-anchor="middle" x="78" y="-315.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="0,-308.5 156,-308.5 "/>
-<text text-anchor="middle" x="78" y="-296.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="0,-289.5 156,-289.5 "/>
+<polygon fill="white" stroke="black" points="0,-116.5 0,-338.5 156,-338.5 156,-116.5 0,-116.5"/>
+<text text-anchor="middle" x="78" y="-326.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="0,-319.5 156,-319.5 "/>
+<text text-anchor="middle" x="78" y="-307.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-300.5 156,-300.5 "/>
+<text text-anchor="start" x="8" y="-288.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="8" y="-277.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="8" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="8" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="8" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="8" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="8" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="8" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="8" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="8" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="8" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -54,44 +55,44 @@
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M78,-106.05C78,-96.73 78,-87.8 78,-79.7"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-106.29 78,-116.29 81.5,-106.29 74.5,-106.29"/>
+<path fill="none" stroke="midnightblue" d="M78,-106.43C78,-96.94 78,-87.86 78,-79.66"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-106.45 78,-116.45 81.5,-106.45 74.5,-106.45"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="11,-364.5 11,-608.5 145,-608.5 145,-364.5 11,-364.5"/>
-<text text-anchor="middle" x="78" y="-596.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="11,-589.5 145,-589.5 "/>
-<text text-anchor="start" x="19" y="-577.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<text text-anchor="start" x="19" y="-566.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
-<polyline fill="none" stroke="black" points="11,-559.5 145,-559.5 "/>
+<polygon fill="white" stroke="black" points="11,-375.5 11,-619.5 145,-619.5 145,-375.5 11,-375.5"/>
+<text text-anchor="middle" x="78" y="-607.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="11,-600.5 145,-600.5 "/>
+<text text-anchor="start" x="19" y="-588.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<text text-anchor="start" x="19" y="-577.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
+<polyline fill="none" stroke="black" points="11,-570.5 145,-570.5 "/>
+<text text-anchor="start" x="19" y="-558.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="19" y="-547.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="19" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="19" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="19" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="19" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="19" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="19" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="19" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="19" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="19" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="19" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="19" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="19" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="19" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="19" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="19" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="19" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="19" y="-426.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="19" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="19" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="19" y="-371.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="19" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="19" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="19" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="19" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M78,-354.19C78,-345.29 78,-336.38 78,-327.64"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-354.24 78,-364.24 81.5,-354.24 74.5,-354.24"/>
+<path fill="none" stroke="midnightblue" d="M78,-365.4C78,-356.5 78,-347.57 78,-338.79"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-365.44 78,-375.44 81.5,-365.44 74.5,-365.44"/>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1CallPattern-members.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1CallPattern-members.html
index 4ddf2c9566..64f5585b94 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1CallPattern-members.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1CallPattern-members.html
@@ -90,24 +90,25 @@ $(function() {
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#aef57e18f93cc317ba30efbd986a7df18">HasDtype</a>(const std::string &amp;dtype) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a38905d1b7e0ab207b658afce9e50f838">HasSameShapeAs</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a16acd19f1cda9add85d03ce7afa06ad3">HasShape</a>(const Array&lt; PrimExpr &gt; &amp;shape) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1CallPattern.html#af1057d99691ef34b9e33f4df87141084">TVM_DEFINE_OBJECT_REF_METHODS</a>(CallPattern, DFPattern, CallPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1CallPattern.html">tvm::relax::CallPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">tvm::relax::DFPattern::TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a>(const StructInfo &amp;struct_info) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1CallPattern.html#af1057d99691ef34b9e33f4df87141084">TVM_DEFINE_OBJECT_REF_METHODS</a>(CallPattern, DFPattern, CallPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1CallPattern.html">tvm::relax::CallPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">tvm::relax::DFPattern::TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1CallPattern.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1CallPattern.html
index fecc68e6ad..c88bd0540a 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1CallPattern.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1CallPattern.html
@@ -77,13 +77,13 @@ $(function() {
 <div class="dynheader">
 Inheritance diagram for tvm::relax::CallPattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1CallPattern__inherit__graph.svg" width="219" height="823"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1CallPattern__inherit__graph.svg" width="219" height="838"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <div class="dynheader">
 Collaboration diagram for tvm::relax::CallPattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1CallPattern__coll__graph.svg" width="219" height="1112"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1CallPattern__coll__graph.svg" width="219" height="1127"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <table class="memberdecls">
@@ -113,6 +113,9 @@ Public Member Functions</h2></td></tr>
 <tr class="memitem:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1AttrPattern.html">AttrPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">HasAttr</a> (const <a class="el" href="classtvm_1_1runtime_1_1Map.html">Map</a>&lt; <a class="el" href="classtvm_1_1run [...]
 <tr class="memdesc:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating an <a class="el" href="classtvm_1_1relax_1_1AttrPattern.html" title="Managed reference to AttrPatternNode.">AttrPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">More...</a><br /></td></tr>
 <tr class="separator:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a> (const <a class="el" href="classtvm_1_1relax_1_1StructInfo.html">StructInfo</a> &amp;stru [...]
+<tr class="memdesc:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">More...</a><br /></td></tr>
+<tr class="separator:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1TypePattern.html">TypePattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a> (const <a class="el" href="classtvm_1_1Type.html">Type</a> &amp;type) const</td></tr>
 <tr class="memdesc:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1TypePattern.html" title="Managed reference to TypePatternNode.">TypePattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">More...</a><br /></td></tr>
 <tr class="separator:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1CallPatternNode__coll__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1CallPatternNode__coll__graph.svg
index 8a12e63928..65f9f507d9 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1CallPatternNode__coll__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1CallPatternNode__coll__graph.svg
@@ -178,33 +178,34 @@
 <g id="node7" class="node">
 <title>Node7</title>
 <g id="a_node7"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="358,-160.5 358,-371.5 514,-371.5 514,-160.5 358,-160.5"/>
-<text text-anchor="middle" x="436" y="-359.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="358,-352.5 514,-352.5 "/>
-<text text-anchor="middle" x="436" y="-340.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="358,-333.5 514,-333.5 "/>
-<text text-anchor="start" x="366" y="-321.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="366" y="-310.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="366" y="-299.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="366" y="-288.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="366" y="-277.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="366" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
-<text text-anchor="start" x="366" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
-<text text-anchor="start" x="366" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
-<text text-anchor="start" x="366" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
-<text text-anchor="start" x="366" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasShape()</text>
-<text text-anchor="start" x="366" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasSameShapeAs()</text>
-<text text-anchor="start" x="366" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ dup()</text>
-<text text-anchor="start" x="366" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator PatternSeq()</text>
-<text text-anchor="start" x="366" y="-178.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="366" y="-167.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="358,-155 358,-377 514,-377 514,-155 358,-155"/>
+<text text-anchor="middle" x="436" y="-365" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="358,-358 514,-358 "/>
+<text text-anchor="middle" x="436" y="-346" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="358,-339 514,-339 "/>
+<text text-anchor="start" x="366" y="-327" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
+<text text-anchor="start" x="366" y="-316" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
+<text text-anchor="start" x="366" y="-305" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="366" y="-294" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="366" y="-283" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="366" y="-272" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="366" y="-261" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
+<text text-anchor="start" x="366" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
+<text text-anchor="start" x="366" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
+<text text-anchor="start" x="366" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
+<text text-anchor="start" x="366" y="-217" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasShape()</text>
+<text text-anchor="start" x="366" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasSameShapeAs()</text>
+<text text-anchor="start" x="366" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00">+ dup()</text>
+<text text-anchor="start" x="366" y="-184" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator PatternSeq()</text>
+<text text-anchor="start" x="366" y="-173" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="366" y="-162" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node5&#45;&gt;Node7 -->
 <g id="edge8" class="edge">
 <title>Node5&#45;&gt;Node7</title>
-<path fill="none" stroke="midnightblue" d="M404.3,-497.97C409.96,-456.69 416.19,-411.31 421.62,-371.77"/>
+<path fill="none" stroke="midnightblue" d="M404.27,-498.15C409.69,-458.69 415.62,-415.46 420.88,-377.17"/>
 <polygon fill="none" stroke="midnightblue" points="400.8,-497.71 402.91,-508.09 407.74,-498.66 400.8,-497.71"/>
 </g>
 <!-- Node6 -->
@@ -241,7 +242,7 @@
 <!-- Node7&#45;&gt;Node1 -->
 <g id="edge7" class="edge">
 <title>Node7&#45;&gt;Node1</title>
-<path fill="none" stroke="#404040" d="M365.81,-160.29C360.23,-152.67 354.59,-145.16 349,-138 339.12,-125.34 328,-112.16 317.24,-99.89"/>
+<path fill="none" stroke="#404040" d="M361.86,-154.93C357.58,-149.15 353.27,-143.48 349,-138 339.12,-125.34 328,-112.16 317.24,-99.89"/>
 <polygon fill="none" stroke="#404040" points="317.06,-99.68 310.08,-97.84 309.1,-90.7 316.08,-92.54 317.06,-99.68"/>
 <text text-anchor="middle" x="346" y="-112" font-family="Helvetica,sans-Serif" font-size="10.00"> +op</text>
 </g>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1CallPattern__coll__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1CallPattern__coll__graph.svg
index 5a32d38f90..5963481070 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1CallPattern__coll__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1CallPattern__coll__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::CallPattern Pages: 1 -->
-<svg width="164pt" height="834pt"
- viewBox="0.00 0.00 164.00 834.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 830)">
+<svg width="164pt" height="845pt"
+ viewBox="0.00 0.00 164.00 845.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 841)">
 <title>tvm::relax::CallPattern</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-830 160,-830 160,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-841 160,-841 160,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -28,17 +28,18 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="0,-117.5 0,-328.5 156,-328.5 156,-117.5 0,-117.5"/>
-<text text-anchor="middle" x="78" y="-316.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="0,-309.5 156,-309.5 "/>
-<text text-anchor="middle" x="78" y="-297.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="0,-290.5 156,-290.5 "/>
+<polygon fill="white" stroke="black" points="0,-117.5 0,-339.5 156,-339.5 156,-117.5 0,-117.5"/>
+<text text-anchor="middle" x="78" y="-327.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="0,-320.5 156,-320.5 "/>
+<text text-anchor="middle" x="78" y="-308.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-301.5 156,-301.5 "/>
+<text text-anchor="start" x="8" y="-289.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="8" y="-278.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-267.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-256.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="8" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="8" y="-234.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="8" y="-223.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-267.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="8" y="-256.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="8" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="8" y="-234.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-223.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="8" y="-212.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="8" y="-201.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="8" y="-190.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -54,74 +55,74 @@
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M78,-107.49C78,-97.59 78,-88.11 78,-79.56"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-107.5 78,-117.5 81.5,-107.5 74.5,-107.5"/>
+<path fill="none" stroke="midnightblue" d="M78,-107.14C78,-97.43 78,-88.15 78,-79.78"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-107.39 78,-117.39 81.5,-107.39 74.5,-107.39"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="11,-366.5 11,-599.5 145,-599.5 145,-366.5 11,-366.5"/>
-<text text-anchor="middle" x="78" y="-587.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="11,-580.5 145,-580.5 "/>
-<text text-anchor="start" x="19" y="-568.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<polyline fill="none" stroke="black" points="11,-561.5 145,-561.5 "/>
+<polygon fill="white" stroke="black" points="11,-377.5 11,-610.5 145,-610.5 145,-377.5 11,-377.5"/>
+<text text-anchor="middle" x="78" y="-598.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="11,-591.5 145,-591.5 "/>
+<text text-anchor="start" x="19" y="-579.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<polyline fill="none" stroke="black" points="11,-572.5 145,-572.5 "/>
+<text text-anchor="start" x="19" y="-560.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="19" y="-549.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-538.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-527.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="19" y="-516.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="19" y="-505.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="19" y="-494.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="19" y="-483.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="19" y="-472.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="19" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="19" y="-450.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="19" y="-439.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-538.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="19" y="-527.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="19" y="-516.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="19" y="-505.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="19" y="-494.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="19" y="-483.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="19" y="-472.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="19" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="19" y="-450.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-439.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="19" y="-428.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-417.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-406.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="19" y="-395.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="19" y="-384.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="19" y="-373.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="19" y="-417.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="19" y="-406.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="19" y="-395.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="19" y="-384.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M78,-355.96C78,-346.87 78,-337.76 78,-328.81"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-356.21 78,-366.21 81.5,-356.21 74.5,-356.21"/>
+<path fill="none" stroke="midnightblue" d="M78,-367.36C78,-358.07 78,-348.73 78,-339.54"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-367.43 78,-377.43 81.5,-367.43 74.5,-367.43"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node">
 <title>Node4</title>
 <g id="a_node4"><a xlink:href="classtvm_1_1runtime_1_1ObjectPtr.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="black" points="8,-647.5 8,-825.5 148,-825.5 148,-647.5 8,-647.5"/>
-<text text-anchor="start" x="16" y="-813.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
-<text text-anchor="middle" x="78" y="-802.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
-<polyline fill="none" stroke="black" points="8,-795.5 148,-795.5 "/>
-<text text-anchor="middle" x="78" y="-783.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="8,-776.5 148,-776.5 "/>
+<polygon fill="white" stroke="black" points="8,-658.5 8,-836.5 148,-836.5 148,-658.5 8,-658.5"/>
+<text text-anchor="start" x="16" y="-824.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
+<text text-anchor="middle" x="78" y="-813.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
+<polyline fill="none" stroke="black" points="8,-806.5 148,-806.5 "/>
+<text text-anchor="middle" x="78" y="-794.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="8,-787.5 148,-787.5 "/>
+<text text-anchor="start" x="16" y="-775.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-764.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-753.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-742.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-731.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-720.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-709.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-698.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-687.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
-<text text-anchor="start" x="16" y="-676.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="16" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="16" y="-654.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
+<text text-anchor="start" x="16" y="-709.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
+<text text-anchor="start" x="16" y="-698.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
+<text text-anchor="start" x="16" y="-687.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="16" y="-676.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="16" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
 </a>
 </g>
 </g>
 <!-- Node4&#45;&gt;Node3 -->
 <g id="edge3" class="edge">
 <title>Node4&#45;&gt;Node3</title>
-<path fill="none" stroke="#404040" d="M78,-647.18C78,-635.84 78,-624.05 78,-612.23"/>
-<polygon fill="none" stroke="#404040" points="78,-611.91 74,-605.91 78,-599.91 82,-605.91 78,-611.91"/>
-<text text-anchor="middle" x="97.5" y="-621" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
+<path fill="none" stroke="#404040" d="M78,-658.18C78,-646.84 78,-635.05 78,-623.23"/>
+<polygon fill="none" stroke="#404040" points="78,-622.91 74,-616.91 78,-610.91 82,-616.91 78,-622.91"/>
+<text text-anchor="middle" x="97.5" y="-632" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1CallPattern__inherit__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1CallPattern__inherit__graph.svg
index 8bfd56e879..de239b4432 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1CallPattern__inherit__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1CallPattern__inherit__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::CallPattern Pages: 1 -->
-<svg width="164pt" height="617pt"
- viewBox="0.00 0.00 164.00 617.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 613)">
+<svg width="164pt" height="628pt"
+ viewBox="0.00 0.00 164.00 628.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 624)">
 <title>tvm::relax::CallPattern</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-613 160,-613 160,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-624 160,-624 160,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -28,17 +28,18 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="0,-116.5 0,-327.5 156,-327.5 156,-116.5 0,-116.5"/>
-<text text-anchor="middle" x="78" y="-315.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="0,-308.5 156,-308.5 "/>
-<text text-anchor="middle" x="78" y="-296.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="0,-289.5 156,-289.5 "/>
+<polygon fill="white" stroke="black" points="0,-116.5 0,-338.5 156,-338.5 156,-116.5 0,-116.5"/>
+<text text-anchor="middle" x="78" y="-326.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="0,-319.5 156,-319.5 "/>
+<text text-anchor="middle" x="78" y="-307.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-300.5 156,-300.5 "/>
+<text text-anchor="start" x="8" y="-288.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="8" y="-277.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="8" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="8" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="8" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="8" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="8" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="8" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="8" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="8" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="8" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -54,44 +55,44 @@
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M78,-106.05C78,-96.73 78,-87.8 78,-79.7"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-106.29 78,-116.29 81.5,-106.29 74.5,-106.29"/>
+<path fill="none" stroke="midnightblue" d="M78,-106.43C78,-96.94 78,-87.86 78,-79.66"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-106.45 78,-116.45 81.5,-106.45 74.5,-106.45"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="11,-364.5 11,-608.5 145,-608.5 145,-364.5 11,-364.5"/>
-<text text-anchor="middle" x="78" y="-596.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="11,-589.5 145,-589.5 "/>
-<text text-anchor="start" x="19" y="-577.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<text text-anchor="start" x="19" y="-566.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
-<polyline fill="none" stroke="black" points="11,-559.5 145,-559.5 "/>
+<polygon fill="white" stroke="black" points="11,-375.5 11,-619.5 145,-619.5 145,-375.5 11,-375.5"/>
+<text text-anchor="middle" x="78" y="-607.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="11,-600.5 145,-600.5 "/>
+<text text-anchor="start" x="19" y="-588.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<text text-anchor="start" x="19" y="-577.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
+<polyline fill="none" stroke="black" points="11,-570.5 145,-570.5 "/>
+<text text-anchor="start" x="19" y="-558.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="19" y="-547.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="19" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="19" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="19" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="19" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="19" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="19" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="19" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="19" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="19" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="19" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="19" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="19" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="19" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="19" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="19" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="19" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="19" y="-426.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="19" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="19" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="19" y="-371.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="19" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="19" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="19" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="19" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M78,-354.19C78,-345.29 78,-336.38 78,-327.64"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-354.24 78,-364.24 81.5,-354.24 74.5,-354.24"/>
+<path fill="none" stroke="midnightblue" d="M78,-365.4C78,-356.5 78,-347.57 78,-338.79"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-365.44 78,-375.44 81.5,-365.44 74.5,-365.44"/>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ConstantPattern-members.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ConstantPattern-members.html
index 77a2d5dd85..e6a8dd5118 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ConstantPattern-members.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ConstantPattern-members.html
@@ -89,24 +89,25 @@ $(function() {
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#aef57e18f93cc317ba30efbd986a7df18">HasDtype</a>(const std::string &amp;dtype) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a38905d1b7e0ab207b658afce9e50f838">HasSameShapeAs</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a16acd19f1cda9add85d03ce7afa06ad3">HasShape</a>(const Array&lt; PrimExpr &gt; &amp;shape) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1ConstantPattern.html#aec6af5bf9725dd084290800a6b4914f6">TVM_DEFINE_OBJECT_REF_METHODS</a>(ConstantPattern, DFPattern, ConstantPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1ConstantPattern.html">tvm::relax::ConstantPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">tvm::relax::DFPattern::TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a>(const StructInfo &amp;struct_info) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1ConstantPattern.html#aec6af5bf9725dd084290800a6b4914f6">TVM_DEFINE_OBJECT_REF_METHODS</a>(ConstantPattern, DFPattern, ConstantPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1ConstantPattern.html">tvm::relax::ConstantPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">tvm::relax::DFPattern::TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ConstantPattern.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ConstantPattern.html
index cfd1aca0ff..9699a1fac3 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ConstantPattern.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ConstantPattern.html
@@ -80,13 +80,13 @@ $(function() {
 <div class="dynheader">
 Inheritance diagram for tvm::relax::ConstantPattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1ConstantPattern__inherit__graph.svg" width="219" height="808"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1ConstantPattern__inherit__graph.svg" width="219" height="823"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <div class="dynheader">
 Collaboration diagram for tvm::relax::ConstantPattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1ConstantPattern__coll__graph.svg" width="219" height="1098"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1ConstantPattern__coll__graph.svg" width="219" height="1112"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <table class="memberdecls">
@@ -114,6 +114,9 @@ Public Member Functions</h2></td></tr>
 <tr class="memitem:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1AttrPattern.html">AttrPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">HasAttr</a> (const <a class="el" href="classtvm_1_1runtime_1_1Map.html">Map</a>&lt; <a class="el" href="classtvm_1_1run [...]
 <tr class="memdesc:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating an <a class="el" href="classtvm_1_1relax_1_1AttrPattern.html" title="Managed reference to AttrPatternNode.">AttrPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">More...</a><br /></td></tr>
 <tr class="separator:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a> (const <a class="el" href="classtvm_1_1relax_1_1StructInfo.html">StructInfo</a> &amp;stru [...]
+<tr class="memdesc:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">More...</a><br /></td></tr>
+<tr class="separator:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1TypePattern.html">TypePattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a> (const <a class="el" href="classtvm_1_1Type.html">Type</a> &amp;type) const</td></tr>
 <tr class="memdesc:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1TypePattern.html" title="Managed reference to TypePatternNode.">TypePattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">More...</a><br /></td></tr>
 <tr class="separator:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ConstantPattern__coll__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ConstantPattern__coll__graph.svg
index 55c5315784..2403ea55fb 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ConstantPattern__coll__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ConstantPattern__coll__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::ConstantPattern Pages: 1 -->
-<svg width="164pt" height="823pt"
- viewBox="0.00 0.00 164.00 823.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 819)">
+<svg width="164pt" height="834pt"
+ viewBox="0.00 0.00 164.00 834.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 830)">
 <title>tvm::relax::ConstantPattern</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-819 160,-819 160,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-830 160,-830 160,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -27,17 +27,18 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="0,-106.5 0,-317.5 156,-317.5 156,-106.5 0,-106.5"/>
-<text text-anchor="middle" x="78" y="-305.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="0,-298.5 156,-298.5 "/>
-<text text-anchor="middle" x="78" y="-286.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="0,-279.5 156,-279.5 "/>
+<polygon fill="white" stroke="black" points="0,-106.5 0,-328.5 156,-328.5 156,-106.5 0,-106.5"/>
+<text text-anchor="middle" x="78" y="-316.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="0,-309.5 156,-309.5 "/>
+<text text-anchor="middle" x="78" y="-297.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-290.5 156,-290.5 "/>
+<text text-anchor="start" x="8" y="-278.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="8" y="-267.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-256.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="8" y="-234.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="8" y="-223.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="8" y="-212.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-256.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="8" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="8" y="-234.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="8" y="-223.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-212.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="8" y="-201.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="8" y="-190.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="8" y="-179.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -53,74 +54,74 @@
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M78,-96.26C78,-86.3 78,-76.85 78,-68.51"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-96.38 78,-106.38 81.5,-96.38 74.5,-96.38"/>
+<path fill="none" stroke="midnightblue" d="M78,-96.21C78,-86.32 78,-76.96 78,-68.69"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-96.26 78,-106.26 81.5,-96.26 74.5,-96.26"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="11,-355.5 11,-588.5 145,-588.5 145,-355.5 11,-355.5"/>
-<text text-anchor="middle" x="78" y="-576.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="11,-569.5 145,-569.5 "/>
-<text text-anchor="start" x="19" y="-557.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<polyline fill="none" stroke="black" points="11,-550.5 145,-550.5 "/>
+<polygon fill="white" stroke="black" points="11,-366.5 11,-599.5 145,-599.5 145,-366.5 11,-366.5"/>
+<text text-anchor="middle" x="78" y="-587.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="11,-580.5 145,-580.5 "/>
+<text text-anchor="start" x="19" y="-568.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<polyline fill="none" stroke="black" points="11,-561.5 145,-561.5 "/>
+<text text-anchor="start" x="19" y="-549.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="19" y="-538.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-527.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-516.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="19" y="-505.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="19" y="-494.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="19" y="-483.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="19" y="-472.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="19" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="19" y="-450.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="19" y="-439.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="19" y="-428.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-527.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="19" y="-516.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="19" y="-505.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="19" y="-494.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="19" y="-483.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="19" y="-472.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="19" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="19" y="-450.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="19" y="-439.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-428.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="19" y="-417.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-406.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-395.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="19" y="-384.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="19" y="-373.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="19" y="-362.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="19" y="-406.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="19" y="-395.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="19" y="-384.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="19" y="-373.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M78,-344.96C78,-335.87 78,-326.76 78,-317.81"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-345.21 78,-355.21 81.5,-345.21 74.5,-345.21"/>
+<path fill="none" stroke="midnightblue" d="M78,-356.36C78,-347.07 78,-337.73 78,-328.54"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-356.43 78,-366.43 81.5,-356.43 74.5,-356.43"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node">
 <title>Node4</title>
 <g id="a_node4"><a xlink:href="classtvm_1_1runtime_1_1ObjectPtr.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="black" points="8,-636.5 8,-814.5 148,-814.5 148,-636.5 8,-636.5"/>
-<text text-anchor="start" x="16" y="-802.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
-<text text-anchor="middle" x="78" y="-791.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
-<polyline fill="none" stroke="black" points="8,-784.5 148,-784.5 "/>
-<text text-anchor="middle" x="78" y="-772.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="8,-765.5 148,-765.5 "/>
+<polygon fill="white" stroke="black" points="8,-647.5 8,-825.5 148,-825.5 148,-647.5 8,-647.5"/>
+<text text-anchor="start" x="16" y="-813.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
+<text text-anchor="middle" x="78" y="-802.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
+<polyline fill="none" stroke="black" points="8,-795.5 148,-795.5 "/>
+<text text-anchor="middle" x="78" y="-783.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="8,-776.5 148,-776.5 "/>
+<text text-anchor="start" x="16" y="-764.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-753.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-742.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-731.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-720.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-709.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-698.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-687.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-676.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
-<text text-anchor="start" x="16" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="16" y="-654.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="16" y="-643.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
+<text text-anchor="start" x="16" y="-698.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
+<text text-anchor="start" x="16" y="-687.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
+<text text-anchor="start" x="16" y="-676.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="16" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="16" y="-654.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
 </a>
 </g>
 </g>
 <!-- Node4&#45;&gt;Node3 -->
 <g id="edge3" class="edge">
 <title>Node4&#45;&gt;Node3</title>
-<path fill="none" stroke="#404040" d="M78,-636.18C78,-624.84 78,-613.05 78,-601.23"/>
-<polygon fill="none" stroke="#404040" points="78,-600.91 74,-594.91 78,-588.91 82,-594.91 78,-600.91"/>
-<text text-anchor="middle" x="97.5" y="-610" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
+<path fill="none" stroke="#404040" d="M78,-647.18C78,-635.84 78,-624.05 78,-612.23"/>
+<polygon fill="none" stroke="#404040" points="78,-611.91 74,-605.91 78,-599.91 82,-605.91 78,-611.91"/>
+<text text-anchor="middle" x="97.5" y="-621" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ConstantPattern__inherit__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ConstantPattern__inherit__graph.svg
index 3579ffc10e..4c528b5364 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ConstantPattern__inherit__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ConstantPattern__inherit__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::ConstantPattern Pages: 1 -->
-<svg width="164pt" height="606pt"
- viewBox="0.00 0.00 164.00 606.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 602)">
+<svg width="164pt" height="617pt"
+ viewBox="0.00 0.00 164.00 617.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 613)">
 <title>tvm::relax::ConstantPattern</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-602 160,-602 160,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-613 160,-613 160,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -27,17 +27,18 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="0,-105.5 0,-316.5 156,-316.5 156,-105.5 0,-105.5"/>
-<text text-anchor="middle" x="78" y="-304.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="0,-297.5 156,-297.5 "/>
-<text text-anchor="middle" x="78" y="-285.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="0,-278.5 156,-278.5 "/>
+<polygon fill="white" stroke="black" points="0,-105.5 0,-327.5 156,-327.5 156,-105.5 0,-105.5"/>
+<text text-anchor="middle" x="78" y="-315.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="0,-308.5 156,-308.5 "/>
+<text text-anchor="middle" x="78" y="-296.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-289.5 156,-289.5 "/>
+<text text-anchor="start" x="8" y="-277.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="8" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="8" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="8" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="8" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="8" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="8" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="8" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="8" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="8" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="8" y="-178.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -53,44 +54,44 @@
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M78,-95.38C78,-85.85 78,-76.81 78,-68.77"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-95.47 78,-105.47 81.5,-95.47 74.5,-95.47"/>
+<path fill="none" stroke="midnightblue" d="M78,-95.22C78,-85.66 78,-76.61 78,-68.59"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-95.35 78,-105.35 81.5,-95.35 74.5,-95.35"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="11,-353.5 11,-597.5 145,-597.5 145,-353.5 11,-353.5"/>
-<text text-anchor="middle" x="78" y="-585.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="11,-578.5 145,-578.5 "/>
-<text text-anchor="start" x="19" y="-566.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<text text-anchor="start" x="19" y="-555.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
-<polyline fill="none" stroke="black" points="11,-548.5 145,-548.5 "/>
+<polygon fill="white" stroke="black" points="11,-364.5 11,-608.5 145,-608.5 145,-364.5 11,-364.5"/>
+<text text-anchor="middle" x="78" y="-596.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="11,-589.5 145,-589.5 "/>
+<text text-anchor="start" x="19" y="-577.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<text text-anchor="start" x="19" y="-566.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
+<polyline fill="none" stroke="black" points="11,-559.5 145,-559.5 "/>
+<text text-anchor="start" x="19" y="-547.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="19" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="19" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="19" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="19" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="19" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="19" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="19" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="19" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="19" y="-426.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="19" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="19" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="19" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="19" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="19" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="19" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="19" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="19" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-426.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="19" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="19" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="19" y="-371.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="19" y="-360.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="19" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="19" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="19" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="19" y="-371.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M78,-343.19C78,-334.29 78,-325.38 78,-316.64"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-343.24 78,-353.24 81.5,-343.24 74.5,-343.24"/>
+<path fill="none" stroke="midnightblue" d="M78,-354.4C78,-345.5 78,-336.57 78,-327.79"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-354.44 78,-364.44 81.5,-354.44 74.5,-354.44"/>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPattern-members.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPattern-members.html
index 98885f112a..6cf56e0bdf 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPattern-members.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPattern-members.html
@@ -89,23 +89,24 @@ $(function() {
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#aef57e18f93cc317ba30efbd986a7df18">HasDtype</a>(const std::string &amp;dtype) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a38905d1b7e0ab207b658afce9e50f838">HasSameShapeAs</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a16acd19f1cda9add85d03ce7afa06ad3">HasShape</a>(const Array&lt; PrimExpr &gt; &amp;shape) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a>(const StructInfo &amp;struct_info) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPattern.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPattern.html
index a814297384..f4654e6c6d 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPattern.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPattern.html
@@ -80,13 +80,13 @@ $(function() {
 <div class="dynheader">
 Inheritance diagram for tvm::relax::DFPattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1DFPattern__inherit__graph.svg" width="4667" height="838"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1DFPattern__inherit__graph.svg" width="4899" height="852"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <div class="dynheader">
 Collaboration diagram for tvm::relax::DFPattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1DFPattern__coll__graph.svg" width="219" height="956"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1DFPattern__coll__graph.svg" width="219" height="971"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <table class="memberdecls">
@@ -111,6 +111,9 @@ Public Member Functions</h2></td></tr>
 <tr class="memitem:ad5c48ebffbab0cd2bfae718845b67b93"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1AttrPattern.html">AttrPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">HasAttr</a> (const <a class="el" href="classtvm_1_1runtime_1_1Map.html">Map</a>&lt; <a class="el" href="classtvm_1_1runtime_1_1String.html">String</a>, <a class="el" href [...]
 <tr class="memdesc:ad5c48ebffbab0cd2bfae718845b67b93"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating an <a class="el" href="classtvm_1_1relax_1_1AttrPattern.html" title="Managed reference to AttrPatternNode.">AttrPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">More...</a><br /></td></tr>
 <tr class="separator:ad5c48ebffbab0cd2bfae718845b67b93"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a72ffeedc398250202c2c8a296da3f709"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a> (const <a class="el" href="classtvm_1_1relax_1_1StructInfo.html">StructInfo</a> &amp;struct_info) const</td></tr>
+<tr class="memdesc:a72ffeedc398250202c2c8a296da3f709"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">More...</a><br /></td></tr>
+<tr class="separator:a72ffeedc398250202c2c8a296da3f709"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a6bf034c3081dce53de73eafdcc30d549"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1TypePattern.html">TypePattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a> (const <a class="el" href="classtvm_1_1Type.html">Type</a> &amp;type) const</td></tr>
 <tr class="memdesc:a6bf034c3081dce53de73eafdcc30d549"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1TypePattern.html" title="Managed reference to TypePatternNode.">TypePattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">More...</a><br /></td></tr>
 <tr class="separator:a6bf034c3081dce53de73eafdcc30d549"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -322,6 +325,26 @@ Additional Inherited Members</h2></td></tr>
 
 <p>Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1ShapePattern.html" title="Managed reference to ShapePatternNode.">ShapePattern</a>. </p>
 
+</div>
+</div>
+<a id="a72ffeedc398250202c2c8a296da3f709"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a72ffeedc398250202c2c8a296da3f709">&#9670;&nbsp;</a></span>HasStructInfo()</h2>
+
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a> tvm::relax::DFPattern::HasStructInfo </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classtvm_1_1relax_1_1StructInfo.html">StructInfo</a> &amp;&#160;</td>
+          <td class="paramname"><em>struct_info</em></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+<p>Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>. </p>
+
 </div>
 </div>
 <a id="a6bf034c3081dce53de73eafdcc30d549"></a>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4-members.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4-members.html
index a3459bb00c..1b9b4a0365 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4-members.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4-members.html
@@ -86,16 +86,17 @@ $(function() {
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#a1f63b2c1f66547558b7ca76c89621f7e">VisitDFPattern_</a>(const ShapePatternNode *op, Args... args)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry"><span class="mlabe [...]
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#a97b04c149d03124526182fdea0815f58">VisitDFPattern_</a>(const TupleGetItemPatternNode *op, Args... args)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry [...]
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#af44d85d5f584f27a01effddc8bb0fa9a">VisitDFPattern_</a>(const TuplePatternNode *op, Args... args)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry"><span class="mlabe [...]
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#ae2b79b3450ddafe34443f19e782adea5">VisitDFPattern_</a>(const TypePatternNode *op, Args... args)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry"><span  [...]
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#a8874385b5d5e0fa1b19ee4309c75cb83">VisitDFPattern_</a>(const WildcardPatternNode *op, Args... args)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry"><span class="ml [...]
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#a7718f9ba868dc7ac82c0be0bd095c34d">VisitDFPattern_</a>(const VarPatternNode *op, Args... args)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry"><span c [...]
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#a8855988323f9d544ac8a713cd2297d03">VisitDFPattern_</a>(const DataflowVarPatternNode *op, Args... args)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry"><span class= [...]
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#a3f4c98d69eb97196ccaf28e735242fb6">VisitDFPattern_</a>(const GlobalVarPatternNode *op, Args... args)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry">< [...]
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#a71d1bdb496f3e5060e2aa1999eede9d1">VisitDFPattern_</a>(const ExternFuncPatternNode *op, Args... args)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry"><span class=" [...]
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#a20769a94262a1dadfbb20b2a7a754a50">VisitDFPattern_</a>(const PrimArrPatternNode *op, Args... args)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry"><sp [...]
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#a6ad337783c709c6dab0397adb902fffd">VisitDFPattern_</a>(const UnorderedTuplePatternNode *op, Args... args)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry"><span cla [...]
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#a99495ff3a04cb69ee7f538d09b43e94d">VisitDFPatternDefault_</a>(const Object *op, Args...)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry"><span class=" [...]
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#adb24262d0148950671210b6b29bf935f">~DFPatternFunctor</a>()</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">v [...]
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#a6e1e16400d5bd0579d997cb7d223051e">VisitDFPattern_</a>(const StructInfoPatternNode *op, Args... args)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry"> [...]
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#ae2b79b3450ddafe34443f19e782adea5">VisitDFPattern_</a>(const TypePatternNode *op, Args... args)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry"><span class="mlabel [...]
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#a8874385b5d5e0fa1b19ee4309c75cb83">VisitDFPattern_</a>(const WildcardPatternNode *op, Args... args)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry"><s [...]
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#a7718f9ba868dc7ac82c0be0bd095c34d">VisitDFPattern_</a>(const VarPatternNode *op, Args... args)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry"><span class="mlabel" [...]
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#a8855988323f9d544ac8a713cd2297d03">VisitDFPattern_</a>(const DataflowVarPatternNode *op, Args... args)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry" [...]
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#a3f4c98d69eb97196ccaf28e735242fb6">VisitDFPattern_</a>(const GlobalVarPatternNode *op, Args... args)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry"><span class="m [...]
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#a71d1bdb496f3e5060e2aa1999eede9d1">VisitDFPattern_</a>(const ExternFuncPatternNode *op, Args... args)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry"> [...]
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#a20769a94262a1dadfbb20b2a7a754a50">VisitDFPattern_</a>(const PrimArrPatternNode *op, Args... args)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry"><span class="mla [...]
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#a6ad337783c709c6dab0397adb902fffd">VisitDFPattern_</a>(const UnorderedTuplePatternNode *op, Args... args)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="ent [...]
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#a99495ff3a04cb69ee7f538d09b43e94d">VisitDFPatternDefault_</a>(const Object *op, Args...)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry"><span class="mlabel">inlin [...]
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#adb24262d0148950671210b6b29bf935f">~DFPatternFunctor</a>()</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html">tvm::relax::DFPatternFunctor&lt; R(const DFPattern &amp;n, Args...)&gt;</a></td><td class="entry"><span class="mlabel">inline</span><span cla [...]
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html
index 1e38fef28a..cbcc176fac 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html
@@ -116,6 +116,8 @@ Public Member Functions</h2></td></tr>
 <tr class="separator:a97b04c149d03124526182fdea0815f58"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:af44d85d5f584f27a01effddc8bb0fa9a"><td class="memItemLeft" align="right" valign="top">virtual R&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#af44d85d5f584f27a01effddc8bb0fa9a">VisitDFPattern_</a> (const <a class="el" href="classtvm_1_1relax_1_1TuplePatternNode.html">TuplePatternNode</a> *op, Args... args)</td></tr>
 <tr class="separator:af44d85d5f584f27a01effddc8bb0fa9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a6e1e16400d5bd0579d997cb7d223051e"><td class="memItemLeft" align="right" valign="top">virtual R&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#a6e1e16400d5bd0579d997cb7d223051e">VisitDFPattern_</a> (const <a class="el" href="classtvm_1_1relax_1_1StructInfoPatternNode.html">StructInfoPatternNode</a> *op, Args... args)</td></tr>
+<tr class="separator:a6e1e16400d5bd0579d997cb7d223051e"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ae2b79b3450ddafe34443f19e782adea5"><td class="memItemLeft" align="right" valign="top">virtual R&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#ae2b79b3450ddafe34443f19e782adea5">VisitDFPattern_</a> (const <a class="el" href="classtvm_1_1relax_1_1TypePatternNode.html">TypePatternNode</a> *op, Args... args)</td></tr>
 <tr class="separator:ae2b79b3450ddafe34443f19e782adea5"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a8874385b5d5e0fa1b19ee4309c75cb83"><td class="memItemLeft" align="right" valign="top">virtual R&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4.html#a8874385b5d5e0fa1b19ee4309c75cb83">VisitDFPattern_</a> (const <a class="el" href="classtvm_1_1relax_1_1WildcardPatternNode.html">WildcardPatternNode</a> *op, Args... args)</td></tr>
@@ -263,7 +265,7 @@ template&lt;typename R , typename... Args&gt; </div>
 </div>
 </div>
 <a id="ab0952fa4ca850772655117d9ba6bd11a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab0952fa4ca850772655117d9ba6bd11a">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[1/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#ab0952fa4ca850772655117d9ba6bd11a">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[1/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -301,7 +303,7 @@ template&lt;typename R , typename... Args&gt; </div>
 </div>
 </div>
 <a id="aa1a622185255cfa44212439cf8016937"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aa1a622185255cfa44212439cf8016937">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[2/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#aa1a622185255cfa44212439cf8016937">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[2/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -339,7 +341,7 @@ template&lt;typename R , typename... Args&gt; </div>
 </div>
 </div>
 <a id="ac310765730c27f8289644fa7054c6598"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac310765730c27f8289644fa7054c6598">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[3/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#ac310765730c27f8289644fa7054c6598">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[3/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -377,7 +379,7 @@ template&lt;typename R , typename... Args&gt; </div>
 </div>
 </div>
 <a id="a2c76a69dd6b5103db3ebfe498fcbbda2"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a2c76a69dd6b5103db3ebfe498fcbbda2">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[4/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a2c76a69dd6b5103db3ebfe498fcbbda2">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[4/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -415,7 +417,7 @@ template&lt;typename R , typename... Args&gt; </div>
 </div>
 </div>
 <a id="a8855988323f9d544ac8a713cd2297d03"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8855988323f9d544ac8a713cd2297d03">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[5/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a8855988323f9d544ac8a713cd2297d03">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[5/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -453,7 +455,7 @@ template&lt;typename R , typename... Args&gt; </div>
 </div>
 </div>
 <a id="ad6acdd8fcdf41128f267d3e950f07c54"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad6acdd8fcdf41128f267d3e950f07c54">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[6/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#ad6acdd8fcdf41128f267d3e950f07c54">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[6/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -491,7 +493,7 @@ template&lt;typename R , typename... Args&gt; </div>
 </div>
 </div>
 <a id="a5ca67baa1191565d64388a3fce0d10b6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5ca67baa1191565d64388a3fce0d10b6">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[7/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a5ca67baa1191565d64388a3fce0d10b6">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[7/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -529,7 +531,7 @@ template&lt;typename R , typename... Args&gt; </div>
 </div>
 </div>
 <a id="a71d1bdb496f3e5060e2aa1999eede9d1"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a71d1bdb496f3e5060e2aa1999eede9d1">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[8/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a71d1bdb496f3e5060e2aa1999eede9d1">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[8/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -567,7 +569,7 @@ template&lt;typename R , typename... Args&gt; </div>
 </div>
 </div>
 <a id="ac8bf5b27d49654d1ecae9222897cff66"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ac8bf5b27d49654d1ecae9222897cff66">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[9/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#ac8bf5b27d49654d1ecae9222897cff66">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[9/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -605,7 +607,7 @@ template&lt;typename R , typename... Args&gt; </div>
 </div>
 </div>
 <a id="a3f4c98d69eb97196ccaf28e735242fb6"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3f4c98d69eb97196ccaf28e735242fb6">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[10/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a3f4c98d69eb97196ccaf28e735242fb6">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[10/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -643,7 +645,7 @@ template&lt;typename R , typename... Args&gt; </div>
 </div>
 </div>
 <a id="a85789a338a8b6dfc12535e1396d9f297"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a85789a338a8b6dfc12535e1396d9f297">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[11/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a85789a338a8b6dfc12535e1396d9f297">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[11/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -681,7 +683,7 @@ template&lt;typename R , typename... Args&gt; </div>
 </div>
 </div>
 <a id="a4240b8ac3cce25625080937709589f0a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a4240b8ac3cce25625080937709589f0a">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[12/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a4240b8ac3cce25625080937709589f0a">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[12/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -719,7 +721,7 @@ template&lt;typename R , typename... Args&gt; </div>
 </div>
 </div>
 <a id="a20769a94262a1dadfbb20b2a7a754a50"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a20769a94262a1dadfbb20b2a7a754a50">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[13/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a20769a94262a1dadfbb20b2a7a754a50">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[13/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -757,7 +759,7 @@ template&lt;typename R , typename... Args&gt; </div>
 </div>
 </div>
 <a id="a1f63b2c1f66547558b7ca76c89621f7e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a1f63b2c1f66547558b7ca76c89621f7e">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[14/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a1f63b2c1f66547558b7ca76c89621f7e">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[14/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -792,10 +794,48 @@ template&lt;typename R , typename... Args&gt; </div>
 </table>
 </div><div class="memdoc">
 
+</div>
+</div>
+<a id="a6e1e16400d5bd0579d997cb7d223051e"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#a6e1e16400d5bd0579d997cb7d223051e">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[15/21]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename R , typename... Args&gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">virtual R <a class="el" href="classtvm_1_1relax_1_1DFPatternFunctor.html">tvm::relax::DFPatternFunctor</a>&lt; R(const <a class="el" href="classtvm_1_1relax_1_1DFPattern.html">DFPattern</a> &amp;n, Args...)&gt;::VisitDFPattern_ </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classtvm_1_1relax_1_1StructInfoPatternNode.html">StructInfoPatternNode</a> *&#160;</td>
+          <td class="paramname"><em>op</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">Args...&#160;</td>
+          <td class="paramname"><em>args</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
 </div>
 </div>
 <a id="a97b04c149d03124526182fdea0815f58"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a97b04c149d03124526182fdea0815f58">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[15/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a97b04c149d03124526182fdea0815f58">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[16/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -833,7 +873,7 @@ template&lt;typename R , typename... Args&gt; </div>
 </div>
 </div>
 <a id="af44d85d5f584f27a01effddc8bb0fa9a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#af44d85d5f584f27a01effddc8bb0fa9a">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[16/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#af44d85d5f584f27a01effddc8bb0fa9a">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[17/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -871,7 +911,7 @@ template&lt;typename R , typename... Args&gt; </div>
 </div>
 </div>
 <a id="ae2b79b3450ddafe34443f19e782adea5"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae2b79b3450ddafe34443f19e782adea5">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[17/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#ae2b79b3450ddafe34443f19e782adea5">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[18/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -909,7 +949,7 @@ template&lt;typename R , typename... Args&gt; </div>
 </div>
 </div>
 <a id="a6ad337783c709c6dab0397adb902fffd"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a6ad337783c709c6dab0397adb902fffd">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[18/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a6ad337783c709c6dab0397adb902fffd">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[19/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -947,7 +987,7 @@ template&lt;typename R , typename... Args&gt; </div>
 </div>
 </div>
 <a id="a7718f9ba868dc7ac82c0be0bd095c34d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a7718f9ba868dc7ac82c0be0bd095c34d">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[19/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a7718f9ba868dc7ac82c0be0bd095c34d">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[20/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -985,7 +1025,7 @@ template&lt;typename R , typename... Args&gt; </div>
 </div>
 </div>
 <a id="a8874385b5d5e0fa1b19ee4309c75cb83"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a8874385b5d5e0fa1b19ee4309c75cb83">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[20/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a8874385b5d5e0fa1b19ee4309c75cb83">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[21/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4__coll__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4__coll__graph.svg
index 4b4985b248..5b9a99b485 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4__coll__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternFunctor_3_01R_07const_01DFPattern_01_6n_00_01Args_8_8_8_08_4__coll__graph.svg
@@ -29,7 +29,7 @@
 <text text-anchor="start" x="8" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ VisitDFPattern_()</text>
 <text text-anchor="start" x="8" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ VisitDFPattern_()</text>
 <text text-anchor="start" x="8" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ VisitDFPattern_()</text>
-<text text-anchor="start" x="8" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 14 more...</text>
+<text text-anchor="start" x="8" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 15 more...</text>
 </a>
 </g>
 </g>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternNode.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternNode.html
index 46be1b31d5..8984ae43ac 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternNode.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternNode.html
@@ -81,7 +81,7 @@ $(function() {
 <div class="dynheader">
 Inheritance diagram for tvm::relax::DFPatternNode:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1DFPatternNode__inherit__graph.svg" width="4659" height="1022"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1DFPatternNode__inherit__graph.svg" width="4923" height="1022"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <div class="dynheader">
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternNode__inherit__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternNode__inherit__graph.svg
index 9612d2c9ac..123fa8db06 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternNode__inherit__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternNode__inherit__graph.svg
@@ -4,22 +4,22 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::DFPatternNode Pages: 1 -->
-<svg width="3494pt" height="766pt"
- viewBox="0.00 0.00 3494.00 766.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="3692pt" height="766pt"
+ viewBox="0.00 0.00 3692.00 766.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 762)">
 <title>tvm::relax::DFPatternNode</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-762 3490,-762 3490,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-762 3688,-762 3688,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
 <g id="a_node1"><a xlink:title="Base type of all dataflow patterns.">
-<polygon fill="#bfbfbf" stroke="black" points="1664.5,-254.5 1664.5,-322.5 1837.5,-322.5 1837.5,-254.5 1664.5,-254.5"/>
-<text text-anchor="middle" x="1751" y="-310.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPatternNode</text>
-<polyline fill="none" stroke="black" points="1664.5,-303.5 1837.5,-303.5 "/>
-<text text-anchor="start" x="1672.5" y="-291.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<polyline fill="none" stroke="black" points="1664.5,-284.5 1837.5,-284.5 "/>
-<text text-anchor="start" x="1672.5" y="-272.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT</text>
-<text text-anchor="start" x="1672.5" y="-261.5" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
+<polygon fill="#bfbfbf" stroke="black" points="1761.5,-254.5 1761.5,-322.5 1934.5,-322.5 1934.5,-254.5 1761.5,-254.5"/>
+<text text-anchor="middle" x="1848" y="-310.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPatternNode</text>
+<polyline fill="none" stroke="black" points="1761.5,-303.5 1934.5,-303.5 "/>
+<text text-anchor="start" x="1769.5" y="-291.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<polyline fill="none" stroke="black" points="1761.5,-284.5 1934.5,-284.5 "/>
+<text text-anchor="start" x="1769.5" y="-272.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT</text>
+<text text-anchor="start" x="1769.5" y="-261.5" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
 </a>
 </g>
 </g>
@@ -43,8 +43,8 @@
 <!-- Node1&#45;&gt;Node3 -->
 <g id="edge2" class="edge">
 <title>Node1&#45;&gt;Node3</title>
-<path fill="none" stroke="midnightblue" d="M1654.08,-285.85C1334.36,-280.06 325.48,-258.71 185,-218 179.41,-216.38 173.8,-214.38 168.24,-212.1"/>
-<polygon fill="none" stroke="midnightblue" points="1654.18,-289.36 1664.25,-286.04 1654.31,-282.36 1654.18,-289.36"/>
+<path fill="none" stroke="midnightblue" d="M1751.35,-286.13C1418.99,-281.05 335.16,-261.3 185,-218 179.31,-216.36 173.61,-214.32 167.96,-212.01"/>
+<polygon fill="none" stroke="midnightblue" points="1751.39,-289.63 1761.44,-286.28 1751.49,-282.63 1751.39,-289.63"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node">
@@ -66,8 +66,8 @@
 <!-- Node1&#45;&gt;Node4 -->
 <g id="edge3" class="edge">
 <title>Node1&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M1654.03,-285.2C1361.49,-277.88 500.29,-253.56 379,-218 373.41,-216.36 367.81,-214.35 362.26,-212.06"/>
-<polygon fill="none" stroke="midnightblue" points="1654.12,-288.7 1664.2,-285.45 1654.29,-281.7 1654.12,-288.7"/>
+<path fill="none" stroke="midnightblue" d="M1751.12,-285.55C1444.83,-279.01 509.88,-256.13 379,-218 373.41,-216.37 367.8,-214.36 362.25,-212.09"/>
+<polygon fill="none" stroke="midnightblue" points="1751.24,-289.05 1761.31,-285.76 1751.39,-282.05 1751.24,-289.05"/>
 </g>
 <!-- Node5 -->
 <g id="node5" class="node">
@@ -90,8 +90,8 @@
 <!-- Node1&#45;&gt;Node5 -->
 <g id="edge4" class="edge">
 <title>Node1&#45;&gt;Node5</title>
-<path fill="none" stroke="midnightblue" d="M1653.97,-287.46C1409.69,-286.45 774.44,-277.96 573,-218 570.02,-217.11 567.04,-216.12 564.07,-215.04"/>
-<polygon fill="none" stroke="midnightblue" points="1654.24,-290.96 1664.25,-287.5 1654.27,-283.96 1654.24,-290.96"/>
+<path fill="none" stroke="midnightblue" d="M1751.26,-287.97C1493.26,-288.33 793.43,-283.08 573,-218 570.02,-217.12 567.04,-216.14 564.06,-215.06"/>
+<polygon fill="none" stroke="midnightblue" points="1751.37,-291.47 1761.36,-287.96 1751.36,-284.47 1751.37,-291.47"/>
 </g>
 <!-- Node6 -->
 <g id="node6" class="node">
@@ -111,8 +111,8 @@
 <!-- Node1&#45;&gt;Node6 -->
 <g id="edge5" class="edge">
 <title>Node1&#45;&gt;Node6</title>
-<path fill="none" stroke="midnightblue" d="M1654.18,-286.13C1439.77,-282.23 930.94,-267.83 767,-218 753.63,-213.94 740.11,-207.77 727.58,-201"/>
-<polygon fill="none" stroke="midnightblue" points="1654.41,-289.64 1664.47,-286.32 1654.54,-282.64 1654.41,-289.64"/>
+<path fill="none" stroke="midnightblue" d="M1751.21,-286.86C1521.63,-284.43 949.68,-272.9 767,-218 753.62,-213.98 740.1,-207.83 727.56,-201.07"/>
+<polygon fill="none" stroke="midnightblue" points="1751.19,-290.36 1761.22,-286.96 1751.26,-283.36 1751.19,-290.36"/>
 </g>
 <!-- Node7 -->
 <g id="node7" class="node">
@@ -134,8 +134,8 @@
 <!-- Node1&#45;&gt;Node7 -->
 <g id="edge6" class="edge">
 <title>Node1&#45;&gt;Node7</title>
-<path fill="none" stroke="midnightblue" d="M1654.16,-284.02C1473.33,-276.67 1091.21,-256.98 965,-218 959.54,-216.31 954.05,-214.3 948.6,-212.05"/>
-<polygon fill="none" stroke="midnightblue" points="1654.07,-287.51 1664.2,-284.42 1654.35,-280.52 1654.07,-287.51"/>
+<path fill="none" stroke="midnightblue" d="M1751.12,-285.11C1553.37,-279.39 1109.72,-261.93 965,-218 959.53,-216.34 954.03,-214.34 948.58,-212.11"/>
+<polygon fill="none" stroke="midnightblue" points="1751.11,-288.61 1761.21,-285.4 1751.31,-281.62 1751.11,-288.61"/>
 </g>
 <!-- Node8 -->
 <g id="node8" class="node">
@@ -156,8 +156,8 @@
 <!-- Node1&#45;&gt;Node8 -->
 <g id="edge7" class="edge">
 <title>Node1&#45;&gt;Node8</title>
-<path fill="none" stroke="midnightblue" d="M1653.96,-288.07C1534.34,-286.09 1326.25,-273.83 1158,-218 1148.86,-214.97 1139.63,-211 1130.7,-206.59"/>
-<polygon fill="none" stroke="midnightblue" points="1654.14,-291.57 1664.19,-288.21 1654.24,-284.57 1654.14,-291.57"/>
+<path fill="none" stroke="midnightblue" d="M1751.41,-282.8C1588.39,-274.02 1265.88,-252.83 1158,-218 1148.75,-215.01 1139.41,-211.04 1130.38,-206.6"/>
+<polygon fill="none" stroke="midnightblue" points="1751.26,-286.29 1761.43,-283.33 1751.63,-279.3 1751.26,-286.29"/>
 </g>
 <!-- Node9 -->
 <g id="node9" class="node">
@@ -179,8 +179,8 @@
 <!-- Node1&#45;&gt;Node9 -->
 <g id="edge8" class="edge">
 <title>Node1&#45;&gt;Node9</title>
-<path fill="none" stroke="midnightblue" d="M1654.16,-278.87C1574.3,-269.7 1458.97,-251.71 1363,-218 1357.96,-216.23 1352.87,-214.23 1347.79,-212.07"/>
-<polygon fill="none" stroke="midnightblue" points="1653.88,-282.36 1664.21,-280 1654.66,-275.4 1653.88,-282.36"/>
+<path fill="none" stroke="midnightblue" d="M1751.3,-283.73C1651.72,-277.54 1493.16,-261.18 1363,-218 1357.74,-216.25 1352.43,-214.24 1347.15,-212.04"/>
+<polygon fill="none" stroke="midnightblue" points="1751.15,-287.23 1761.34,-284.33 1751.57,-280.24 1751.15,-287.23"/>
 </g>
 <!-- Node10 -->
 <g id="node10" class="node">
@@ -202,8 +202,8 @@
 <!-- Node1&#45;&gt;Node10 -->
 <g id="edge9" class="edge">
 <title>Node1&#45;&gt;Node10</title>
-<path fill="none" stroke="midnightblue" d="M1654.55,-256.7C1622.99,-245.63 1588.07,-232.32 1557,-218 1552.95,-216.13 1548.84,-214.15 1544.72,-212.09"/>
-<polygon fill="none" stroke="midnightblue" points="1653.63,-260.09 1664.23,-260.06 1655.93,-253.48 1653.63,-260.09"/>
+<path fill="none" stroke="midnightblue" d="M1751.51,-271.63C1693.82,-260.39 1619.77,-242.86 1557,-218 1552.4,-216.18 1547.75,-214.17 1543.12,-212.03"/>
+<polygon fill="none" stroke="midnightblue" points="1750.87,-275.07 1761.35,-273.52 1752.19,-268.19 1750.87,-275.07"/>
 </g>
 <!-- Node11 -->
 <g id="node11" class="node">
@@ -224,8 +224,8 @@
 <!-- Node1&#45;&gt;Node11 -->
 <g id="edge10" class="edge">
 <title>Node1&#45;&gt;Node11</title>
-<path fill="none" stroke="midnightblue" d="M1718.96,-246.21C1709.12,-233.53 1698.25,-219.53 1688.27,-206.66"/>
-<polygon fill="none" stroke="midnightblue" points="1716.36,-248.58 1725.26,-254.33 1721.89,-244.28 1716.36,-248.58"/>
+<path fill="none" stroke="midnightblue" d="M1788.32,-249.04C1767.45,-235.6 1743.86,-220.4 1722.34,-206.53"/>
+<polygon fill="none" stroke="midnightblue" points="1786.47,-252.02 1796.78,-254.49 1790.26,-246.14 1786.47,-252.02"/>
 </g>
 <!-- Node12 -->
 <g id="node12" class="node">
@@ -247,8 +247,8 @@
 <!-- Node1&#45;&gt;Node12 -->
 <g id="edge11" class="edge">
 <title>Node1&#45;&gt;Node12</title>
-<path fill="none" stroke="midnightblue" d="M1783.01,-246.24C1791.44,-235.39 1800.61,-223.57 1809.34,-212.31"/>
-<polygon fill="none" stroke="midnightblue" points="1780.11,-244.28 1776.74,-254.33 1785.64,-248.58 1780.11,-244.28"/>
+<path fill="none" stroke="midnightblue" d="M1848,-244.32C1848,-234 1848,-222.9 1848,-212.31"/>
+<polygon fill="none" stroke="midnightblue" points="1844.5,-244.33 1848,-254.33 1851.5,-244.33 1844.5,-244.33"/>
 </g>
 <!-- Node13 -->
 <g id="node13" class="node">
@@ -269,8 +269,8 @@
 <!-- Node1&#45;&gt;Node13 -->
 <g id="edge12" class="edge">
 <title>Node1&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M1847.45,-256.7C1879.01,-245.63 1913.93,-232.32 1945,-218 1952.58,-214.51 1960.35,-210.62 1968.03,-206.58"/>
-<polygon fill="none" stroke="midnightblue" points="1846.07,-253.48 1837.77,-260.06 1848.37,-260.09 1846.07,-253.48"/>
+<path fill="none" stroke="midnightblue" d="M1907.68,-249.04C1928.55,-235.6 1952.14,-220.4 1973.66,-206.53"/>
+<polygon fill="none" stroke="midnightblue" points="1905.74,-246.14 1899.22,-254.49 1909.53,-252.02 1905.74,-246.14"/>
 </g>
 <!-- Node14 -->
 <g id="node14" class="node">
@@ -292,234 +292,257 @@
 <!-- Node1&#45;&gt;Node14 -->
 <g id="edge13" class="edge">
 <title>Node1&#45;&gt;Node14</title>
-<path fill="none" stroke="midnightblue" d="M1847.65,-279.45C1927.63,-270.62 2043.24,-252.79 2139,-218 2143.83,-216.24 2148.7,-214.26 2153.55,-212.11"/>
-<polygon fill="none" stroke="midnightblue" points="1847.15,-275.98 1837.59,-280.54 1847.9,-282.94 1847.15,-275.98"/>
+<path fill="none" stroke="midnightblue" d="M1944.49,-271.63C2002.18,-260.39 2076.23,-242.86 2139,-218 2143.6,-216.18 2148.25,-214.17 2152.88,-212.03"/>
+<polygon fill="none" stroke="midnightblue" points="1943.81,-268.19 1934.65,-273.52 1945.13,-275.07 1943.81,-268.19"/>
 </g>
 <!-- Node15 -->
 <g id="node15" class="node">
 <title>Node15</title>
-<g id="a_node15"><a xlink:href="classtvm_1_1relax_1_1TupleGetItemPatternNode.html" target="_top" xlink:title="A pattern to match n&#39;th indexing to a tuple.">
-<polygon fill="white" stroke="black" points="2342,-105.5 2342,-217.5 2518,-217.5 2518,-105.5 2342,-105.5"/>
-<text text-anchor="start" x="2350" y="-205.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::TupleGetItem</text>
-<text text-anchor="middle" x="2430" y="-194.5" font-family="Helvetica,sans-Serif" font-size="10.00">PatternNode</text>
-<polyline fill="none" stroke="black" points="2342,-187.5 2518,-187.5 "/>
-<text text-anchor="start" x="2350" y="-175.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ tuple</text>
-<text text-anchor="start" x="2350" y="-164.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ index</text>
-<text text-anchor="start" x="2350" y="-153.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<polyline fill="none" stroke="black" points="2342,-146.5 2518,-146.5 "/>
-<text text-anchor="start" x="2350" y="-134.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ VisitAttrs()</text>
-<text text-anchor="start" x="2350" y="-123.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_FINAL_OBJECT</text>
-<text text-anchor="start" x="2350" y="-112.5" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
+<g id="a_node15"><a xlink:href="classtvm_1_1relax_1_1StructInfoPatternNode.html" target="_top" xlink:title="Pattern for matching a certain struct info.">
+<polygon fill="white" stroke="black" points="2342,-111 2342,-212 2522,-212 2522,-111 2342,-111"/>
+<text text-anchor="middle" x="2432" y="-200" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::StructInfoPatternNode</text>
+<polyline fill="none" stroke="black" points="2342,-193 2522,-193 "/>
+<text text-anchor="start" x="2350" y="-181" font-family="Helvetica,sans-Serif" font-size="10.00">+ pattern</text>
+<text text-anchor="start" x="2350" y="-170" font-family="Helvetica,sans-Serif" font-size="10.00">+ struct_info</text>
+<text text-anchor="start" x="2350" y="-159" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<polyline fill="none" stroke="black" points="2342,-152 2522,-152 "/>
+<text text-anchor="start" x="2350" y="-140" font-family="Helvetica,sans-Serif" font-size="10.00">+ VisitAttrs()</text>
+<text text-anchor="start" x="2350" y="-129" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_FINAL_OBJECT</text>
+<text text-anchor="start" x="2350" y="-118" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node15 -->
 <g id="edge14" class="edge">
 <title>Node1&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M1847.71,-287.64C1965.31,-285.17 2168.47,-272.39 2333,-218 2335.95,-217.03 2338.91,-215.96 2341.86,-214.81"/>
-<polygon fill="none" stroke="midnightblue" points="1847.58,-284.14 1837.65,-287.83 1847.71,-291.14 1847.58,-284.14"/>
+<path fill="none" stroke="midnightblue" d="M1944.82,-284.07C2044.48,-278.14 2203.12,-262 2333,-218 2338.13,-216.26 2343.3,-214.26 2348.45,-212.06"/>
+<polygon fill="none" stroke="midnightblue" points="1944.54,-280.58 1934.76,-284.64 1944.94,-287.57 1944.54,-280.58"/>
 </g>
 <!-- Node16 -->
 <g id="node16" class="node">
 <title>Node16</title>
-<g id="a_node16"><a xlink:href="classtvm_1_1relax_1_1TuplePatternNode.html" target="_top" xlink:title="Pattern to match a tuple of ordered expressions.">
-<polygon fill="white" stroke="black" points="2536,-116.5 2536,-206.5 2712,-206.5 2712,-116.5 2536,-116.5"/>
-<text text-anchor="middle" x="2624" y="-194.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::TuplePatternNode</text>
-<polyline fill="none" stroke="black" points="2536,-187.5 2712,-187.5 "/>
-<text text-anchor="start" x="2544" y="-175.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ fields</text>
-<text text-anchor="start" x="2544" y="-164.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<polyline fill="none" stroke="black" points="2536,-157.5 2712,-157.5 "/>
-<text text-anchor="start" x="2544" y="-145.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ VisitAttrs()</text>
-<text text-anchor="start" x="2544" y="-134.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_FINAL_OBJECT</text>
-<text text-anchor="start" x="2544" y="-123.5" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
+<g id="a_node16"><a xlink:href="classtvm_1_1relax_1_1TupleGetItemPatternNode.html" target="_top" xlink:title="A pattern to match n&#39;th indexing to a tuple.">
+<polygon fill="white" stroke="black" points="2540,-105.5 2540,-217.5 2716,-217.5 2716,-105.5 2540,-105.5"/>
+<text text-anchor="start" x="2548" y="-205.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::TupleGetItem</text>
+<text text-anchor="middle" x="2628" y="-194.5" font-family="Helvetica,sans-Serif" font-size="10.00">PatternNode</text>
+<polyline fill="none" stroke="black" points="2540,-187.5 2716,-187.5 "/>
+<text text-anchor="start" x="2548" y="-175.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ tuple</text>
+<text text-anchor="start" x="2548" y="-164.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ index</text>
+<text text-anchor="start" x="2548" y="-153.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<polyline fill="none" stroke="black" points="2540,-146.5 2716,-146.5 "/>
+<text text-anchor="start" x="2548" y="-134.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ VisitAttrs()</text>
+<text text-anchor="start" x="2548" y="-123.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_FINAL_OBJECT</text>
+<text text-anchor="start" x="2548" y="-112.5" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node16 -->
 <g id="edge15" class="edge">
 <title>Node1&#45;&gt;Node16</title>
-<path fill="none" stroke="midnightblue" d="M1847.93,-283.99C2027.04,-276.64 2402.87,-257.01 2527,-218 2536.44,-215.03 2545.97,-211.05 2555.18,-206.56"/>
-<polygon fill="none" stroke="midnightblue" points="1847.58,-280.5 1837.73,-284.4 1847.86,-287.49 1847.58,-280.5"/>
+<path fill="none" stroke="midnightblue" d="M1945.03,-282.61C2106.82,-273.61 2424.46,-252.19 2531,-218 2533.96,-217.05 2536.92,-216 2539.88,-214.88"/>
+<polygon fill="none" stroke="midnightblue" points="1944.39,-279.14 1934.6,-283.18 1944.78,-286.12 1944.39,-279.14"/>
 </g>
 <!-- Node17 -->
 <g id="node17" class="node">
 <title>Node17</title>
-<g id="a_node17"><a xlink:href="classtvm_1_1relax_1_1TypePatternNode.html" target="_top" xlink:title="Pattern for matching a certain type.">
-<polygon fill="white" stroke="black" points="2730,-111 2730,-212 2906,-212 2906,-111 2730,-111"/>
-<text text-anchor="middle" x="2818" y="-200" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::TypePatternNode</text>
-<polyline fill="none" stroke="black" points="2730,-193 2906,-193 "/>
-<text text-anchor="start" x="2738" y="-181" font-family="Helvetica,sans-Serif" font-size="10.00">+ pattern</text>
-<text text-anchor="start" x="2738" y="-170" font-family="Helvetica,sans-Serif" font-size="10.00">+ type</text>
-<text text-anchor="start" x="2738" y="-159" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<polyline fill="none" stroke="black" points="2730,-152 2906,-152 "/>
-<text text-anchor="start" x="2738" y="-140" font-family="Helvetica,sans-Serif" font-size="10.00">+ VisitAttrs()</text>
-<text text-anchor="start" x="2738" y="-129" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_FINAL_OBJECT</text>
-<text text-anchor="start" x="2738" y="-118" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
+<g id="a_node17"><a xlink:href="classtvm_1_1relax_1_1TuplePatternNode.html" target="_top" xlink:title="Pattern to match a tuple of ordered expressions.">
+<polygon fill="white" stroke="black" points="2734,-116.5 2734,-206.5 2910,-206.5 2910,-116.5 2734,-116.5"/>
+<text text-anchor="middle" x="2822" y="-194.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::TuplePatternNode</text>
+<polyline fill="none" stroke="black" points="2734,-187.5 2910,-187.5 "/>
+<text text-anchor="start" x="2742" y="-175.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ fields</text>
+<text text-anchor="start" x="2742" y="-164.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<polyline fill="none" stroke="black" points="2734,-157.5 2910,-157.5 "/>
+<text text-anchor="start" x="2742" y="-145.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ VisitAttrs()</text>
+<text text-anchor="start" x="2742" y="-134.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_FINAL_OBJECT</text>
+<text text-anchor="start" x="2742" y="-123.5" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node17 -->
 <g id="edge16" class="edge">
 <title>Node1&#45;&gt;Node17</title>
-<path fill="none" stroke="midnightblue" d="M1848.01,-286.01C2060.27,-281.88 2559.81,-267.09 2721,-218 2726.48,-216.33 2731.98,-214.31 2737.43,-212.04"/>
-<polygon fill="none" stroke="midnightblue" points="1847.75,-282.52 1837.81,-286.21 1847.88,-289.52 1847.75,-282.52"/>
+<path fill="none" stroke="midnightblue" d="M1944.62,-285.16C2141.27,-279.54 2581.55,-262.28 2725,-218 2734.55,-215.05 2744.18,-211.05 2753.47,-206.52"/>
+<polygon fill="none" stroke="midnightblue" points="1944.48,-281.66 1934.59,-285.44 1944.68,-288.66 1944.48,-281.66"/>
 </g>
 <!-- Node18 -->
 <g id="node18" class="node">
 <title>Node18</title>
-<g id="a_node18"><a xlink:href="classtvm_1_1relax_1_1UnorderedTuplePatternNode.html" target="_top" xlink:title="A pattern to match multiple expressions unorderedly.">
-<polygon fill="white" stroke="black" points="2924,-111 2924,-212 3100,-212 3100,-111 2924,-111"/>
-<text text-anchor="start" x="2932" y="-200" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::UnorderedTuple</text>
-<text text-anchor="middle" x="3012" y="-189" font-family="Helvetica,sans-Serif" font-size="10.00">PatternNode</text>
-<polyline fill="none" stroke="black" points="2924,-182 3100,-182 "/>
-<text text-anchor="start" x="2932" y="-170" font-family="Helvetica,sans-Serif" font-size="10.00">+ fields</text>
-<text text-anchor="start" x="2932" y="-159" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<polyline fill="none" stroke="black" points="2924,-152 3100,-152 "/>
-<text text-anchor="start" x="2932" y="-140" font-family="Helvetica,sans-Serif" font-size="10.00">+ VisitAttrs()</text>
-<text text-anchor="start" x="2932" y="-129" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_FINAL_OBJECT</text>
-<text text-anchor="start" x="2932" y="-118" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
+<g id="a_node18"><a xlink:href="classtvm_1_1relax_1_1TypePatternNode.html" target="_top" xlink:title="Pattern for matching a certain type.">
+<polygon fill="white" stroke="black" points="2928,-111 2928,-212 3104,-212 3104,-111 2928,-111"/>
+<text text-anchor="middle" x="3016" y="-200" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::TypePatternNode</text>
+<polyline fill="none" stroke="black" points="2928,-193 3104,-193 "/>
+<text text-anchor="start" x="2936" y="-181" font-family="Helvetica,sans-Serif" font-size="10.00">+ pattern</text>
+<text text-anchor="start" x="2936" y="-170" font-family="Helvetica,sans-Serif" font-size="10.00">+ type</text>
+<text text-anchor="start" x="2936" y="-159" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<polyline fill="none" stroke="black" points="2928,-152 3104,-152 "/>
+<text text-anchor="start" x="2936" y="-140" font-family="Helvetica,sans-Serif" font-size="10.00">+ VisitAttrs()</text>
+<text text-anchor="start" x="2936" y="-129" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_FINAL_OBJECT</text>
+<text text-anchor="start" x="2936" y="-118" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node18 -->
 <g id="edge17" class="edge">
 <title>Node1&#45;&gt;Node18</title>
-<path fill="none" stroke="midnightblue" d="M1847.75,-287.38C2089.77,-286.18 2716.21,-277.25 2915,-218 2920.58,-216.34 2926.18,-214.3 2931.73,-212"/>
-<polygon fill="none" stroke="midnightblue" points="1847.55,-283.88 1837.56,-287.43 1847.58,-290.88 1847.55,-283.88"/>
+<path fill="none" stroke="midnightblue" d="M1945.06,-286.78C2173.29,-284.21 2738.33,-272.36 2919,-218 2924.48,-216.35 2929.99,-214.35 2935.44,-212.09"/>
+<polygon fill="none" stroke="midnightblue" points="1944.74,-283.29 1934.78,-286.9 1944.82,-290.29 1944.74,-283.29"/>
 </g>
 <!-- Node19 -->
 <g id="node19" class="node">
 <title>Node19</title>
-<g id="a_node19"><a xlink:href="classtvm_1_1relax_1_1VarPatternNode.html" target="_top" xlink:title="A Pattern to Match a Relax Variable.">
-<polygon fill="white" stroke="black" points="3118.5,-111 3118.5,-212 3291.5,-212 3291.5,-111 3118.5,-111"/>
-<text text-anchor="middle" x="3205" y="-200" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::VarPatternNode</text>
-<polyline fill="none" stroke="black" points="3118.5,-193 3291.5,-193 "/>
-<text text-anchor="start" x="3126.5" y="-181" font-family="Helvetica,sans-Serif" font-size="10.00">+ name</text>
-<text text-anchor="start" x="3126.5" y="-170" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<polyline fill="none" stroke="black" points="3118.5,-163 3291.5,-163 "/>
-<text text-anchor="start" x="3126.5" y="-151" font-family="Helvetica,sans-Serif" font-size="10.00">+ name_hint()</text>
-<text text-anchor="start" x="3126.5" y="-140" font-family="Helvetica,sans-Serif" font-size="10.00">+ VisitAttrs()</text>
-<text text-anchor="start" x="3126.5" y="-129" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT</text>
-<text text-anchor="start" x="3126.5" y="-118" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
+<g id="a_node19"><a xlink:href="classtvm_1_1relax_1_1UnorderedTuplePatternNode.html" target="_top" xlink:title="A pattern to match multiple expressions unorderedly.">
+<polygon fill="white" stroke="black" points="3122,-111 3122,-212 3298,-212 3298,-111 3122,-111"/>
+<text text-anchor="start" x="3130" y="-200" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::UnorderedTuple</text>
+<text text-anchor="middle" x="3210" y="-189" font-family="Helvetica,sans-Serif" font-size="10.00">PatternNode</text>
+<polyline fill="none" stroke="black" points="3122,-182 3298,-182 "/>
+<text text-anchor="start" x="3130" y="-170" font-family="Helvetica,sans-Serif" font-size="10.00">+ fields</text>
+<text text-anchor="start" x="3130" y="-159" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<polyline fill="none" stroke="black" points="3122,-152 3298,-152 "/>
+<text text-anchor="start" x="3130" y="-140" font-family="Helvetica,sans-Serif" font-size="10.00">+ VisitAttrs()</text>
+<text text-anchor="start" x="3130" y="-129" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_FINAL_OBJECT</text>
+<text text-anchor="start" x="3130" y="-118" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node19 -->
 <g id="edge18" class="edge">
 <title>Node1&#45;&gt;Node19</title>
-<path fill="none" stroke="midnightblue" d="M1848,-285.17C2138.55,-277.8 2989.17,-253.45 3109,-218 3114.54,-216.36 3120.1,-214.34 3125.59,-212.06"/>
-<polygon fill="none" stroke="midnightblue" points="1847.81,-281.67 1837.9,-285.42 1847.99,-288.67 1847.81,-281.67"/>
+<path fill="none" stroke="midnightblue" d="M1944.9,-287.93C2201.62,-288.14 2894.57,-282.54 3113,-218 3118.58,-216.35 3124.19,-214.33 3129.74,-212.04"/>
+<polygon fill="none" stroke="midnightblue" points="1944.85,-284.43 1934.84,-287.91 1944.84,-291.43 1944.85,-284.43"/>
 </g>
-<!-- Node22 -->
-<g id="node22" class="node">
-<title>Node22</title>
-<g id="a_node22"><a xlink:href="classtvm_1_1relax_1_1WildcardPatternNode.html" target="_top" xlink:title="Wildcard Pattern is a pattern that can match anything.">
-<polygon fill="white" stroke="black" points="3310,-122 3310,-201 3486,-201 3486,-122 3310,-122"/>
-<text text-anchor="middle" x="3398" y="-189" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::WildcardPatternNode</text>
-<polyline fill="none" stroke="black" points="3310,-182 3486,-182 "/>
-<text text-anchor="start" x="3318" y="-170" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<polyline fill="none" stroke="black" points="3310,-163 3486,-163 "/>
-<text text-anchor="start" x="3318" y="-151" font-family="Helvetica,sans-Serif" font-size="10.00">+ VisitAttrs()</text>
-<text text-anchor="start" x="3318" y="-140" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_FINAL_OBJECT</text>
-<text text-anchor="start" x="3318" y="-129" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
+<!-- Node20 -->
+<g id="node20" class="node">
+<title>Node20</title>
+<g id="a_node20"><a xlink:href="classtvm_1_1relax_1_1VarPatternNode.html" target="_top" xlink:title="A Pattern to Match a Relax Variable.">
+<polygon fill="white" stroke="black" points="3316.5,-111 3316.5,-212 3489.5,-212 3489.5,-111 3316.5,-111"/>
+<text text-anchor="middle" x="3403" y="-200" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::VarPatternNode</text>
+<polyline fill="none" stroke="black" points="3316.5,-193 3489.5,-193 "/>
+<text text-anchor="start" x="3324.5" y="-181" font-family="Helvetica,sans-Serif" font-size="10.00">+ name</text>
+<text text-anchor="start" x="3324.5" y="-170" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<polyline fill="none" stroke="black" points="3316.5,-163 3489.5,-163 "/>
+<text text-anchor="start" x="3324.5" y="-151" font-family="Helvetica,sans-Serif" font-size="10.00">+ name_hint()</text>
+<text text-anchor="start" x="3324.5" y="-140" font-family="Helvetica,sans-Serif" font-size="10.00">+ VisitAttrs()</text>
+<text text-anchor="start" x="3324.5" y="-129" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT</text>
+<text text-anchor="start" x="3324.5" y="-118" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
 </a>
 </g>
 </g>
-<!-- Node1&#45;&gt;Node22 -->
-<g id="edge21" class="edge">
-<title>Node1&#45;&gt;Node22</title>
-<path fill="none" stroke="midnightblue" d="M1847.69,-285.78C2164.82,-279.79 3161.08,-257.96 3300,-218 3313.62,-214.08 3327.39,-207.93 3340.13,-201.13"/>
-<polygon fill="none" stroke="midnightblue" points="1847.53,-282.29 1837.6,-285.97 1847.66,-289.28 1847.53,-282.29"/>
+<!-- Node1&#45;&gt;Node20 -->
+<g id="edge19" class="edge">
+<title>Node1&#45;&gt;Node20</title>
+<path fill="none" stroke="midnightblue" d="M1944.76,-285.54C2249.53,-279 3177.17,-256.16 3307,-218 3312.54,-216.37 3318.1,-214.36 3323.6,-212.08"/>
+<polygon fill="none" stroke="midnightblue" points="1944.54,-282.04 1934.62,-285.76 1944.69,-289.04 1944.54,-282.04"/>
+</g>
+<!-- Node23 -->
+<g id="node23" class="node">
+<title>Node23</title>
+<g id="a_node23"><a xlink:href="classtvm_1_1relax_1_1WildcardPatternNode.html" target="_top" xlink:title="Wildcard Pattern is a pattern that can match anything.">
+<polygon fill="white" stroke="black" points="3508,-122 3508,-201 3684,-201 3684,-122 3508,-122"/>
+<text text-anchor="middle" x="3596" y="-189" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::WildcardPatternNode</text>
+<polyline fill="none" stroke="black" points="3508,-182 3684,-182 "/>
+<text text-anchor="start" x="3516" y="-170" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<polyline fill="none" stroke="black" points="3508,-163 3684,-163 "/>
+<text text-anchor="start" x="3516" y="-151" font-family="Helvetica,sans-Serif" font-size="10.00">+ VisitAttrs()</text>
+<text text-anchor="start" x="3516" y="-140" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_FINAL_OBJECT</text>
+<text text-anchor="start" x="3516" y="-129" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
+</a>
+</g>
+</g>
+<!-- Node1&#45;&gt;Node23 -->
+<g id="edge22" class="edge">
+<title>Node1&#45;&gt;Node23</title>
+<path fill="none" stroke="midnightblue" d="M1944.73,-286.07C2275.48,-280.81 3349.06,-260.62 3498,-218 3511.72,-214.07 3525.59,-207.87 3538.4,-201.02"/>
+<polygon fill="none" stroke="midnightblue" points="1944.64,-282.57 1934.7,-286.23 1944.75,-289.57 1944.64,-282.57"/>
 </g>
 <!-- Node2 -->
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1runtime_1_1Object.html" target="_top" xlink:title="base class of all object containers.">
-<polygon fill="white" stroke="black" points="1659,-359.5 1659,-757.5 1843,-757.5 1843,-359.5 1659,-359.5"/>
-<text text-anchor="middle" x="1751" y="-745.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::Object</text>
-<polyline fill="none" stroke="black" points="1659,-738.5 1843,-738.5 "/>
-<text text-anchor="start" x="1667" y="-726.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<text text-anchor="start" x="1667" y="-715.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_final</text>
-<text text-anchor="start" x="1667" y="-704.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_child_slots</text>
-<text text-anchor="start" x="1667" y="-693.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_child_slots_can</text>
-<text text-anchor="start" x="1667" y="-682.5" font-family="Helvetica,sans-Serif" font-size="10.00">_overflow</text>
-<text text-anchor="start" x="1667" y="-671.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_visit</text>
-<text text-anchor="start" x="1667" y="-660.5" font-family="Helvetica,sans-Serif" font-size="10.00">_attrs</text>
-<text text-anchor="start" x="1667" y="-649.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_sequal</text>
-<text text-anchor="start" x="1667" y="-638.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
-<text text-anchor="start" x="1667" y="-627.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_shash</text>
-<text text-anchor="start" x="1667" y="-616.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
-<text text-anchor="start" x="1667" y="-605.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_index</text>
-<text text-anchor="start" x="1667" y="-594.5" font-family="Helvetica,sans-Serif" font-size="10.00"># type_index_</text>
-<text text-anchor="start" x="1667" y="-583.5" font-family="Helvetica,sans-Serif" font-size="10.00"># ref_counter_</text>
-<text text-anchor="start" x="1667" y="-572.5" font-family="Helvetica,sans-Serif" font-size="10.00"># deleter_</text>
-<polyline fill="none" stroke="black" points="1659,-565.5 1843,-565.5 "/>
-<text text-anchor="start" x="1667" y="-553.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ type_index()</text>
-<text text-anchor="start" x="1667" y="-542.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetTypeKey()</text>
-<text text-anchor="start" x="1667" y="-531.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetTypeKeyHash()</text>
-<text text-anchor="start" x="1667" y="-520.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ IsInstance()</text>
-<text text-anchor="start" x="1667" y="-509.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="1667" y="-498.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Object()</text>
-<text text-anchor="start" x="1667" y="-487.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Object()</text>
-<text text-anchor="start" x="1667" y="-476.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Object()</text>
-<text text-anchor="start" x="1667" y="-465.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
-<text text-anchor="start" x="1667" y="-454.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
-<text text-anchor="start" x="1667" y="-443.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeIndex2Key()</text>
-<text text-anchor="start" x="1667" y="-432.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeIndex2KeyHash()</text>
-<text text-anchor="start" x="1667" y="-421.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeKey2Index()</text>
-<text text-anchor="start" x="1667" y="-410.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _GetOrAllocRuntimeTypeIndex()</text>
-<text text-anchor="start" x="1667" y="-399.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ RuntimeTypeIndex()</text>
-<text text-anchor="start" x="1667" y="-388.5" font-family="Helvetica,sans-Serif" font-size="10.00"># IncRef()</text>
-<text text-anchor="start" x="1667" y="-377.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DecRef()</text>
-<text text-anchor="start" x="1667" y="-366.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetOrAllocRuntimeTypeIndex()</text>
+<polygon fill="white" stroke="black" points="1756,-359.5 1756,-757.5 1940,-757.5 1940,-359.5 1756,-359.5"/>
+<text text-anchor="middle" x="1848" y="-745.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::Object</text>
+<polyline fill="none" stroke="black" points="1756,-738.5 1940,-738.5 "/>
+<text text-anchor="start" x="1764" y="-726.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<text text-anchor="start" x="1764" y="-715.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_final</text>
+<text text-anchor="start" x="1764" y="-704.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_child_slots</text>
+<text text-anchor="start" x="1764" y="-693.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_child_slots_can</text>
+<text text-anchor="start" x="1764" y="-682.5" font-family="Helvetica,sans-Serif" font-size="10.00">_overflow</text>
+<text text-anchor="start" x="1764" y="-671.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_visit</text>
+<text text-anchor="start" x="1764" y="-660.5" font-family="Helvetica,sans-Serif" font-size="10.00">_attrs</text>
+<text text-anchor="start" x="1764" y="-649.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_sequal</text>
+<text text-anchor="start" x="1764" y="-638.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
+<text text-anchor="start" x="1764" y="-627.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_shash</text>
+<text text-anchor="start" x="1764" y="-616.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
+<text text-anchor="start" x="1764" y="-605.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_index</text>
+<text text-anchor="start" x="1764" y="-594.5" font-family="Helvetica,sans-Serif" font-size="10.00"># type_index_</text>
+<text text-anchor="start" x="1764" y="-583.5" font-family="Helvetica,sans-Serif" font-size="10.00"># ref_counter_</text>
+<text text-anchor="start" x="1764" y="-572.5" font-family="Helvetica,sans-Serif" font-size="10.00"># deleter_</text>
+<polyline fill="none" stroke="black" points="1756,-565.5 1940,-565.5 "/>
+<text text-anchor="start" x="1764" y="-553.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ type_index()</text>
+<text text-anchor="start" x="1764" y="-542.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetTypeKey()</text>
+<text text-anchor="start" x="1764" y="-531.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetTypeKeyHash()</text>
+<text text-anchor="start" x="1764" y="-520.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ IsInstance()</text>
+<text text-anchor="start" x="1764" y="-509.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="1764" y="-498.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Object()</text>
+<text text-anchor="start" x="1764" y="-487.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Object()</text>
+<text text-anchor="start" x="1764" y="-476.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Object()</text>
+<text text-anchor="start" x="1764" y="-465.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
+<text text-anchor="start" x="1764" y="-454.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
+<text text-anchor="start" x="1764" y="-443.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeIndex2Key()</text>
+<text text-anchor="start" x="1764" y="-432.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeIndex2KeyHash()</text>
+<text text-anchor="start" x="1764" y="-421.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeKey2Index()</text>
+<text text-anchor="start" x="1764" y="-410.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _GetOrAllocRuntimeTypeIndex()</text>
+<text text-anchor="start" x="1764" y="-399.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ RuntimeTypeIndex()</text>
+<text text-anchor="start" x="1764" y="-388.5" font-family="Helvetica,sans-Serif" font-size="10.00"># IncRef()</text>
+<text text-anchor="start" x="1764" y="-377.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DecRef()</text>
+<text text-anchor="start" x="1764" y="-366.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetOrAllocRuntimeTypeIndex()</text>
 </a>
 </g>
 </g>
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M1751,-348.99C1751,-339.42 1751,-330.6 1751,-322.84"/>
-<polygon fill="none" stroke="midnightblue" points="1747.5,-349.21 1751,-359.21 1754.5,-349.21 1747.5,-349.21"/>
-</g>
-<!-- Node20 -->
-<g id="node20" class="node">
-<title>Node20</title>
-<g id="a_node20"><a xlink:href="classtvm_1_1relax_1_1DataflowVarPatternNode.html" target="_top" xlink:title="A Pattern to Match a Relax Dataflow Variable.">
-<polygon fill="white" stroke="black" points="3007,-0.5 3007,-68.5 3199,-68.5 3199,-0.5 3007,-0.5"/>
-<text text-anchor="middle" x="3103" y="-56.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DataflowVarPatternNode</text>
-<polyline fill="none" stroke="black" points="3007,-49.5 3199,-49.5 "/>
-<text text-anchor="start" x="3015" y="-37.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<polyline fill="none" stroke="black" points="3007,-30.5 3199,-30.5 "/>
-<text text-anchor="start" x="3015" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_FINAL_OBJECT</text>
-<text text-anchor="start" x="3015" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
-</a>
-</g>
-</g>
-<!-- Node19&#45;&gt;Node20 -->
-<g id="edge19" class="edge">
-<title>Node19&#45;&gt;Node20</title>
-<path fill="none" stroke="midnightblue" d="M3157.83,-102.7C3148.29,-91 3138.56,-79.08 3130.01,-68.6"/>
-<polygon fill="none" stroke="midnightblue" points="3155.36,-105.2 3164.39,-110.74 3160.78,-100.78 3155.36,-105.2"/>
+<path fill="none" stroke="midnightblue" d="M1848,-348.99C1848,-339.42 1848,-330.6 1848,-322.84"/>
+<polygon fill="none" stroke="midnightblue" points="1844.5,-349.21 1848,-359.21 1851.5,-349.21 1844.5,-349.21"/>
 </g>
 <!-- Node21 -->
 <g id="node21" class="node">
 <title>Node21</title>
-<g id="a_node21"><a xlink:href="classtvm_1_1relax_1_1GlobalVarPatternNode.html" target="_top" xlink:title="A Pattern to Match a Relax Global Variable.">
-<polygon fill="white" stroke="black" points="3217,-0.5 3217,-68.5 3397,-68.5 3397,-0.5 3217,-0.5"/>
-<text text-anchor="middle" x="3307" y="-56.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::GlobalVarPatternNode</text>
-<polyline fill="none" stroke="black" points="3217,-49.5 3397,-49.5 "/>
-<text text-anchor="start" x="3225" y="-37.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<polyline fill="none" stroke="black" points="3217,-30.5 3397,-30.5 "/>
-<text text-anchor="start" x="3225" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_FINAL_OBJECT</text>
-<text text-anchor="start" x="3225" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
+<g id="a_node21"><a xlink:href="classtvm_1_1relax_1_1DataflowVarPatternNode.html" target="_top" xlink:title="A Pattern to Match a Relax Dataflow Variable.">
+<polygon fill="white" stroke="black" points="3205,-0.5 3205,-68.5 3397,-68.5 3397,-0.5 3205,-0.5"/>
+<text text-anchor="middle" x="3301" y="-56.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DataflowVarPatternNode</text>
+<polyline fill="none" stroke="black" points="3205,-49.5 3397,-49.5 "/>
+<text text-anchor="start" x="3213" y="-37.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<polyline fill="none" stroke="black" points="3205,-30.5 3397,-30.5 "/>
+<text text-anchor="start" x="3213" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_FINAL_OBJECT</text>
+<text text-anchor="start" x="3213" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
 </a>
 </g>
 </g>
-<!-- Node19&#45;&gt;Node21 -->
+<!-- Node20&#45;&gt;Node21 -->
 <g id="edge20" class="edge">
-<title>Node19&#45;&gt;Node21</title>
-<path fill="none" stroke="midnightblue" d="M3252.17,-102.7C3261.71,-91 3271.44,-79.08 3279.99,-68.6"/>
-<polygon fill="none" stroke="midnightblue" points="3249.22,-100.78 3245.61,-110.74 3254.64,-105.2 3249.22,-100.78"/>
+<title>Node20&#45;&gt;Node21</title>
+<path fill="none" stroke="midnightblue" d="M3355.83,-102.7C3346.29,-91 3336.56,-79.08 3328.01,-68.6"/>
+<polygon fill="none" stroke="midnightblue" points="3353.36,-105.2 3362.39,-110.74 3358.78,-100.78 3353.36,-105.2"/>
+</g>
+<!-- Node22 -->
+<g id="node22" class="node">
+<title>Node22</title>
+<g id="a_node22"><a xlink:href="classtvm_1_1relax_1_1GlobalVarPatternNode.html" target="_top" xlink:title="A Pattern to Match a Relax Global Variable.">
+<polygon fill="white" stroke="black" points="3415,-0.5 3415,-68.5 3595,-68.5 3595,-0.5 3415,-0.5"/>
+<text text-anchor="middle" x="3505" y="-56.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::GlobalVarPatternNode</text>
+<polyline fill="none" stroke="black" points="3415,-49.5 3595,-49.5 "/>
+<text text-anchor="start" x="3423" y="-37.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<polyline fill="none" stroke="black" points="3415,-30.5 3595,-30.5 "/>
+<text text-anchor="start" x="3423" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_FINAL_OBJECT</text>
+<text text-anchor="start" x="3423" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
+</a>
+</g>
+</g>
+<!-- Node20&#45;&gt;Node22 -->
+<g id="edge21" class="edge">
+<title>Node20&#45;&gt;Node22</title>
+<path fill="none" stroke="midnightblue" d="M3450.17,-102.7C3459.71,-91 3469.44,-79.08 3477.99,-68.6"/>
+<polygon fill="none" stroke="midnightblue" points="3447.22,-100.78 3443.61,-110.74 3452.64,-105.2 3447.22,-100.78"/>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternVisitor-members.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternVisitor-members.html
index ef248dc8a7..604d50e1e6 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternVisitor-members.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternVisitor-members.html
@@ -85,15 +85,16 @@ $(function() {
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#a0e962180e9fcc433125d715ab844e34c">VisitDFPattern_</a>(const ShapePatternNode *op) override</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html">tvm::relax::DFPatternVisitor</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#aaebab0a70adb1a7f039fc8d0b19ca171">VisitDFPattern_</a>(const TupleGetItemPatternNode *op) override</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html">tvm::relax::DFPatternVisitor</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#a76f9eced0aed3ad3f557a9b2e7784a0a">VisitDFPattern_</a>(const TuplePatternNode *op) override</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html">tvm::relax::DFPatternVisitor</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#ad974c372c32c1049add9ccf94519f6aa">VisitDFPattern_</a>(const TypePatternNode *op) override</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html">tvm::relax::DFPatternVisitor</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#abbc6bab2c26ee9110f9a2d73505e6281">VisitDFPattern_</a>(const WildcardPatternNode *op) override</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html">tvm::relax::DFPatternVisitor</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#a82d40b15df29503cb9391fe650e9dcb0">VisitDFPattern_</a>(const VarPatternNode *op) override</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html">tvm::relax::DFPatternVisitor</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#ad41baf8d4322c7b0a65f7aa2537c52d3">VisitDFPattern_</a>(const DataflowVarPatternNode *op) override</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html">tvm::relax::DFPatternVisitor</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#acc99f0d46d4a979d78f27180f3f7d542">VisitDFPattern_</a>(const GlobalVarPatternNode *op) override</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html">tvm::relax::DFPatternVisitor</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#a5312afdea9178495695fd97820a777c4">VisitDFPattern_</a>(const ExternFuncPatternNode *op) override</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html">tvm::relax::DFPatternVisitor</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#ad349f38a08793183ba8207b1584dbdcf">VisitDFPattern_</a>(const PrimArrPatternNode *op) override</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html">tvm::relax::DFPatternVisitor</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#aaac45c53ed45a7e90846d4ba1f08c753">VisitDFPattern_</a>(const UnorderedTuplePatternNode *op) override</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html">tvm::relax::DFPatternVisitor</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#aefd951ddd9f1a5926da2499d6bd1a33b">visited_</a></td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html">tvm::relax::DFPatternVisitor</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#aed1378b983a4ea438e0ae8f58788e4d0">VisitDFPattern_</a>(const StructInfoPatternNode *op) override</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html">tvm::relax::DFPatternVisitor</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#ad974c372c32c1049add9ccf94519f6aa">VisitDFPattern_</a>(const TypePatternNode *op) override</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html">tvm::relax::DFPatternVisitor</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#abbc6bab2c26ee9110f9a2d73505e6281">VisitDFPattern_</a>(const WildcardPatternNode *op) override</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html">tvm::relax::DFPatternVisitor</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#a82d40b15df29503cb9391fe650e9dcb0">VisitDFPattern_</a>(const VarPatternNode *op) override</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html">tvm::relax::DFPatternVisitor</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#ad41baf8d4322c7b0a65f7aa2537c52d3">VisitDFPattern_</a>(const DataflowVarPatternNode *op) override</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html">tvm::relax::DFPatternVisitor</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#acc99f0d46d4a979d78f27180f3f7d542">VisitDFPattern_</a>(const GlobalVarPatternNode *op) override</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html">tvm::relax::DFPatternVisitor</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#a5312afdea9178495695fd97820a777c4">VisitDFPattern_</a>(const ExternFuncPatternNode *op) override</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html">tvm::relax::DFPatternVisitor</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#ad349f38a08793183ba8207b1584dbdcf">VisitDFPattern_</a>(const PrimArrPatternNode *op) override</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html">tvm::relax::DFPatternVisitor</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#aaac45c53ed45a7e90846d4ba1f08c753">VisitDFPattern_</a>(const UnorderedTuplePatternNode *op) override</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html">tvm::relax::DFPatternVisitor</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#aefd951ddd9f1a5926da2499d6bd1a33b">visited_</a></td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html">tvm::relax::DFPatternVisitor</a></td><td class="entry"><span class="mlabel">protected</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternVisitor.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternVisitor.html
index b643764378..5b4929bb70 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternVisitor.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternVisitor.html
@@ -119,6 +119,8 @@ Public Member Functions</h2></td></tr>
 <tr class="separator:aaebab0a70adb1a7f039fc8d0b19ca171"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a76f9eced0aed3ad3f557a9b2e7784a0a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#a76f9eced0aed3ad3f557a9b2e7784a0a">VisitDFPattern_</a> (const <a class="el" href="classtvm_1_1relax_1_1TuplePatternNode.html">TuplePatternNode</a> *op) override</td></tr>
 <tr class="separator:a76f9eced0aed3ad3f557a9b2e7784a0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aed1378b983a4ea438e0ae8f58788e4d0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#aed1378b983a4ea438e0ae8f58788e4d0">VisitDFPattern_</a> (const <a class="el" href="classtvm_1_1relax_1_1StructInfoPatternNode.html">StructInfoPatternNode</a> *op) override</td></tr>
+<tr class="separator:aed1378b983a4ea438e0ae8f58788e4d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ad974c372c32c1049add9ccf94519f6aa"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#ad974c372c32c1049add9ccf94519f6aa">VisitDFPattern_</a> (const <a class="el" href="classtvm_1_1relax_1_1TypePatternNode.html">TypePatternNode</a> *op) override</td></tr>
 <tr class="separator:ad974c372c32c1049add9ccf94519f6aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:abbc6bab2c26ee9110f9a2d73505e6281"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPatternVisitor.html#abbc6bab2c26ee9110f9a2d73505e6281">VisitDFPattern_</a> (const <a class="el" href="classtvm_1_1relax_1_1WildcardPatternNode.html">WildcardPatternNode</a> *op) override</td></tr>
@@ -172,7 +174,7 @@ Protected Attributes</h2></td></tr>
 </div>
 </div>
 <a id="a649ba78dc6095872bd07be7a3948a448"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a649ba78dc6095872bd07be7a3948a448">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[1/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a649ba78dc6095872bd07be7a3948a448">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[1/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -198,7 +200,7 @@ Protected Attributes</h2></td></tr>
 </div>
 </div>
 <a id="a83942da7015e2f6e4cc7ad0212f0ee7d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a83942da7015e2f6e4cc7ad0212f0ee7d">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[2/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a83942da7015e2f6e4cc7ad0212f0ee7d">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[2/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -224,7 +226,7 @@ Protected Attributes</h2></td></tr>
 </div>
 </div>
 <a id="ae0268a3c96a42caeeee9e41566ed720d"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ae0268a3c96a42caeeee9e41566ed720d">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[3/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#ae0268a3c96a42caeeee9e41566ed720d">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[3/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -250,7 +252,7 @@ Protected Attributes</h2></td></tr>
 </div>
 </div>
 <a id="a9c6796dfedda7e201b370d7e0ac5ce5f"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9c6796dfedda7e201b370d7e0ac5ce5f">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[4/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a9c6796dfedda7e201b370d7e0ac5ce5f">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[4/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -276,7 +278,7 @@ Protected Attributes</h2></td></tr>
 </div>
 </div>
 <a id="ad41baf8d4322c7b0a65f7aa2537c52d3"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad41baf8d4322c7b0a65f7aa2537c52d3">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[5/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#ad41baf8d4322c7b0a65f7aa2537c52d3">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[5/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -302,7 +304,7 @@ Protected Attributes</h2></td></tr>
 </div>
 </div>
 <a id="ab4b88031cace82ff3e885b319796eaa0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ab4b88031cace82ff3e885b319796eaa0">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[6/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#ab4b88031cace82ff3e885b319796eaa0">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[6/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -328,7 +330,7 @@ Protected Attributes</h2></td></tr>
 </div>
 </div>
 <a id="a9940f28e3279123c56e9d223b5053c1b"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a9940f28e3279123c56e9d223b5053c1b">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[7/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a9940f28e3279123c56e9d223b5053c1b">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[7/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -354,7 +356,7 @@ Protected Attributes</h2></td></tr>
 </div>
 </div>
 <a id="a5312afdea9178495695fd97820a777c4"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a5312afdea9178495695fd97820a777c4">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[8/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a5312afdea9178495695fd97820a777c4">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[8/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -380,7 +382,7 @@ Protected Attributes</h2></td></tr>
 </div>
 </div>
 <a id="a19e55b1099f7b9e860ce20cf15592c43"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a19e55b1099f7b9e860ce20cf15592c43">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[9/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a19e55b1099f7b9e860ce20cf15592c43">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[9/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -406,7 +408,7 @@ Protected Attributes</h2></td></tr>
 </div>
 </div>
 <a id="acc99f0d46d4a979d78f27180f3f7d542"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#acc99f0d46d4a979d78f27180f3f7d542">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[10/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#acc99f0d46d4a979d78f27180f3f7d542">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[10/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -432,7 +434,7 @@ Protected Attributes</h2></td></tr>
 </div>
 </div>
 <a id="a09e46bc98fa9db0c99d0047ab20b019e"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a09e46bc98fa9db0c99d0047ab20b019e">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[11/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a09e46bc98fa9db0c99d0047ab20b019e">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[11/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -458,7 +460,7 @@ Protected Attributes</h2></td></tr>
 </div>
 </div>
 <a id="a3971d8621ac72ec69a64cd09f3b5ed72"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a3971d8621ac72ec69a64cd09f3b5ed72">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[12/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a3971d8621ac72ec69a64cd09f3b5ed72">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[12/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -484,7 +486,7 @@ Protected Attributes</h2></td></tr>
 </div>
 </div>
 <a id="ad349f38a08793183ba8207b1584dbdcf"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad349f38a08793183ba8207b1584dbdcf">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[13/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#ad349f38a08793183ba8207b1584dbdcf">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[13/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -510,7 +512,7 @@ Protected Attributes</h2></td></tr>
 </div>
 </div>
 <a id="a0e962180e9fcc433125d715ab844e34c"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a0e962180e9fcc433125d715ab844e34c">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[14/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a0e962180e9fcc433125d715ab844e34c">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[14/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -533,10 +535,36 @@ Protected Attributes</h2></td></tr>
 </table>
 </div><div class="memdoc">
 
+</div>
+</div>
+<a id="aed1378b983a4ea438e0ae8f58788e4d0"></a>
+<h2 class="memtitle"><span class="permalink"><a href="#aed1378b983a4ea438e0ae8f58788e4d0">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[15/21]</span></h2>
+
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">void tvm::relax::DFPatternVisitor::VisitDFPattern_ </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classtvm_1_1relax_1_1StructInfoPatternNode.html">StructInfoPatternNode</a> *&#160;</td>
+          <td class="paramname"><em>op</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">override</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
 </div>
 </div>
 <a id="aaebab0a70adb1a7f039fc8d0b19ca171"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aaebab0a70adb1a7f039fc8d0b19ca171">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[15/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#aaebab0a70adb1a7f039fc8d0b19ca171">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[16/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -562,7 +590,7 @@ Protected Attributes</h2></td></tr>
 </div>
 </div>
 <a id="a76f9eced0aed3ad3f557a9b2e7784a0a"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a76f9eced0aed3ad3f557a9b2e7784a0a">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[16/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a76f9eced0aed3ad3f557a9b2e7784a0a">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[17/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -588,7 +616,7 @@ Protected Attributes</h2></td></tr>
 </div>
 </div>
 <a id="ad974c372c32c1049add9ccf94519f6aa"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#ad974c372c32c1049add9ccf94519f6aa">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[17/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#ad974c372c32c1049add9ccf94519f6aa">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[18/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -614,7 +642,7 @@ Protected Attributes</h2></td></tr>
 </div>
 </div>
 <a id="aaac45c53ed45a7e90846d4ba1f08c753"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#aaac45c53ed45a7e90846d4ba1f08c753">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[18/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#aaac45c53ed45a7e90846d4ba1f08c753">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[19/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -640,7 +668,7 @@ Protected Attributes</h2></td></tr>
 </div>
 </div>
 <a id="a82d40b15df29503cb9391fe650e9dcb0"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#a82d40b15df29503cb9391fe650e9dcb0">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[19/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#a82d40b15df29503cb9391fe650e9dcb0">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[20/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
@@ -666,7 +694,7 @@ Protected Attributes</h2></td></tr>
 </div>
 </div>
 <a id="abbc6bab2c26ee9110f9a2d73505e6281"></a>
-<h2 class="memtitle"><span class="permalink"><a href="#abbc6bab2c26ee9110f9a2d73505e6281">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[20/20]</span></h2>
+<h2 class="memtitle"><span class="permalink"><a href="#abbc6bab2c26ee9110f9a2d73505e6281">&#9670;&nbsp;</a></span>VisitDFPattern_() <span class="overload">[21/21]</span></h2>
 
 <div class="memitem">
 <div class="memproto">
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternVisitor__coll__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternVisitor__coll__graph.svg
index cadfdb9f87..81d37b7f98 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternVisitor__coll__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternVisitor__coll__graph.svg
@@ -28,7 +28,7 @@
 <text text-anchor="start" x="10.5" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ VisitDFPattern_()</text>
 <text text-anchor="start" x="10.5" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ VisitDFPattern_()</text>
 <text text-anchor="start" x="10.5" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ VisitDFPattern_()</text>
-<text text-anchor="start" x="10.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
+<text text-anchor="start" x="10.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 12 more...</text>
 </a>
 </g>
 </g>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternVisitor__inherit__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternVisitor__inherit__graph.svg
index cadfdb9f87..81d37b7f98 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternVisitor__inherit__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPatternVisitor__inherit__graph.svg
@@ -28,7 +28,7 @@
 <text text-anchor="start" x="10.5" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ VisitDFPattern_()</text>
 <text text-anchor="start" x="10.5" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ VisitDFPattern_()</text>
 <text text-anchor="start" x="10.5" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ VisitDFPattern_()</text>
-<text text-anchor="start" x="10.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
+<text text-anchor="start" x="10.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 12 more...</text>
 </a>
 </g>
 </g>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPattern__coll__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPattern__coll__graph.svg
index 1514d3c00f..be52d4b7df 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPattern__coll__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPattern__coll__graph.svg
@@ -4,26 +4,27 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::DFPattern Pages: 1 -->
-<svg width="164pt" height="717pt"
- viewBox="0.00 0.00 164.00 717.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 713)">
+<svg width="164pt" height="728pt"
+ viewBox="0.00 0.00 164.00 728.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 724)">
 <title>tvm::relax::DFPattern</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-713 160,-713 160,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-724 160,-724 160,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
 <g id="a_node1"><a xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="#bfbfbf" stroke="black" points="0,-0.5 0,-211.5 156,-211.5 156,-0.5 0,-0.5"/>
-<text text-anchor="middle" x="78" y="-199.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="0,-192.5 156,-192.5 "/>
-<text text-anchor="middle" x="78" y="-180.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="0,-173.5 156,-173.5 "/>
+<polygon fill="#bfbfbf" stroke="black" points="0,-0.5 0,-222.5 156,-222.5 156,-0.5 0,-0.5"/>
+<text text-anchor="middle" x="78" y="-210.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="0,-203.5 156,-203.5 "/>
+<text text-anchor="middle" x="78" y="-191.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-184.5 156,-184.5 "/>
+<text text-anchor="start" x="8" y="-172.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="8" y="-161.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-150.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-139.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="8" y="-128.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="8" y="-117.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="8" y="-106.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-150.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="8" y="-139.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="8" y="-128.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="8" y="-117.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-106.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="8" y="-95.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="8" y="-84.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="8" y="-73.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -40,67 +41,67 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="11,-249.5 11,-482.5 145,-482.5 145,-249.5 11,-249.5"/>
-<text text-anchor="middle" x="78" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="11,-463.5 145,-463.5 "/>
-<text text-anchor="start" x="19" y="-451.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<polyline fill="none" stroke="black" points="11,-444.5 145,-444.5 "/>
+<polygon fill="white" stroke="black" points="11,-260.5 11,-493.5 145,-493.5 145,-260.5 11,-260.5"/>
+<text text-anchor="middle" x="78" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="11,-474.5 145,-474.5 "/>
+<text text-anchor="start" x="19" y="-462.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<polyline fill="none" stroke="black" points="11,-455.5 145,-455.5 "/>
+<text text-anchor="start" x="19" y="-443.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="19" y="-432.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-421.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-410.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="19" y="-399.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="19" y="-388.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="19" y="-377.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="19" y="-366.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="19" y="-355.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="19" y="-344.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="19" y="-333.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="19" y="-322.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-421.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="19" y="-410.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="19" y="-399.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="19" y="-388.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="19" y="-377.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="19" y="-366.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="19" y="-355.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="19" y="-344.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="19" y="-333.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-322.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="19" y="-311.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-300.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-289.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="19" y="-278.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="19" y="-267.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="19" y="-256.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="19" y="-300.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="19" y="-289.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="19" y="-278.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="19" y="-267.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M78,-238.96C78,-229.87 78,-220.76 78,-211.81"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-239.21 78,-249.21 81.5,-239.21 74.5,-239.21"/>
+<path fill="none" stroke="midnightblue" d="M78,-250.36C78,-241.07 78,-231.73 78,-222.54"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-250.43 78,-260.43 81.5,-250.43 74.5,-250.43"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1ObjectPtr.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="black" points="8,-530.5 8,-708.5 148,-708.5 148,-530.5 8,-530.5"/>
-<text text-anchor="start" x="16" y="-696.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
-<text text-anchor="middle" x="78" y="-685.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
-<polyline fill="none" stroke="black" points="8,-678.5 148,-678.5 "/>
-<text text-anchor="middle" x="78" y="-666.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="8,-659.5 148,-659.5 "/>
+<polygon fill="white" stroke="black" points="8,-541.5 8,-719.5 148,-719.5 148,-541.5 8,-541.5"/>
+<text text-anchor="start" x="16" y="-707.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
+<text text-anchor="middle" x="78" y="-696.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
+<polyline fill="none" stroke="black" points="8,-689.5 148,-689.5 "/>
+<text text-anchor="middle" x="78" y="-677.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="8,-670.5 148,-670.5 "/>
+<text text-anchor="start" x="16" y="-658.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-647.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-636.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-625.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-614.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-603.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-592.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-581.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-570.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
-<text text-anchor="start" x="16" y="-559.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="16" y="-548.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="16" y="-537.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
+<text text-anchor="start" x="16" y="-592.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
+<text text-anchor="start" x="16" y="-581.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
+<text text-anchor="start" x="16" y="-570.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="16" y="-559.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="16" y="-548.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="#404040" d="M78,-530.18C78,-518.84 78,-507.05 78,-495.23"/>
-<polygon fill="none" stroke="#404040" points="78,-494.91 74,-488.91 78,-482.91 82,-488.91 78,-494.91"/>
-<text text-anchor="middle" x="97.5" y="-504" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
+<path fill="none" stroke="#404040" d="M78,-541.18C78,-529.84 78,-518.05 78,-506.23"/>
+<polygon fill="none" stroke="#404040" points="78,-505.91 74,-499.91 78,-493.91 82,-499.91 78,-505.91"/>
+<text text-anchor="middle" x="97.5" y="-515" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPattern__inherit__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPattern__inherit__graph.svg
index b5f0a5b515..b92ca82028 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPattern__inherit__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DFPattern__inherit__graph.svg
@@ -4,35 +4,36 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::DFPattern Pages: 1 -->
-<svg width="3500pt" height="628pt"
- viewBox="0.00 0.00 3500.00 628.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 624)">
+<svg width="3674pt" height="639pt"
+ viewBox="0.00 0.00 3674.00 639.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 635)">
 <title>tvm::relax::DFPattern</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-624 3496,-624 3496,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-635 3670,-635 3670,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
 <g id="a_node1"><a xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="#bfbfbf" stroke="black" points="1671,-127.5 1671,-338.5 1827,-338.5 1827,-127.5 1671,-127.5"/>
-<text text-anchor="middle" x="1749" y="-326.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="1671,-319.5 1827,-319.5 "/>
-<text text-anchor="middle" x="1749" y="-307.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="1671,-300.5 1827,-300.5 "/>
-<text text-anchor="start" x="1679" y="-288.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="1679" y="-277.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="1679" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="1679" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="1679" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="1679" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
-<text text-anchor="start" x="1679" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
-<text text-anchor="start" x="1679" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
-<text text-anchor="start" x="1679" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
-<text text-anchor="start" x="1679" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasShape()</text>
-<text text-anchor="start" x="1679" y="-178.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasSameShapeAs()</text>
-<text text-anchor="start" x="1679" y="-167.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ dup()</text>
-<text text-anchor="start" x="1679" y="-156.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator PatternSeq()</text>
-<text text-anchor="start" x="1679" y="-145.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="1679" y="-134.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="#bfbfbf" stroke="black" points="1758,-127.5 1758,-349.5 1914,-349.5 1914,-127.5 1758,-127.5"/>
+<text text-anchor="middle" x="1836" y="-337.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="1758,-330.5 1914,-330.5 "/>
+<text text-anchor="middle" x="1836" y="-318.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="1758,-311.5 1914,-311.5 "/>
+<text text-anchor="start" x="1766" y="-299.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
+<text text-anchor="start" x="1766" y="-288.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
+<text text-anchor="start" x="1766" y="-277.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="1766" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="1766" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="1766" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="1766" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
+<text text-anchor="start" x="1766" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
+<text text-anchor="start" x="1766" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
+<text text-anchor="start" x="1766" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
+<text text-anchor="start" x="1766" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasShape()</text>
+<text text-anchor="start" x="1766" y="-178.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasSameShapeAs()</text>
+<text text-anchor="start" x="1766" y="-167.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ dup()</text>
+<text text-anchor="start" x="1766" y="-156.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator PatternSeq()</text>
+<text text-anchor="start" x="1766" y="-145.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="1766" y="-134.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
@@ -54,8 +55,8 @@
 <!-- Node1&#45;&gt;Node3 -->
 <g id="edge2" class="edge">
 <title>Node1&#45;&gt;Node3</title>
-<path fill="none" stroke="midnightblue" d="M1660.87,-228.59C1371.06,-216.68 449.78,-173.13 165,-91 159.29,-89.35 153.52,-87.33 147.81,-85.05"/>
-<polygon fill="none" stroke="midnightblue" points="1660.78,-232.09 1670.92,-229 1661.07,-225.09 1660.78,-232.09"/>
+<path fill="none" stroke="midnightblue" d="M1747.22,-234.21C1446.27,-222.34 466.82,-177.83 165,-91 159.29,-89.36 153.52,-87.33 147.81,-85.06"/>
+<polygon fill="none" stroke="midnightblue" points="1747.5,-237.72 1757.63,-234.61 1747.78,-230.73 1747.5,-237.72"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node">
@@ -75,8 +76,8 @@
 <!-- Node1&#45;&gt;Node4 -->
 <g id="edge3" class="edge">
 <title>Node1&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M1660.62,-227.47C1392.14,-213.02 589.19,-164.64 339,-91 333.47,-89.37 327.87,-87.39 322.32,-85.18"/>
-<polygon fill="none" stroke="midnightblue" points="1660.54,-230.97 1670.71,-228.01 1660.91,-223.98 1660.54,-230.97"/>
+<path fill="none" stroke="midnightblue" d="M1747.5,-233.18C1467.92,-218.87 606.33,-169.37 339,-91 333.46,-89.38 327.87,-87.4 322.32,-85.19"/>
+<polygon fill="none" stroke="midnightblue" points="1747.43,-236.69 1757.6,-233.7 1747.79,-229.69 1747.43,-236.69"/>
 </g>
 <!-- Node5 -->
 <g id="node5" class="node">
@@ -96,8 +97,8 @@
 <!-- Node1&#45;&gt;Node5 -->
 <g id="edge4" class="edge">
 <title>Node1&#45;&gt;Node5</title>
-<path fill="none" stroke="midnightblue" d="M1660.61,-232.65C1454.72,-231.87 929.06,-216.6 513,-91 507.48,-89.33 501.89,-87.32 496.35,-85.09"/>
-<polygon fill="none" stroke="midnightblue" points="1660.75,-236.15 1670.76,-232.68 1660.77,-229.15 1660.75,-236.15"/>
+<path fill="none" stroke="midnightblue" d="M1747.78,-231.9C1490.76,-214.93 746.03,-160.93 513,-91 507.48,-89.34 501.88,-87.34 496.34,-85.11"/>
+<polygon fill="none" stroke="midnightblue" points="1747.61,-235.4 1757.82,-232.56 1748.07,-228.41 1747.61,-235.4"/>
 </g>
 <!-- Node6 -->
 <g id="node6" class="node">
@@ -116,8 +117,8 @@
 <!-- Node1&#45;&gt;Node6 -->
 <g id="edge5" class="edge">
 <title>Node1&#45;&gt;Node6</title>
-<path fill="none" stroke="midnightblue" d="M1660.55,-230.34C1475.59,-224.71 1036.17,-199.93 687,-91 677.44,-88.02 667.67,-84.05 658.29,-79.7"/>
-<polygon fill="none" stroke="midnightblue" points="1660.66,-233.85 1670.76,-230.64 1660.87,-226.85 1660.66,-233.85"/>
+<path fill="none" stroke="midnightblue" d="M1747.53,-236.53C1551.86,-232.17 1069.45,-209.23 687,-91 677.27,-87.99 667.33,-83.95 657.8,-79.53"/>
+<polygon fill="none" stroke="midnightblue" points="1747.68,-240.03 1757.75,-236.74 1747.83,-233.03 1747.68,-240.03"/>
 </g>
 <!-- Node7 -->
 <g id="node7" class="node">
@@ -137,8 +138,8 @@
 <!-- Node1&#45;&gt;Node7 -->
 <g id="edge6" class="edge">
 <title>Node1&#45;&gt;Node7</title>
-<path fill="none" stroke="midnightblue" d="M1660.36,-227.17C1498.1,-216.31 1144,-183.26 861,-91 855.68,-89.26 850.28,-87.24 844.92,-85.02"/>
-<polygon fill="none" stroke="midnightblue" points="1660.56,-230.69 1670.76,-227.85 1661.01,-223.7 1660.56,-230.69"/>
+<path fill="none" stroke="midnightblue" d="M1747.79,-233.76C1574.1,-224.35 1177.16,-192.61 861,-91 855.67,-89.29 850.27,-87.28 844.9,-85.07"/>
+<polygon fill="none" stroke="midnightblue" points="1747.73,-237.27 1757.91,-234.3 1748.1,-230.28 1747.73,-237.27"/>
 </g>
 <!-- Node8 -->
 <g id="node8" class="node">
@@ -158,8 +159,8 @@
 <!-- Node1&#45;&gt;Node8 -->
 <g id="edge7" class="edge">
 <title>Node1&#45;&gt;Node8</title>
-<path fill="none" stroke="midnightblue" d="M1660.48,-221.39C1525.55,-203.64 1261.46,-162.61 1047,-91 1041.65,-89.21 1036.21,-87.19 1030.78,-85.02"/>
-<polygon fill="none" stroke="midnightblue" points="1660.39,-224.91 1670.76,-222.74 1661.3,-217.97 1660.39,-224.91"/>
+<path fill="none" stroke="midnightblue" d="M1747.51,-228.74C1599.57,-212.41 1293.92,-171.44 1047,-91 1041.55,-89.23 1036.02,-87.2 1030.5,-85.01"/>
+<polygon fill="none" stroke="midnightblue" points="1747.56,-232.27 1757.89,-229.87 1748.32,-225.31 1747.56,-232.27"/>
 </g>
 <!-- Node9 -->
 <g id="node9" class="node">
@@ -179,8 +180,8 @@
 <!-- Node1&#45;&gt;Node9 -->
 <g id="edge8" class="edge">
 <title>Node1&#45;&gt;Node9</title>
-<path fill="none" stroke="midnightblue" d="M1660.82,-214.45C1554.51,-191.94 1371.36,-148.78 1221,-91 1216.25,-89.17 1211.42,-87.17 1206.59,-85.04"/>
-<polygon fill="none" stroke="midnightblue" points="1660.36,-217.93 1670.87,-216.57 1661.8,-211.08 1660.36,-217.93"/>
+<path fill="none" stroke="midnightblue" d="M1747.57,-223.3C1626.32,-202.29 1402.79,-158.05 1221,-91 1216.22,-89.24 1211.37,-87.28 1206.53,-85.19"/>
+<polygon fill="none" stroke="midnightblue" points="1747.1,-226.77 1757.55,-225.01 1748.29,-219.87 1747.1,-226.77"/>
 </g>
 <!-- Node10 -->
 <g id="node10" class="node">
@@ -200,8 +201,8 @@
 <!-- Node1&#45;&gt;Node10 -->
 <g id="edge9" class="edge">
 <title>Node1&#45;&gt;Node10</title>
-<path fill="none" stroke="midnightblue" d="M1661.55,-198.65C1590.72,-171.13 1488.64,-130.36 1401,-91 1396.87,-89.14 1392.64,-87.21 1388.39,-85.22"/>
-<polygon fill="none" stroke="midnightblue" points="1660.31,-201.92 1670.9,-202.27 1662.84,-195.39 1660.31,-201.92"/>
+<path fill="none" stroke="midnightblue" d="M1748.08,-211.7C1659.3,-184.76 1518.83,-139.71 1401,-91 1396.49,-89.14 1391.89,-87.15 1387.27,-85.08"/>
+<polygon fill="none" stroke="midnightblue" points="1747.25,-215.11 1757.84,-214.65 1749.28,-208.41 1747.25,-215.11"/>
 </g>
 <!-- Node11 -->
 <g id="node11" class="node">
@@ -221,8 +222,8 @@
 <!-- Node1&#45;&gt;Node11 -->
 <g id="edge10" class="edge">
 <title>Node1&#45;&gt;Node11</title>
-<path fill="none" stroke="midnightblue" d="M1662.33,-170.4C1622.68,-142.22 1576.93,-109.71 1542.25,-85.06"/>
-<polygon fill="none" stroke="midnightblue" points="1660.51,-173.4 1670.69,-176.34 1664.57,-167.7 1660.51,-173.4"/>
+<path fill="none" stroke="midnightblue" d="M1748.97,-189.73C1690.04,-157.39 1613.18,-115.2 1558.16,-85.01"/>
+<polygon fill="none" stroke="midnightblue" points="1747.45,-192.89 1757.9,-194.64 1750.82,-186.76 1747.45,-192.89"/>
 </g>
 <!-- Node12 -->
 <g id="node12" class="node">
@@ -242,8 +243,8 @@
 <!-- Node1&#45;&gt;Node12 -->
 <g id="edge11" class="edge">
 <title>Node1&#45;&gt;Node12</title>
-<path fill="none" stroke="midnightblue" d="M1695.5,-117.93C1690.06,-106.32 1684.83,-95.19 1680.2,-85.31"/>
-<polygon fill="none" stroke="midnightblue" points="1692.49,-119.76 1699.91,-127.32 1698.83,-116.78 1692.49,-119.76"/>
+<path fill="none" stroke="midnightblue" d="M1750.95,-144.14C1732.04,-123.38 1713,-102.49 1697.42,-85.38"/>
+<polygon fill="none" stroke="midnightblue" points="1748.59,-146.74 1757.91,-151.78 1753.76,-142.03 1748.59,-146.74"/>
 </g>
 <!-- Node13 -->
 <g id="node13" class="node">
@@ -263,8 +264,8 @@
 <!-- Node1&#45;&gt;Node13 -->
 <g id="edge12" class="edge">
 <title>Node1&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M1802.5,-117.93C1807.94,-106.32 1813.17,-95.19 1817.8,-85.31"/>
-<polygon fill="none" stroke="midnightblue" points="1799.17,-116.78 1798.09,-127.32 1805.51,-119.76 1799.17,-116.78"/>
+<path fill="none" stroke="midnightblue" d="M1836,-117.09C1836,-105.68 1836,-94.79 1836,-85.11"/>
+<polygon fill="none" stroke="midnightblue" points="1832.5,-117.22 1836,-127.22 1839.5,-117.22 1832.5,-117.22"/>
 </g>
 <!-- Node14 -->
 <g id="node14" class="node">
@@ -284,8 +285,8 @@
 <!-- Node1&#45;&gt;Node14 -->
 <g id="edge13" class="edge">
 <title>Node1&#45;&gt;Node14</title>
-<path fill="none" stroke="midnightblue" d="M1835.67,-170.4C1875.32,-142.22 1921.07,-109.71 1955.75,-85.06"/>
-<polygon fill="none" stroke="midnightblue" points="1833.43,-167.7 1827.31,-176.34 1837.49,-173.4 1833.43,-167.7"/>
+<path fill="none" stroke="midnightblue" d="M1921.05,-144.14C1939.96,-123.38 1959,-102.49 1974.58,-85.38"/>
+<polygon fill="none" stroke="midnightblue" points="1918.24,-142.03 1914.09,-151.78 1923.41,-146.74 1918.24,-142.03"/>
 </g>
 <!-- Node15 -->
 <g id="node15" class="node">
@@ -305,8 +306,8 @@
 <!-- Node1&#45;&gt;Node15 -->
 <g id="edge14" class="edge">
 <title>Node1&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M1836.59,-198.97C1907.51,-171.64 2009.63,-130.95 2097,-91 2101.17,-89.1 2105.42,-87.1 2109.7,-85.05"/>
-<polygon fill="none" stroke="midnightblue" points="1835.31,-195.71 1827.23,-202.57 1837.82,-202.24 1835.31,-195.71"/>
+<path fill="none" stroke="midnightblue" d="M1923.03,-189.73C1981.96,-157.39 2058.82,-115.2 2113.84,-85.01"/>
+<polygon fill="none" stroke="midnightblue" points="1921.18,-186.76 1914.1,-194.64 1924.55,-192.89 1921.18,-186.76"/>
 </g>
 <!-- Node16 -->
 <g id="node16" class="node">
@@ -326,62 +327,62 @@
 <!-- Node1&#45;&gt;Node16 -->
 <g id="edge15" class="edge">
 <title>Node1&#45;&gt;Node16</title>
-<path fill="none" stroke="midnightblue" d="M1837.07,-214.12C1942.3,-191.42 2122.74,-148.22 2271,-91 2275.75,-89.17 2280.58,-87.15 2285.41,-85.03"/>
-<polygon fill="none" stroke="midnightblue" points="1836.16,-210.74 1827.12,-216.25 1837.63,-217.58 1836.16,-210.74"/>
+<path fill="none" stroke="midnightblue" d="M1924.07,-212.04C2012.95,-185.36 2153.5,-140.51 2271,-91 2275.38,-89.16 2279.84,-87.18 2284.31,-85.13"/>
+<polygon fill="none" stroke="midnightblue" points="1922.87,-208.74 1914.29,-214.96 1924.87,-215.45 1922.87,-208.74"/>
 </g>
 <!-- Node17 -->
 <g id="node17" class="node">
 <title>Node17</title>
-<g id="a_node17"><a xlink:href="classtvm_1_1relax_1_1TupleGetItemPattern.html" target="_top" xlink:title="Managed reference to TupleGetItemPatternNode.">
-<polygon fill="white" stroke="black" points="2454,-0.5 2454,-90.5 2610,-90.5 2610,-0.5 2454,-0.5"/>
-<text text-anchor="start" x="2462" y="-78.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::TupleGetItem</text>
-<text text-anchor="middle" x="2532" y="-67.5" font-family="Helvetica,sans-Serif" font-size="10.00">Pattern</text>
-<polyline fill="none" stroke="black" points="2454,-60.5 2610,-60.5 "/>
-<text text-anchor="middle" x="2532" y="-48.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="2454,-41.5 2610,-41.5 "/>
-<text text-anchor="start" x="2462" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TupleGetItemPattern()</text>
-<text text-anchor="start" x="2462" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="2462" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<g id="a_node17"><a xlink:href="classtvm_1_1relax_1_1StructInfoPattern.html" target="_top" xlink:title=" ">
+<polygon fill="white" stroke="black" points="2454,-6 2454,-85 2610,-85 2610,-6 2454,-6"/>
+<text text-anchor="middle" x="2532" y="-73" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::StructInfoPattern</text>
+<polyline fill="none" stroke="black" points="2454,-66 2610,-66 "/>
+<text text-anchor="middle" x="2532" y="-54" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="2454,-47 2610,-47 "/>
+<text text-anchor="start" x="2462" y="-35" font-family="Helvetica,sans-Serif" font-size="10.00">+ StructInfoPattern()</text>
+<text text-anchor="start" x="2462" y="-24" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="2462" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node17 -->
 <g id="edge16" class="edge">
 <title>Node1&#45;&gt;Node17</title>
-<path fill="none" stroke="midnightblue" d="M1837.27,-221.96C1971.44,-204.98 2233.46,-164.96 2445,-91 2447.88,-89.99 2450.79,-88.91 2453.7,-87.76"/>
-<polygon fill="none" stroke="midnightblue" points="1836.54,-218.53 1827.05,-223.25 1837.41,-225.47 1836.54,-218.53"/>
+<path fill="none" stroke="midnightblue" d="M1924.06,-223.09C2044.23,-201.91 2265.2,-157.54 2445,-91 2449.77,-89.23 2454.62,-87.27 2459.46,-85.18"/>
+<polygon fill="none" stroke="midnightblue" points="1923.41,-219.65 1914.17,-224.82 1924.62,-226.54 1923.41,-219.65"/>
 </g>
 <!-- Node18 -->
 <g id="node18" class="node">
 <title>Node18</title>
-<g id="a_node18"><a xlink:href="classtvm_1_1relax_1_1TuplePattern.html" target="_top" xlink:title="Managed reference to TuplePatternNode.">
-<polygon fill="white" stroke="black" points="2628,-6 2628,-85 2784,-85 2784,-6 2628,-6"/>
-<text text-anchor="middle" x="2706" y="-73" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::TuplePattern</text>
-<polyline fill="none" stroke="black" points="2628,-66 2784,-66 "/>
-<text text-anchor="middle" x="2706" y="-54" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="2628,-47 2784,-47 "/>
-<text text-anchor="start" x="2636" y="-35" font-family="Helvetica,sans-Serif" font-size="10.00">+ TuplePattern()</text>
-<text text-anchor="start" x="2636" y="-24" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="2636" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<g id="a_node18"><a xlink:href="classtvm_1_1relax_1_1TupleGetItemPattern.html" target="_top" xlink:title="Managed reference to TupleGetItemPatternNode.">
+<polygon fill="white" stroke="black" points="2628,-0.5 2628,-90.5 2784,-90.5 2784,-0.5 2628,-0.5"/>
+<text text-anchor="start" x="2636" y="-78.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::TupleGetItem</text>
+<text text-anchor="middle" x="2706" y="-67.5" font-family="Helvetica,sans-Serif" font-size="10.00">Pattern</text>
+<polyline fill="none" stroke="black" points="2628,-60.5 2784,-60.5 "/>
+<text text-anchor="middle" x="2706" y="-48.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="2628,-41.5 2784,-41.5 "/>
+<text text-anchor="start" x="2636" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TupleGetItemPattern()</text>
+<text text-anchor="start" x="2636" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="2636" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node18 -->
 <g id="edge17" class="edge">
 <title>Node1&#45;&gt;Node18</title>
-<path fill="none" stroke="midnightblue" d="M1837.38,-226.79C1997.04,-215.39 2342.63,-181.59 2619,-91 2624.32,-89.26 2629.71,-87.22 2635.07,-85"/>
-<polygon fill="none" stroke="midnightblue" points="1836.87,-223.31 1827.14,-227.51 1837.36,-230.3 1836.87,-223.31"/>
+<path fill="none" stroke="midnightblue" d="M1924.35,-229.33C2071.62,-213.89 2375.19,-174.21 2619,-91 2621.89,-90.01 2624.8,-88.95 2627.72,-87.81"/>
+<polygon fill="none" stroke="midnightblue" points="1923.6,-225.89 1914.01,-230.41 1924.32,-232.86 1923.6,-225.89"/>
 </g>
 <!-- Node19 -->
 <g id="node19" class="node">
 <title>Node19</title>
-<g id="a_node19"><a xlink:href="classtvm_1_1relax_1_1TypePattern.html" target="_top" xlink:title="Managed reference to TypePatternNode.">
+<g id="a_node19"><a xlink:href="classtvm_1_1relax_1_1TuplePattern.html" target="_top" xlink:title="Managed reference to TuplePatternNode.">
 <polygon fill="white" stroke="black" points="2802,-6 2802,-85 2958,-85 2958,-6 2802,-6"/>
-<text text-anchor="middle" x="2880" y="-73" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::TypePattern</text>
+<text text-anchor="middle" x="2880" y="-73" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::TuplePattern</text>
 <polyline fill="none" stroke="black" points="2802,-66 2958,-66 "/>
 <text text-anchor="middle" x="2880" y="-54" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
 <polyline fill="none" stroke="black" points="2802,-47 2958,-47 "/>
-<text text-anchor="start" x="2810" y="-35" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypePattern()</text>
+<text text-anchor="start" x="2810" y="-35" font-family="Helvetica,sans-Serif" font-size="10.00">+ TuplePattern()</text>
 <text text-anchor="start" x="2810" y="-24" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
 <text text-anchor="start" x="2810" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
@@ -390,108 +391,129 @@
 <!-- Node1&#45;&gt;Node19 -->
 <g id="edge18" class="edge">
 <title>Node1&#45;&gt;Node19</title>
-<path fill="none" stroke="midnightblue" d="M1837.32,-230.07C2019.94,-223.92 2450.62,-198.23 2793,-91 2798.34,-89.33 2803.75,-87.35 2809.13,-85.16"/>
-<polygon fill="none" stroke="midnightblue" points="1837.12,-226.57 1827.23,-230.39 1837.34,-233.57 1837.12,-226.57"/>
+<path fill="none" stroke="midnightblue" d="M1924.46,-233.41C2095.92,-223.43 2483.82,-190.84 2793,-91 2798.33,-89.28 2803.73,-87.26 2809.09,-85.06"/>
+<polygon fill="none" stroke="midnightblue" points="1924.01,-229.93 1914.22,-233.99 1924.41,-236.92 1924.01,-229.93"/>
 </g>
 <!-- Node20 -->
 <g id="node20" class="node">
 <title>Node20</title>
-<g id="a_node20"><a xlink:href="classtvm_1_1relax_1_1UnorderedTuplePattern.html" target="_top" xlink:title="Managed reference to UnorderedTuplePatternNode.">
-<polygon fill="white" stroke="black" points="2976,-0.5 2976,-90.5 3132,-90.5 3132,-0.5 2976,-0.5"/>
-<text text-anchor="start" x="2984" y="-78.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::UnorderedTuple</text>
-<text text-anchor="middle" x="3054" y="-67.5" font-family="Helvetica,sans-Serif" font-size="10.00">Pattern</text>
-<polyline fill="none" stroke="black" points="2976,-60.5 3132,-60.5 "/>
-<text text-anchor="middle" x="3054" y="-48.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="2976,-41.5 3132,-41.5 "/>
-<text text-anchor="start" x="2984" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ UnorderedTuplePattern()</text>
-<text text-anchor="start" x="2984" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="2984" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<g id="a_node20"><a xlink:href="classtvm_1_1relax_1_1TypePattern.html" target="_top" xlink:title="Managed reference to TypePatternNode.">
+<polygon fill="white" stroke="black" points="2976,-6 2976,-85 3132,-85 3132,-6 2976,-6"/>
+<text text-anchor="middle" x="3054" y="-73" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::TypePattern</text>
+<polyline fill="none" stroke="black" points="2976,-66 3132,-66 "/>
+<text text-anchor="middle" x="3054" y="-54" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="2976,-47 3132,-47 "/>
+<text text-anchor="start" x="2984" y="-35" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypePattern()</text>
+<text text-anchor="start" x="2984" y="-24" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="2984" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node20 -->
 <g id="edge19" class="edge">
 <title>Node1&#45;&gt;Node20</title>
-<path fill="none" stroke="midnightblue" d="M1837.23,-232.44C2040.9,-231.18 2557.78,-214.91 2967,-91 2969.92,-90.11 2972.86,-89.13 2975.81,-88.08"/>
-<polygon fill="none" stroke="midnightblue" points="1837.16,-228.94 1827.18,-232.49 1837.2,-235.94 1837.16,-228.94"/>
+<path fill="none" stroke="midnightblue" d="M1924.16,-236.29C2117.46,-231.44 2591.26,-207.56 2967,-91 2972.35,-89.34 2977.76,-87.37 2983.14,-85.2"/>
+<polygon fill="none" stroke="midnightblue" points="1923.97,-232.79 1914.06,-236.53 1924.14,-239.79 1923.97,-232.79"/>
 </g>
 <!-- Node21 -->
 <g id="node21" class="node">
 <title>Node21</title>
-<g id="a_node21"><a xlink:href="classtvm_1_1relax_1_1VarPattern.html" target="_top" xlink:title="Managed reference to a VarPattern.">
-<polygon fill="white" stroke="black" points="3150,-6 3150,-85 3306,-85 3306,-6 3150,-6"/>
-<text text-anchor="middle" x="3228" y="-73" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::VarPattern</text>
-<polyline fill="none" stroke="black" points="3150,-66 3306,-66 "/>
-<text text-anchor="middle" x="3228" y="-54" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="3150,-47 3306,-47 "/>
-<text text-anchor="start" x="3158" y="-35" font-family="Helvetica,sans-Serif" font-size="10.00">+ VarPattern()</text>
-<text text-anchor="start" x="3158" y="-24" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="3158" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<g id="a_node21"><a xlink:href="classtvm_1_1relax_1_1UnorderedTuplePattern.html" target="_top" xlink:title="Managed reference to UnorderedTuplePatternNode.">
+<polygon fill="white" stroke="black" points="3150,-0.5 3150,-90.5 3306,-90.5 3306,-0.5 3150,-0.5"/>
+<text text-anchor="start" x="3158" y="-78.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::UnorderedTuple</text>
+<text text-anchor="middle" x="3228" y="-67.5" font-family="Helvetica,sans-Serif" font-size="10.00">Pattern</text>
+<polyline fill="none" stroke="black" points="3150,-60.5 3306,-60.5 "/>
+<text text-anchor="middle" x="3228" y="-48.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="3150,-41.5 3306,-41.5 "/>
+<text text-anchor="start" x="3158" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ UnorderedTuplePattern()</text>
+<text text-anchor="start" x="3158" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="3158" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node21 -->
 <g id="edge20" class="edge">
 <title>Node1&#45;&gt;Node21</title>
-<path fill="none" stroke="midnightblue" d="M1837.18,-227.35C2103.16,-212.64 2894.3,-163.78 3141,-91 3146.53,-89.37 3152.13,-87.38 3157.68,-85.17"/>
-<polygon fill="none" stroke="midnightblue" points="1836.98,-223.85 1827.18,-227.9 1837.36,-230.84 1836.98,-223.85"/>
+<path fill="none" stroke="midnightblue" d="M1924.28,-238.41C2138,-238.31 2698.25,-224.23 3141,-91 3143.92,-90.12 3146.87,-89.14 3149.81,-88.09"/>
+<polygon fill="none" stroke="midnightblue" points="1924.06,-234.91 1914.06,-238.4 1924.06,-241.91 1924.06,-234.91"/>
 </g>
 <!-- Node22 -->
 <g id="node22" class="node">
 <title>Node22</title>
-<g id="a_node22"><a xlink:href="classtvm_1_1relax_1_1WildcardPattern.html" target="_top" xlink:title="Managed reference to WildcardPatternNode.">
-<polygon fill="white" stroke="black" points="3324,-6 3324,-85 3492,-85 3492,-6 3324,-6"/>
-<text text-anchor="middle" x="3408" y="-73" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::WildcardPattern</text>
-<polyline fill="none" stroke="black" points="3324,-66 3492,-66 "/>
-<text text-anchor="middle" x="3408" y="-54" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="3324,-47 3492,-47 "/>
-<text text-anchor="start" x="3332" y="-35" font-family="Helvetica,sans-Serif" font-size="10.00">+ WildcardPattern()</text>
-<text text-anchor="start" x="3332" y="-24" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_NOTNULLABLE</text>
-<text text-anchor="start" x="3332" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00">_OBJECT_REF_METHODS()</text>
+<g id="a_node22"><a xlink:href="classtvm_1_1relax_1_1VarPattern.html" target="_top" xlink:title="Managed reference to a VarPattern.">
+<polygon fill="white" stroke="black" points="3324,-6 3324,-85 3480,-85 3480,-6 3324,-6"/>
+<text text-anchor="middle" x="3402" y="-73" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::VarPattern</text>
+<polyline fill="none" stroke="black" points="3324,-66 3480,-66 "/>
+<text text-anchor="middle" x="3402" y="-54" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="3324,-47 3480,-47 "/>
+<text text-anchor="start" x="3332" y="-35" font-family="Helvetica,sans-Serif" font-size="10.00">+ VarPattern()</text>
+<text text-anchor="start" x="3332" y="-24" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="3332" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node22 -->
 <g id="edge21" class="edge">
 <title>Node1&#45;&gt;Node22</title>
-<path fill="none" stroke="midnightblue" d="M1837.46,-228.17C2125.3,-215.07 3032.89,-168.48 3315,-91 3321.04,-89.34 3327.17,-87.3 3333.25,-85.02"/>
-<polygon fill="none" stroke="midnightblue" points="1836.91,-224.69 1827.08,-228.64 1837.22,-231.69 1836.91,-224.69"/>
+<path fill="none" stroke="midnightblue" d="M1924.39,-233.07C2201.62,-218.5 3051.2,-168.51 3315,-91 3320.53,-89.37 3326.13,-87.39 3331.68,-85.19"/>
+<polygon fill="none" stroke="midnightblue" points="1924.18,-229.58 1914.38,-233.59 1924.55,-236.57 1924.18,-229.58"/>
+</g>
+<!-- Node23 -->
+<g id="node23" class="node">
+<title>Node23</title>
+<g id="a_node23"><a xlink:href="classtvm_1_1relax_1_1WildcardPattern.html" target="_top" xlink:title="Managed reference to WildcardPatternNode.">
+<polygon fill="white" stroke="black" points="3498,-6 3498,-85 3666,-85 3666,-6 3498,-6"/>
+<text text-anchor="middle" x="3582" y="-73" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::WildcardPattern</text>
+<polyline fill="none" stroke="black" points="3498,-66 3666,-66 "/>
+<text text-anchor="middle" x="3582" y="-54" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="3498,-47 3666,-47 "/>
+<text text-anchor="start" x="3506" y="-35" font-family="Helvetica,sans-Serif" font-size="10.00">+ WildcardPattern()</text>
+<text text-anchor="start" x="3506" y="-24" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_NOTNULLABLE</text>
+<text text-anchor="start" x="3506" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00">_OBJECT_REF_METHODS()</text>
+</a>
+</g>
+</g>
+<!-- Node1&#45;&gt;Node23 -->
+<g id="edge22" class="edge">
+<title>Node1&#45;&gt;Node23</title>
+<path fill="none" stroke="midnightblue" d="M1924.77,-233.81C2223.41,-220.74 3189.67,-172.99 3489,-91 3495.04,-89.35 3501.17,-87.31 3507.25,-85.03"/>
+<polygon fill="none" stroke="midnightblue" points="1924.27,-230.33 1914.43,-234.26 1924.57,-237.32 1924.27,-230.33"/>
 </g>
 <!-- Node2 -->
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="1682,-375.5 1682,-619.5 1816,-619.5 1816,-375.5 1682,-375.5"/>
-<text text-anchor="middle" x="1749" y="-607.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="1682,-600.5 1816,-600.5 "/>
-<text text-anchor="start" x="1690" y="-588.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<text text-anchor="start" x="1690" y="-577.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
-<polyline fill="none" stroke="black" points="1682,-570.5 1816,-570.5 "/>
-<text text-anchor="start" x="1690" y="-558.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="1690" y="-547.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="1690" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="1690" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="1690" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="1690" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="1690" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="1690" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="1690" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="1690" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="1690" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
-<text text-anchor="start" x="1690" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="1690" y="-426.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="1690" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="1690" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="1690" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="1690" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<polygon fill="white" stroke="black" points="1769,-386.5 1769,-630.5 1903,-630.5 1903,-386.5 1769,-386.5"/>
+<text text-anchor="middle" x="1836" y="-618.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="1769,-611.5 1903,-611.5 "/>
+<text text-anchor="start" x="1777" y="-599.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<text text-anchor="start" x="1777" y="-588.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
+<polyline fill="none" stroke="black" points="1769,-581.5 1903,-581.5 "/>
+<text text-anchor="start" x="1777" y="-569.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
+<text text-anchor="start" x="1777" y="-558.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
+<text text-anchor="start" x="1777" y="-547.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="1777" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="1777" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="1777" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="1777" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="1777" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="1777" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="1777" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="1777" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="1777" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
+<text text-anchor="start" x="1777" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
+<text text-anchor="start" x="1777" y="-426.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="1777" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="1777" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="1777" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M1749,-365.19C1749,-356.29 1749,-347.38 1749,-338.64"/>
-<polygon fill="none" stroke="midnightblue" points="1745.5,-365.24 1749,-375.24 1752.5,-365.24 1745.5,-365.24"/>
+<path fill="none" stroke="midnightblue" d="M1836,-376.4C1836,-367.5 1836,-358.57 1836,-349.79"/>
+<polygon fill="none" stroke="midnightblue" points="1832.5,-376.44 1836,-386.44 1839.5,-376.44 1832.5,-376.44"/>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataTypePattern-members.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataTypePattern-members.html
index 3d550be0d1..7a47524856 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataTypePattern-members.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataTypePattern-members.html
@@ -90,24 +90,25 @@ $(function() {
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#aef57e18f93cc317ba30efbd986a7df18">HasDtype</a>(const std::string &amp;dtype) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a38905d1b7e0ab207b658afce9e50f838">HasSameShapeAs</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a16acd19f1cda9add85d03ce7afa06ad3">HasShape</a>(const Array&lt; PrimExpr &gt; &amp;shape) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DataTypePattern.html#aeff2d6dcfd26a7915eac3b1dde2ff7d2">TVM_DEFINE_OBJECT_REF_METHODS</a>(DataTypePattern, DFPattern, DataTypePatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DataTypePattern.html">tvm::relax::DataTypePattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">tvm::relax::DFPattern::TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a>(const StructInfo &amp;struct_info) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DataTypePattern.html#aeff2d6dcfd26a7915eac3b1dde2ff7d2">TVM_DEFINE_OBJECT_REF_METHODS</a>(DataTypePattern, DFPattern, DataTypePatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DataTypePattern.html">tvm::relax::DataTypePattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">tvm::relax::DFPattern::TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataTypePattern.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataTypePattern.html
index fe8988ce4f..7e734ef201 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataTypePattern.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataTypePattern.html
@@ -80,13 +80,13 @@ $(function() {
 <div class="dynheader">
 Inheritance diagram for tvm::relax::DataTypePattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1DataTypePattern__inherit__graph.svg" width="219" height="823"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1DataTypePattern__inherit__graph.svg" width="219" height="838"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <div class="dynheader">
 Collaboration diagram for tvm::relax::DataTypePattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1DataTypePattern__coll__graph.svg" width="219" height="1112"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1DataTypePattern__coll__graph.svg" width="219" height="1127"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <table class="memberdecls">
@@ -116,6 +116,9 @@ Public Member Functions</h2></td></tr>
 <tr class="memitem:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1AttrPattern.html">AttrPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">HasAttr</a> (const <a class="el" href="classtvm_1_1runtime_1_1Map.html">Map</a>&lt; <a class="el" href="classtvm_1_1run [...]
 <tr class="memdesc:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating an <a class="el" href="classtvm_1_1relax_1_1AttrPattern.html" title="Managed reference to AttrPatternNode.">AttrPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">More...</a><br /></td></tr>
 <tr class="separator:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a> (const <a class="el" href="classtvm_1_1relax_1_1StructInfo.html">StructInfo</a> &amp;stru [...]
+<tr class="memdesc:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">More...</a><br /></td></tr>
+<tr class="separator:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1TypePattern.html">TypePattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a> (const <a class="el" href="classtvm_1_1Type.html">Type</a> &amp;type) const</td></tr>
 <tr class="memdesc:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1TypePattern.html" title="Managed reference to TypePatternNode.">TypePattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">More...</a><br /></td></tr>
 <tr class="separator:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataTypePatternNode__coll__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataTypePatternNode__coll__graph.svg
index 02093803be..d1d6514d2d 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataTypePatternNode__coll__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataTypePatternNode__coll__graph.svg
@@ -104,33 +104,34 @@
 <g id="node4" class="node">
 <title>Node4</title>
 <g id="a_node4"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="253,-160.5 253,-371.5 409,-371.5 409,-160.5 253,-160.5"/>
-<text text-anchor="middle" x="331" y="-359.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="253,-352.5 409,-352.5 "/>
-<text text-anchor="middle" x="331" y="-340.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="253,-333.5 409,-333.5 "/>
-<text text-anchor="start" x="261" y="-321.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="261" y="-310.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="261" y="-299.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="261" y="-288.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="261" y="-277.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="261" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
-<text text-anchor="start" x="261" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
-<text text-anchor="start" x="261" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
-<text text-anchor="start" x="261" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
-<text text-anchor="start" x="261" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasShape()</text>
-<text text-anchor="start" x="261" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasSameShapeAs()</text>
-<text text-anchor="start" x="261" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ dup()</text>
-<text text-anchor="start" x="261" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator PatternSeq()</text>
-<text text-anchor="start" x="261" y="-178.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="261" y="-167.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="253,-155 253,-377 409,-377 409,-155 253,-155"/>
+<text text-anchor="middle" x="331" y="-365" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="253,-358 409,-358 "/>
+<text text-anchor="middle" x="331" y="-346" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="253,-339 409,-339 "/>
+<text text-anchor="start" x="261" y="-327" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
+<text text-anchor="start" x="261" y="-316" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
+<text text-anchor="start" x="261" y="-305" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="261" y="-294" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="261" y="-283" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="261" y="-272" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="261" y="-261" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
+<text text-anchor="start" x="261" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
+<text text-anchor="start" x="261" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
+<text text-anchor="start" x="261" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
+<text text-anchor="start" x="261" y="-217" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasShape()</text>
+<text text-anchor="start" x="261" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasSameShapeAs()</text>
+<text text-anchor="start" x="261" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00">+ dup()</text>
+<text text-anchor="start" x="261" y="-184" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator PatternSeq()</text>
+<text text-anchor="start" x="261" y="-173" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="261" y="-162" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node4&#45;&gt;Node1 -->
 <g id="edge4" class="edge">
 <title>Node4&#45;&gt;Node1</title>
-<path fill="none" stroke="#404040" d="M331,-160.21C331,-136.36 331,-112.06 331,-91.68"/>
+<path fill="none" stroke="#404040" d="M331,-154.97C331,-132.84 331,-110.61 331,-91.73"/>
 <polygon fill="none" stroke="#404040" points="331,-91.54 327,-85.54 331,-79.54 335,-85.54 331,-91.54"/>
 <text text-anchor="middle" x="354.5" y="-101" font-family="Helvetica,sans-Serif" font-size="10.00"> +pattern</text>
 </g>
@@ -166,7 +167,7 @@
 <!-- Node5&#45;&gt;Node4 -->
 <g id="edge5" class="edge">
 <title>Node5&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M336.27,-509.24C335.29,-464.41 334.21,-414.44 333.27,-371.58"/>
+<path fill="none" stroke="midnightblue" d="M336.26,-509.11C335.33,-466.24 334.3,-418.69 333.39,-377.16"/>
 <polygon fill="none" stroke="midnightblue" points="332.77,-509.4 336.49,-519.32 339.77,-509.25 332.77,-509.4"/>
 </g>
 <!-- Node6 -->
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataTypePattern__coll__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataTypePattern__coll__graph.svg
index 461514565b..5e0283cd56 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataTypePattern__coll__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataTypePattern__coll__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::DataTypePattern Pages: 1 -->
-<svg width="164pt" height="834pt"
- viewBox="0.00 0.00 164.00 834.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 830)">
+<svg width="164pt" height="845pt"
+ viewBox="0.00 0.00 164.00 845.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 841)">
 <title>tvm::relax::DataTypePattern</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-830 160,-830 160,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-841 160,-841 160,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -28,17 +28,18 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="0,-117.5 0,-328.5 156,-328.5 156,-117.5 0,-117.5"/>
-<text text-anchor="middle" x="78" y="-316.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="0,-309.5 156,-309.5 "/>
-<text text-anchor="middle" x="78" y="-297.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="0,-290.5 156,-290.5 "/>
+<polygon fill="white" stroke="black" points="0,-117.5 0,-339.5 156,-339.5 156,-117.5 0,-117.5"/>
+<text text-anchor="middle" x="78" y="-327.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="0,-320.5 156,-320.5 "/>
+<text text-anchor="middle" x="78" y="-308.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-301.5 156,-301.5 "/>
+<text text-anchor="start" x="8" y="-289.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="8" y="-278.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-267.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-256.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="8" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="8" y="-234.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="8" y="-223.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-267.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="8" y="-256.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="8" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="8" y="-234.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-223.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="8" y="-212.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="8" y="-201.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="8" y="-190.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -54,74 +55,74 @@
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M78,-107.49C78,-97.59 78,-88.11 78,-79.56"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-107.5 78,-117.5 81.5,-107.5 74.5,-107.5"/>
+<path fill="none" stroke="midnightblue" d="M78,-107.14C78,-97.43 78,-88.15 78,-79.78"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-107.39 78,-117.39 81.5,-107.39 74.5,-107.39"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="11,-366.5 11,-599.5 145,-599.5 145,-366.5 11,-366.5"/>
-<text text-anchor="middle" x="78" y="-587.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="11,-580.5 145,-580.5 "/>
-<text text-anchor="start" x="19" y="-568.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<polyline fill="none" stroke="black" points="11,-561.5 145,-561.5 "/>
+<polygon fill="white" stroke="black" points="11,-377.5 11,-610.5 145,-610.5 145,-377.5 11,-377.5"/>
+<text text-anchor="middle" x="78" y="-598.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="11,-591.5 145,-591.5 "/>
+<text text-anchor="start" x="19" y="-579.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<polyline fill="none" stroke="black" points="11,-572.5 145,-572.5 "/>
+<text text-anchor="start" x="19" y="-560.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="19" y="-549.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-538.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-527.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="19" y="-516.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="19" y="-505.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="19" y="-494.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="19" y="-483.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="19" y="-472.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="19" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="19" y="-450.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="19" y="-439.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-538.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="19" y="-527.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="19" y="-516.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="19" y="-505.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="19" y="-494.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="19" y="-483.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="19" y="-472.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="19" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="19" y="-450.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-439.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="19" y="-428.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-417.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-406.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="19" y="-395.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="19" y="-384.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="19" y="-373.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="19" y="-417.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="19" y="-406.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="19" y="-395.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="19" y="-384.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M78,-355.96C78,-346.87 78,-337.76 78,-328.81"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-356.21 78,-366.21 81.5,-356.21 74.5,-356.21"/>
+<path fill="none" stroke="midnightblue" d="M78,-367.36C78,-358.07 78,-348.73 78,-339.54"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-367.43 78,-377.43 81.5,-367.43 74.5,-367.43"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node">
 <title>Node4</title>
 <g id="a_node4"><a xlink:href="classtvm_1_1runtime_1_1ObjectPtr.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="black" points="8,-647.5 8,-825.5 148,-825.5 148,-647.5 8,-647.5"/>
-<text text-anchor="start" x="16" y="-813.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
-<text text-anchor="middle" x="78" y="-802.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
-<polyline fill="none" stroke="black" points="8,-795.5 148,-795.5 "/>
-<text text-anchor="middle" x="78" y="-783.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="8,-776.5 148,-776.5 "/>
+<polygon fill="white" stroke="black" points="8,-658.5 8,-836.5 148,-836.5 148,-658.5 8,-658.5"/>
+<text text-anchor="start" x="16" y="-824.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
+<text text-anchor="middle" x="78" y="-813.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
+<polyline fill="none" stroke="black" points="8,-806.5 148,-806.5 "/>
+<text text-anchor="middle" x="78" y="-794.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="8,-787.5 148,-787.5 "/>
+<text text-anchor="start" x="16" y="-775.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-764.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-753.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-742.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-731.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-720.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-709.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-698.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-687.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
-<text text-anchor="start" x="16" y="-676.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="16" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="16" y="-654.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
+<text text-anchor="start" x="16" y="-709.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
+<text text-anchor="start" x="16" y="-698.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
+<text text-anchor="start" x="16" y="-687.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="16" y="-676.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="16" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
 </a>
 </g>
 </g>
 <!-- Node4&#45;&gt;Node3 -->
 <g id="edge3" class="edge">
 <title>Node4&#45;&gt;Node3</title>
-<path fill="none" stroke="#404040" d="M78,-647.18C78,-635.84 78,-624.05 78,-612.23"/>
-<polygon fill="none" stroke="#404040" points="78,-611.91 74,-605.91 78,-599.91 82,-605.91 78,-611.91"/>
-<text text-anchor="middle" x="97.5" y="-621" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
+<path fill="none" stroke="#404040" d="M78,-658.18C78,-646.84 78,-635.05 78,-623.23"/>
+<polygon fill="none" stroke="#404040" points="78,-622.91 74,-616.91 78,-610.91 82,-616.91 78,-622.91"/>
+<text text-anchor="middle" x="97.5" y="-632" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataTypePattern__inherit__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataTypePattern__inherit__graph.svg
index af00db2537..5e3b8f7d2d 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataTypePattern__inherit__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataTypePattern__inherit__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::DataTypePattern Pages: 1 -->
-<svg width="164pt" height="617pt"
- viewBox="0.00 0.00 164.00 617.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 613)">
+<svg width="164pt" height="628pt"
+ viewBox="0.00 0.00 164.00 628.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 624)">
 <title>tvm::relax::DataTypePattern</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-613 160,-613 160,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-624 160,-624 160,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -28,17 +28,18 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="0,-116.5 0,-327.5 156,-327.5 156,-116.5 0,-116.5"/>
-<text text-anchor="middle" x="78" y="-315.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="0,-308.5 156,-308.5 "/>
-<text text-anchor="middle" x="78" y="-296.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="0,-289.5 156,-289.5 "/>
+<polygon fill="white" stroke="black" points="0,-116.5 0,-338.5 156,-338.5 156,-116.5 0,-116.5"/>
+<text text-anchor="middle" x="78" y="-326.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="0,-319.5 156,-319.5 "/>
+<text text-anchor="middle" x="78" y="-307.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-300.5 156,-300.5 "/>
+<text text-anchor="start" x="8" y="-288.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="8" y="-277.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="8" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="8" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="8" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="8" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="8" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="8" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="8" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="8" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="8" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -54,44 +55,44 @@
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M78,-106.05C78,-96.73 78,-87.8 78,-79.7"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-106.29 78,-116.29 81.5,-106.29 74.5,-106.29"/>
+<path fill="none" stroke="midnightblue" d="M78,-106.43C78,-96.94 78,-87.86 78,-79.66"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-106.45 78,-116.45 81.5,-106.45 74.5,-106.45"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="11,-364.5 11,-608.5 145,-608.5 145,-364.5 11,-364.5"/>
-<text text-anchor="middle" x="78" y="-596.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="11,-589.5 145,-589.5 "/>
-<text text-anchor="start" x="19" y="-577.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<text text-anchor="start" x="19" y="-566.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
-<polyline fill="none" stroke="black" points="11,-559.5 145,-559.5 "/>
+<polygon fill="white" stroke="black" points="11,-375.5 11,-619.5 145,-619.5 145,-375.5 11,-375.5"/>
+<text text-anchor="middle" x="78" y="-607.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="11,-600.5 145,-600.5 "/>
+<text text-anchor="start" x="19" y="-588.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<text text-anchor="start" x="19" y="-577.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
+<polyline fill="none" stroke="black" points="11,-570.5 145,-570.5 "/>
+<text text-anchor="start" x="19" y="-558.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="19" y="-547.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="19" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="19" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="19" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="19" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="19" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="19" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="19" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="19" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="19" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="19" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="19" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="19" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="19" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="19" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="19" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="19" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="19" y="-426.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="19" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="19" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="19" y="-371.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="19" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="19" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="19" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="19" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M78,-354.19C78,-345.29 78,-336.38 78,-327.64"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-354.24 78,-364.24 81.5,-354.24 74.5,-354.24"/>
+<path fill="none" stroke="midnightblue" d="M78,-365.4C78,-356.5 78,-347.57 78,-338.79"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-365.44 78,-375.44 81.5,-365.44 74.5,-365.44"/>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataflowVarPattern-members.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataflowVarPattern-members.html
index 8aa9402790..0fdb5b67d1 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataflowVarPattern-members.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataflowVarPattern-members.html
@@ -90,24 +90,25 @@ $(function() {
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#aef57e18f93cc317ba30efbd986a7df18">HasDtype</a>(const std::string &amp;dtype) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a38905d1b7e0ab207b658afce9e50f838">HasSameShapeAs</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a16acd19f1cda9add85d03ce7afa06ad3">HasShape</a>(const Array&lt; PrimExpr &gt; &amp;shape) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DataflowVarPattern.html#addb6b8cd5e8a961dddd331a1516430a2">TVM_DEFINE_OBJECT_REF_METHODS</a>(DataflowVarPattern, DFPattern, DataflowVarPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DataflowVarPattern.html">tvm::relax::DataflowVarPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">tvm::relax::DFPattern::TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a>(const StructInfo &amp;struct_info) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DataflowVarPattern.html#addb6b8cd5e8a961dddd331a1516430a2">TVM_DEFINE_OBJECT_REF_METHODS</a>(DataflowVarPattern, DFPattern, DataflowVarPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DataflowVarPattern.html">tvm::relax::DataflowVarPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">tvm::relax::DFPattern::TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataflowVarPattern.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataflowVarPattern.html
index 8c892faa5f..3c204b0f35 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataflowVarPattern.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataflowVarPattern.html
@@ -80,13 +80,13 @@ $(function() {
 <div class="dynheader">
 Inheritance diagram for tvm::relax::DataflowVarPattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1DataflowVarPattern__inherit__graph.svg" width="234" height="823"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1DataflowVarPattern__inherit__graph.svg" width="234" height="838"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <div class="dynheader">
 Collaboration diagram for tvm::relax::DataflowVarPattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1DataflowVarPattern__coll__graph.svg" width="234" height="1112"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1DataflowVarPattern__coll__graph.svg" width="234" height="1127"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <table class="memberdecls">
@@ -116,6 +116,9 @@ Public Member Functions</h2></td></tr>
 <tr class="memitem:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1AttrPattern.html">AttrPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">HasAttr</a> (const <a class="el" href="classtvm_1_1runtime_1_1Map.html">Map</a>&lt; <a class="el" href="classtvm_1_1run [...]
 <tr class="memdesc:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating an <a class="el" href="classtvm_1_1relax_1_1AttrPattern.html" title="Managed reference to AttrPatternNode.">AttrPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">More...</a><br /></td></tr>
 <tr class="separator:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a> (const <a class="el" href="classtvm_1_1relax_1_1StructInfo.html">StructInfo</a> &amp;stru [...]
+<tr class="memdesc:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">More...</a><br /></td></tr>
+<tr class="separator:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1TypePattern.html">TypePattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a> (const <a class="el" href="classtvm_1_1Type.html">Type</a> &amp;type) const</td></tr>
 <tr class="memdesc:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1TypePattern.html" title="Managed reference to TypePatternNode.">TypePattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">More...</a><br /></td></tr>
 <tr class="separator:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataflowVarPattern__coll__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataflowVarPattern__coll__graph.svg
index 8bc390d36f..1ae4398558 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataflowVarPattern__coll__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataflowVarPattern__coll__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::DataflowVarPattern Pages: 1 -->
-<svg width="175pt" height="834pt"
- viewBox="0.00 0.00 175.00 834.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 830)">
+<svg width="175pt" height="845pt"
+ viewBox="0.00 0.00 175.00 845.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 841)">
 <title>tvm::relax::DataflowVarPattern</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-830 171,-830 171,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-841 171,-841 171,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -28,17 +28,18 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="5.5,-117.5 5.5,-328.5 161.5,-328.5 161.5,-117.5 5.5,-117.5"/>
-<text text-anchor="middle" x="83.5" y="-316.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="5.5,-309.5 161.5,-309.5 "/>
-<text text-anchor="middle" x="83.5" y="-297.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="5.5,-290.5 161.5,-290.5 "/>
+<polygon fill="white" stroke="black" points="5.5,-117.5 5.5,-339.5 161.5,-339.5 161.5,-117.5 5.5,-117.5"/>
+<text text-anchor="middle" x="83.5" y="-327.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="5.5,-320.5 161.5,-320.5 "/>
+<text text-anchor="middle" x="83.5" y="-308.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="5.5,-301.5 161.5,-301.5 "/>
+<text text-anchor="start" x="13.5" y="-289.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="13.5" y="-278.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="13.5" y="-267.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="13.5" y="-256.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="13.5" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="13.5" y="-234.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="13.5" y="-223.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="13.5" y="-267.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="13.5" y="-256.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="13.5" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="13.5" y="-234.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="13.5" y="-223.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="13.5" y="-212.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="13.5" y="-201.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="13.5" y="-190.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -54,74 +55,74 @@
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M83.5,-107.49C83.5,-97.59 83.5,-88.11 83.5,-79.56"/>
-<polygon fill="none" stroke="midnightblue" points="80,-107.5 83.5,-117.5 87,-107.5 80,-107.5"/>
+<path fill="none" stroke="midnightblue" d="M83.5,-107.14C83.5,-97.43 83.5,-88.15 83.5,-79.78"/>
+<polygon fill="none" stroke="midnightblue" points="80,-107.39 83.5,-117.39 87,-107.39 80,-107.39"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="16.5,-366.5 16.5,-599.5 150.5,-599.5 150.5,-366.5 16.5,-366.5"/>
-<text text-anchor="middle" x="83.5" y="-587.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="16.5,-580.5 150.5,-580.5 "/>
-<text text-anchor="start" x="24.5" y="-568.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<polyline fill="none" stroke="black" points="16.5,-561.5 150.5,-561.5 "/>
+<polygon fill="white" stroke="black" points="16.5,-377.5 16.5,-610.5 150.5,-610.5 150.5,-377.5 16.5,-377.5"/>
+<text text-anchor="middle" x="83.5" y="-598.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="16.5,-591.5 150.5,-591.5 "/>
+<text text-anchor="start" x="24.5" y="-579.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<polyline fill="none" stroke="black" points="16.5,-572.5 150.5,-572.5 "/>
+<text text-anchor="start" x="24.5" y="-560.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="24.5" y="-549.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="24.5" y="-538.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="24.5" y="-527.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="24.5" y="-516.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="24.5" y="-505.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="24.5" y="-494.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="24.5" y="-483.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="24.5" y="-472.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="24.5" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="24.5" y="-450.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="24.5" y="-439.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="24.5" y="-538.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="24.5" y="-527.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="24.5" y="-516.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="24.5" y="-505.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="24.5" y="-494.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="24.5" y="-483.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="24.5" y="-472.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="24.5" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="24.5" y="-450.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="24.5" y="-439.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="24.5" y="-428.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="24.5" y="-417.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="24.5" y="-406.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="24.5" y="-395.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="24.5" y="-384.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="24.5" y="-373.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="24.5" y="-417.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="24.5" y="-406.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="24.5" y="-395.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="24.5" y="-384.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M83.5,-355.96C83.5,-346.87 83.5,-337.76 83.5,-328.81"/>
-<polygon fill="none" stroke="midnightblue" points="80,-356.21 83.5,-366.21 87,-356.21 80,-356.21"/>
+<path fill="none" stroke="midnightblue" d="M83.5,-367.36C83.5,-358.07 83.5,-348.73 83.5,-339.54"/>
+<polygon fill="none" stroke="midnightblue" points="80,-367.43 83.5,-377.43 87,-367.43 80,-367.43"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node">
 <title>Node4</title>
 <g id="a_node4"><a xlink:href="classtvm_1_1runtime_1_1ObjectPtr.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="black" points="13.5,-647.5 13.5,-825.5 153.5,-825.5 153.5,-647.5 13.5,-647.5"/>
-<text text-anchor="start" x="21.5" y="-813.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
-<text text-anchor="middle" x="83.5" y="-802.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
-<polyline fill="none" stroke="black" points="13.5,-795.5 153.5,-795.5 "/>
-<text text-anchor="middle" x="83.5" y="-783.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="13.5,-776.5 153.5,-776.5 "/>
+<polygon fill="white" stroke="black" points="13.5,-658.5 13.5,-836.5 153.5,-836.5 153.5,-658.5 13.5,-658.5"/>
+<text text-anchor="start" x="21.5" y="-824.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
+<text text-anchor="middle" x="83.5" y="-813.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
+<polyline fill="none" stroke="black" points="13.5,-806.5 153.5,-806.5 "/>
+<text text-anchor="middle" x="83.5" y="-794.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="13.5,-787.5 153.5,-787.5 "/>
+<text text-anchor="start" x="21.5" y="-775.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="21.5" y="-764.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="21.5" y="-753.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="21.5" y="-742.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="21.5" y="-731.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="21.5" y="-720.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="21.5" y="-709.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="21.5" y="-698.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
-<text text-anchor="start" x="21.5" y="-687.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
-<text text-anchor="start" x="21.5" y="-676.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="21.5" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="21.5" y="-654.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
+<text text-anchor="start" x="21.5" y="-709.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
+<text text-anchor="start" x="21.5" y="-698.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
+<text text-anchor="start" x="21.5" y="-687.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="21.5" y="-676.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="21.5" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
 </a>
 </g>
 </g>
 <!-- Node4&#45;&gt;Node3 -->
 <g id="edge3" class="edge">
 <title>Node4&#45;&gt;Node3</title>
-<path fill="none" stroke="#404040" d="M83.5,-647.18C83.5,-635.84 83.5,-624.05 83.5,-612.23"/>
-<polygon fill="none" stroke="#404040" points="83.5,-611.91 79.5,-605.91 83.5,-599.91 87.5,-605.91 83.5,-611.91"/>
-<text text-anchor="middle" x="103" y="-621" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
+<path fill="none" stroke="#404040" d="M83.5,-658.18C83.5,-646.84 83.5,-635.05 83.5,-623.23"/>
+<polygon fill="none" stroke="#404040" points="83.5,-622.91 79.5,-616.91 83.5,-610.91 87.5,-616.91 83.5,-622.91"/>
+<text text-anchor="middle" x="103" y="-632" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataflowVarPattern__inherit__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataflowVarPattern__inherit__graph.svg
index a060d5902d..7d934c4693 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataflowVarPattern__inherit__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1DataflowVarPattern__inherit__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::DataflowVarPattern Pages: 1 -->
-<svg width="175pt" height="617pt"
- viewBox="0.00 0.00 175.00 617.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 613)">
+<svg width="175pt" height="628pt"
+ viewBox="0.00 0.00 175.00 628.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 624)">
 <title>tvm::relax::DataflowVarPattern</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-613 171,-613 171,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-624 171,-624 171,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -28,17 +28,18 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="5.5,-116.5 5.5,-327.5 161.5,-327.5 161.5,-116.5 5.5,-116.5"/>
-<text text-anchor="middle" x="83.5" y="-315.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="5.5,-308.5 161.5,-308.5 "/>
-<text text-anchor="middle" x="83.5" y="-296.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="5.5,-289.5 161.5,-289.5 "/>
+<polygon fill="white" stroke="black" points="5.5,-116.5 5.5,-338.5 161.5,-338.5 161.5,-116.5 5.5,-116.5"/>
+<text text-anchor="middle" x="83.5" y="-326.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="5.5,-319.5 161.5,-319.5 "/>
+<text text-anchor="middle" x="83.5" y="-307.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="5.5,-300.5 161.5,-300.5 "/>
+<text text-anchor="start" x="13.5" y="-288.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="13.5" y="-277.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="13.5" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="13.5" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="13.5" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="13.5" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="13.5" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="13.5" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="13.5" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="13.5" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="13.5" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="13.5" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="13.5" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="13.5" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="13.5" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -54,44 +55,44 @@
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M83.5,-106.05C83.5,-96.73 83.5,-87.8 83.5,-79.7"/>
-<polygon fill="none" stroke="midnightblue" points="80,-106.29 83.5,-116.29 87,-106.29 80,-106.29"/>
+<path fill="none" stroke="midnightblue" d="M83.5,-106.43C83.5,-96.94 83.5,-87.86 83.5,-79.66"/>
+<polygon fill="none" stroke="midnightblue" points="80,-106.45 83.5,-116.45 87,-106.45 80,-106.45"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="16.5,-364.5 16.5,-608.5 150.5,-608.5 150.5,-364.5 16.5,-364.5"/>
-<text text-anchor="middle" x="83.5" y="-596.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="16.5,-589.5 150.5,-589.5 "/>
-<text text-anchor="start" x="24.5" y="-577.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<text text-anchor="start" x="24.5" y="-566.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
-<polyline fill="none" stroke="black" points="16.5,-559.5 150.5,-559.5 "/>
+<polygon fill="white" stroke="black" points="16.5,-375.5 16.5,-619.5 150.5,-619.5 150.5,-375.5 16.5,-375.5"/>
+<text text-anchor="middle" x="83.5" y="-607.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="16.5,-600.5 150.5,-600.5 "/>
+<text text-anchor="start" x="24.5" y="-588.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<text text-anchor="start" x="24.5" y="-577.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
+<polyline fill="none" stroke="black" points="16.5,-570.5 150.5,-570.5 "/>
+<text text-anchor="start" x="24.5" y="-558.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="24.5" y="-547.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="24.5" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="24.5" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="24.5" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="24.5" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="24.5" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="24.5" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="24.5" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="24.5" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="24.5" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="24.5" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="24.5" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="24.5" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="24.5" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="24.5" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="24.5" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="24.5" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="24.5" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="24.5" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="24.5" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="24.5" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="24.5" y="-426.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="24.5" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="24.5" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="24.5" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="24.5" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="24.5" y="-371.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="24.5" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="24.5" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="24.5" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="24.5" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M83.5,-354.19C83.5,-345.29 83.5,-336.38 83.5,-327.64"/>
-<polygon fill="none" stroke="midnightblue" points="80,-354.24 83.5,-364.24 87,-354.24 80,-354.24"/>
+<path fill="none" stroke="midnightblue" d="M83.5,-365.4C83.5,-356.5 83.5,-347.57 83.5,-338.79"/>
+<polygon fill="none" stroke="midnightblue" points="80,-365.44 83.5,-375.44 87,-365.44 80,-365.44"/>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExprPattern-members.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExprPattern-members.html
index 9605b7234a..111b9a261f 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExprPattern-members.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExprPattern-members.html
@@ -90,24 +90,25 @@ $(function() {
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#aef57e18f93cc317ba30efbd986a7df18">HasDtype</a>(const std::string &amp;dtype) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a38905d1b7e0ab207b658afce9e50f838">HasSameShapeAs</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a16acd19f1cda9add85d03ce7afa06ad3">HasShape</a>(const Array&lt; PrimExpr &gt; &amp;shape) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1ExprPattern.html#aeae102a3a516b248f229e91604785940">TVM_DEFINE_OBJECT_REF_METHODS</a>(ExprPattern, DFPattern, ExprPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1ExprPattern.html">tvm::relax::ExprPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">tvm::relax::DFPattern::TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a>(const StructInfo &amp;struct_info) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1ExprPattern.html#aeae102a3a516b248f229e91604785940">TVM_DEFINE_OBJECT_REF_METHODS</a>(ExprPattern, DFPattern, ExprPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1ExprPattern.html">tvm::relax::ExprPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">tvm::relax::DFPattern::TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExprPattern.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExprPattern.html
index 816b9ec1ec..66648acdab 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExprPattern.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExprPattern.html
@@ -80,13 +80,13 @@ $(function() {
 <div class="dynheader">
 Inheritance diagram for tvm::relax::ExprPattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1ExprPattern__inherit__graph.svg" width="219" height="823"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1ExprPattern__inherit__graph.svg" width="219" height="838"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <div class="dynheader">
 Collaboration diagram for tvm::relax::ExprPattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1ExprPattern__coll__graph.svg" width="219" height="1112"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1ExprPattern__coll__graph.svg" width="219" height="1127"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <table class="memberdecls">
@@ -116,6 +116,9 @@ Public Member Functions</h2></td></tr>
 <tr class="memitem:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1AttrPattern.html">AttrPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">HasAttr</a> (const <a class="el" href="classtvm_1_1runtime_1_1Map.html">Map</a>&lt; <a class="el" href="classtvm_1_1run [...]
 <tr class="memdesc:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating an <a class="el" href="classtvm_1_1relax_1_1AttrPattern.html" title="Managed reference to AttrPatternNode.">AttrPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">More...</a><br /></td></tr>
 <tr class="separator:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a> (const <a class="el" href="classtvm_1_1relax_1_1StructInfo.html">StructInfo</a> &amp;stru [...]
+<tr class="memdesc:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">More...</a><br /></td></tr>
+<tr class="separator:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1TypePattern.html">TypePattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a> (const <a class="el" href="classtvm_1_1Type.html">Type</a> &amp;type) const</td></tr>
 <tr class="memdesc:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1TypePattern.html" title="Managed reference to TypePatternNode.">TypePattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">More...</a><br /></td></tr>
 <tr class="separator:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExprPattern__coll__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExprPattern__coll__graph.svg
index 5bf8b49123..d937aa7214 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExprPattern__coll__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExprPattern__coll__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::ExprPattern Pages: 1 -->
-<svg width="164pt" height="834pt"
- viewBox="0.00 0.00 164.00 834.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 830)">
+<svg width="164pt" height="845pt"
+ viewBox="0.00 0.00 164.00 845.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 841)">
 <title>tvm::relax::ExprPattern</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-830 160,-830 160,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-841 160,-841 160,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -28,17 +28,18 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="0,-117.5 0,-328.5 156,-328.5 156,-117.5 0,-117.5"/>
-<text text-anchor="middle" x="78" y="-316.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="0,-309.5 156,-309.5 "/>
-<text text-anchor="middle" x="78" y="-297.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="0,-290.5 156,-290.5 "/>
+<polygon fill="white" stroke="black" points="0,-117.5 0,-339.5 156,-339.5 156,-117.5 0,-117.5"/>
+<text text-anchor="middle" x="78" y="-327.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="0,-320.5 156,-320.5 "/>
+<text text-anchor="middle" x="78" y="-308.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-301.5 156,-301.5 "/>
+<text text-anchor="start" x="8" y="-289.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="8" y="-278.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-267.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-256.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="8" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="8" y="-234.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="8" y="-223.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-267.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="8" y="-256.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="8" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="8" y="-234.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-223.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="8" y="-212.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="8" y="-201.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="8" y="-190.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -54,74 +55,74 @@
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M78,-107.49C78,-97.59 78,-88.11 78,-79.56"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-107.5 78,-117.5 81.5,-107.5 74.5,-107.5"/>
+<path fill="none" stroke="midnightblue" d="M78,-107.14C78,-97.43 78,-88.15 78,-79.78"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-107.39 78,-117.39 81.5,-107.39 74.5,-107.39"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="11,-366.5 11,-599.5 145,-599.5 145,-366.5 11,-366.5"/>
-<text text-anchor="middle" x="78" y="-587.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="11,-580.5 145,-580.5 "/>
-<text text-anchor="start" x="19" y="-568.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<polyline fill="none" stroke="black" points="11,-561.5 145,-561.5 "/>
+<polygon fill="white" stroke="black" points="11,-377.5 11,-610.5 145,-610.5 145,-377.5 11,-377.5"/>
+<text text-anchor="middle" x="78" y="-598.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="11,-591.5 145,-591.5 "/>
+<text text-anchor="start" x="19" y="-579.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<polyline fill="none" stroke="black" points="11,-572.5 145,-572.5 "/>
+<text text-anchor="start" x="19" y="-560.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="19" y="-549.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-538.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-527.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="19" y="-516.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="19" y="-505.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="19" y="-494.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="19" y="-483.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="19" y="-472.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="19" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="19" y="-450.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="19" y="-439.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-538.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="19" y="-527.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="19" y="-516.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="19" y="-505.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="19" y="-494.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="19" y="-483.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="19" y="-472.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="19" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="19" y="-450.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-439.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="19" y="-428.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-417.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-406.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="19" y="-395.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="19" y="-384.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="19" y="-373.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="19" y="-417.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="19" y="-406.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="19" y="-395.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="19" y="-384.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M78,-355.96C78,-346.87 78,-337.76 78,-328.81"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-356.21 78,-366.21 81.5,-356.21 74.5,-356.21"/>
+<path fill="none" stroke="midnightblue" d="M78,-367.36C78,-358.07 78,-348.73 78,-339.54"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-367.43 78,-377.43 81.5,-367.43 74.5,-367.43"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node">
 <title>Node4</title>
 <g id="a_node4"><a xlink:href="classtvm_1_1runtime_1_1ObjectPtr.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="black" points="8,-647.5 8,-825.5 148,-825.5 148,-647.5 8,-647.5"/>
-<text text-anchor="start" x="16" y="-813.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
-<text text-anchor="middle" x="78" y="-802.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
-<polyline fill="none" stroke="black" points="8,-795.5 148,-795.5 "/>
-<text text-anchor="middle" x="78" y="-783.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="8,-776.5 148,-776.5 "/>
+<polygon fill="white" stroke="black" points="8,-658.5 8,-836.5 148,-836.5 148,-658.5 8,-658.5"/>
+<text text-anchor="start" x="16" y="-824.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
+<text text-anchor="middle" x="78" y="-813.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
+<polyline fill="none" stroke="black" points="8,-806.5 148,-806.5 "/>
+<text text-anchor="middle" x="78" y="-794.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="8,-787.5 148,-787.5 "/>
+<text text-anchor="start" x="16" y="-775.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-764.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-753.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-742.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-731.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-720.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-709.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-698.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-687.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
-<text text-anchor="start" x="16" y="-676.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="16" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="16" y="-654.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
+<text text-anchor="start" x="16" y="-709.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
+<text text-anchor="start" x="16" y="-698.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
+<text text-anchor="start" x="16" y="-687.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="16" y="-676.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="16" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
 </a>
 </g>
 </g>
 <!-- Node4&#45;&gt;Node3 -->
 <g id="edge3" class="edge">
 <title>Node4&#45;&gt;Node3</title>
-<path fill="none" stroke="#404040" d="M78,-647.18C78,-635.84 78,-624.05 78,-612.23"/>
-<polygon fill="none" stroke="#404040" points="78,-611.91 74,-605.91 78,-599.91 82,-605.91 78,-611.91"/>
-<text text-anchor="middle" x="97.5" y="-621" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
+<path fill="none" stroke="#404040" d="M78,-658.18C78,-646.84 78,-635.05 78,-623.23"/>
+<polygon fill="none" stroke="#404040" points="78,-622.91 74,-616.91 78,-610.91 82,-616.91 78,-622.91"/>
+<text text-anchor="middle" x="97.5" y="-632" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExprPattern__inherit__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExprPattern__inherit__graph.svg
index 99f3a7dec3..bedaf4b0c4 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExprPattern__inherit__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExprPattern__inherit__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::ExprPattern Pages: 1 -->
-<svg width="164pt" height="617pt"
- viewBox="0.00 0.00 164.00 617.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 613)">
+<svg width="164pt" height="628pt"
+ viewBox="0.00 0.00 164.00 628.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 624)">
 <title>tvm::relax::ExprPattern</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-613 160,-613 160,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-624 160,-624 160,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -28,17 +28,18 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="0,-116.5 0,-327.5 156,-327.5 156,-116.5 0,-116.5"/>
-<text text-anchor="middle" x="78" y="-315.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="0,-308.5 156,-308.5 "/>
-<text text-anchor="middle" x="78" y="-296.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="0,-289.5 156,-289.5 "/>
+<polygon fill="white" stroke="black" points="0,-116.5 0,-338.5 156,-338.5 156,-116.5 0,-116.5"/>
+<text text-anchor="middle" x="78" y="-326.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="0,-319.5 156,-319.5 "/>
+<text text-anchor="middle" x="78" y="-307.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-300.5 156,-300.5 "/>
+<text text-anchor="start" x="8" y="-288.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="8" y="-277.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="8" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="8" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="8" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="8" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="8" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="8" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="8" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="8" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="8" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -54,44 +55,44 @@
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M78,-106.05C78,-96.73 78,-87.8 78,-79.7"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-106.29 78,-116.29 81.5,-106.29 74.5,-106.29"/>
+<path fill="none" stroke="midnightblue" d="M78,-106.43C78,-96.94 78,-87.86 78,-79.66"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-106.45 78,-116.45 81.5,-106.45 74.5,-106.45"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="11,-364.5 11,-608.5 145,-608.5 145,-364.5 11,-364.5"/>
-<text text-anchor="middle" x="78" y="-596.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="11,-589.5 145,-589.5 "/>
-<text text-anchor="start" x="19" y="-577.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<text text-anchor="start" x="19" y="-566.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
-<polyline fill="none" stroke="black" points="11,-559.5 145,-559.5 "/>
+<polygon fill="white" stroke="black" points="11,-375.5 11,-619.5 145,-619.5 145,-375.5 11,-375.5"/>
+<text text-anchor="middle" x="78" y="-607.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="11,-600.5 145,-600.5 "/>
+<text text-anchor="start" x="19" y="-588.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<text text-anchor="start" x="19" y="-577.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
+<polyline fill="none" stroke="black" points="11,-570.5 145,-570.5 "/>
+<text text-anchor="start" x="19" y="-558.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="19" y="-547.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="19" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="19" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="19" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="19" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="19" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="19" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="19" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="19" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="19" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="19" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="19" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="19" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="19" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="19" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="19" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="19" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="19" y="-426.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="19" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="19" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="19" y="-371.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="19" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="19" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="19" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="19" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M78,-354.19C78,-345.29 78,-336.38 78,-327.64"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-354.24 78,-364.24 81.5,-354.24 74.5,-354.24"/>
+<path fill="none" stroke="midnightblue" d="M78,-365.4C78,-356.5 78,-347.57 78,-338.79"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-365.44 78,-375.44 81.5,-365.44 74.5,-365.44"/>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExternFuncPattern-members.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExternFuncPattern-members.html
index 49b11e5ac7..26aa987d10 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExternFuncPattern-members.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExternFuncPattern-members.html
@@ -90,24 +90,25 @@ $(function() {
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#aef57e18f93cc317ba30efbd986a7df18">HasDtype</a>(const std::string &amp;dtype) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a38905d1b7e0ab207b658afce9e50f838">HasSameShapeAs</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a16acd19f1cda9add85d03ce7afa06ad3">HasShape</a>(const Array&lt; PrimExpr &gt; &amp;shape) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1ExternFuncPattern.html#a72922bb9f22fab588b759e8f06645bc3">TVM_DEFINE_OBJECT_REF_METHODS</a>(ExternFuncPattern, DFPattern, ExternFuncPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1ExternFuncPattern.html">tvm::relax::ExternFuncPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">tvm::relax::DFPattern::TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a>(const StructInfo &amp;struct_info) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1ExternFuncPattern.html#a72922bb9f22fab588b759e8f06645bc3">TVM_DEFINE_OBJECT_REF_METHODS</a>(ExternFuncPattern, DFPattern, ExternFuncPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1ExternFuncPattern.html">tvm::relax::ExternFuncPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">tvm::relax::DFPattern::TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExternFuncPattern.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExternFuncPattern.html
index 233dd62147..b8504391ca 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExternFuncPattern.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExternFuncPattern.html
@@ -80,13 +80,13 @@ $(function() {
 <div class="dynheader">
 Inheritance diagram for tvm::relax::ExternFuncPattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1ExternFuncPattern__inherit__graph.svg" width="226" height="823"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1ExternFuncPattern__inherit__graph.svg" width="226" height="838"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <div class="dynheader">
 Collaboration diagram for tvm::relax::ExternFuncPattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1ExternFuncPattern__coll__graph.svg" width="226" height="1112"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1ExternFuncPattern__coll__graph.svg" width="226" height="1127"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <table class="memberdecls">
@@ -116,6 +116,9 @@ Public Member Functions</h2></td></tr>
 <tr class="memitem:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1AttrPattern.html">AttrPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">HasAttr</a> (const <a class="el" href="classtvm_1_1runtime_1_1Map.html">Map</a>&lt; <a class="el" href="classtvm_1_1run [...]
 <tr class="memdesc:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating an <a class="el" href="classtvm_1_1relax_1_1AttrPattern.html" title="Managed reference to AttrPatternNode.">AttrPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">More...</a><br /></td></tr>
 <tr class="separator:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a> (const <a class="el" href="classtvm_1_1relax_1_1StructInfo.html">StructInfo</a> &amp;stru [...]
+<tr class="memdesc:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">More...</a><br /></td></tr>
+<tr class="separator:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1TypePattern.html">TypePattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a> (const <a class="el" href="classtvm_1_1Type.html">Type</a> &amp;type) const</td></tr>
 <tr class="memdesc:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1TypePattern.html" title="Managed reference to TypePatternNode.">TypePattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">More...</a><br /></td></tr>
 <tr class="separator:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExternFuncPattern__coll__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExternFuncPattern__coll__graph.svg
index a073328e2b..fde3b8d12f 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExternFuncPattern__coll__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExternFuncPattern__coll__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::ExternFuncPattern Pages: 1 -->
-<svg width="169pt" height="834pt"
- viewBox="0.00 0.00 169.00 834.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 830)">
+<svg width="169pt" height="845pt"
+ viewBox="0.00 0.00 169.00 845.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 841)">
 <title>tvm::relax::ExternFuncPattern</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-830 165,-830 165,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-841 165,-841 165,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -28,17 +28,18 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="2.5,-117.5 2.5,-328.5 158.5,-328.5 158.5,-117.5 2.5,-117.5"/>
-<text text-anchor="middle" x="80.5" y="-316.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="2.5,-309.5 158.5,-309.5 "/>
-<text text-anchor="middle" x="80.5" y="-297.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="2.5,-290.5 158.5,-290.5 "/>
+<polygon fill="white" stroke="black" points="2.5,-117.5 2.5,-339.5 158.5,-339.5 158.5,-117.5 2.5,-117.5"/>
+<text text-anchor="middle" x="80.5" y="-327.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="2.5,-320.5 158.5,-320.5 "/>
+<text text-anchor="middle" x="80.5" y="-308.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="2.5,-301.5 158.5,-301.5 "/>
+<text text-anchor="start" x="10.5" y="-289.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="10.5" y="-278.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="10.5" y="-267.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="10.5" y="-256.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="10.5" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="10.5" y="-234.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="10.5" y="-223.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="10.5" y="-267.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="10.5" y="-256.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="10.5" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="10.5" y="-234.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="10.5" y="-223.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="10.5" y="-212.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="10.5" y="-201.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="10.5" y="-190.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -54,74 +55,74 @@
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M80.5,-107.49C80.5,-97.59 80.5,-88.11 80.5,-79.56"/>
-<polygon fill="none" stroke="midnightblue" points="77,-107.5 80.5,-117.5 84,-107.5 77,-107.5"/>
+<path fill="none" stroke="midnightblue" d="M80.5,-107.14C80.5,-97.43 80.5,-88.15 80.5,-79.78"/>
+<polygon fill="none" stroke="midnightblue" points="77,-107.39 80.5,-117.39 84,-107.39 77,-107.39"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="13.5,-366.5 13.5,-599.5 147.5,-599.5 147.5,-366.5 13.5,-366.5"/>
-<text text-anchor="middle" x="80.5" y="-587.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="13.5,-580.5 147.5,-580.5 "/>
-<text text-anchor="start" x="21.5" y="-568.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<polyline fill="none" stroke="black" points="13.5,-561.5 147.5,-561.5 "/>
+<polygon fill="white" stroke="black" points="13.5,-377.5 13.5,-610.5 147.5,-610.5 147.5,-377.5 13.5,-377.5"/>
+<text text-anchor="middle" x="80.5" y="-598.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="13.5,-591.5 147.5,-591.5 "/>
+<text text-anchor="start" x="21.5" y="-579.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<polyline fill="none" stroke="black" points="13.5,-572.5 147.5,-572.5 "/>
+<text text-anchor="start" x="21.5" y="-560.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="21.5" y="-549.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="21.5" y="-538.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="21.5" y="-527.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="21.5" y="-516.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="21.5" y="-505.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="21.5" y="-494.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="21.5" y="-483.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="21.5" y="-472.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="21.5" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="21.5" y="-450.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="21.5" y="-439.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="21.5" y="-538.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="21.5" y="-527.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="21.5" y="-516.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="21.5" y="-505.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="21.5" y="-494.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="21.5" y="-483.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="21.5" y="-472.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="21.5" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="21.5" y="-450.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="21.5" y="-439.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="21.5" y="-428.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="21.5" y="-417.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="21.5" y="-406.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="21.5" y="-395.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="21.5" y="-384.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="21.5" y="-373.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="21.5" y="-417.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="21.5" y="-406.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="21.5" y="-395.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="21.5" y="-384.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M80.5,-355.96C80.5,-346.87 80.5,-337.76 80.5,-328.81"/>
-<polygon fill="none" stroke="midnightblue" points="77,-356.21 80.5,-366.21 84,-356.21 77,-356.21"/>
+<path fill="none" stroke="midnightblue" d="M80.5,-367.36C80.5,-358.07 80.5,-348.73 80.5,-339.54"/>
+<polygon fill="none" stroke="midnightblue" points="77,-367.43 80.5,-377.43 84,-367.43 77,-367.43"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node">
 <title>Node4</title>
 <g id="a_node4"><a xlink:href="classtvm_1_1runtime_1_1ObjectPtr.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="black" points="10.5,-647.5 10.5,-825.5 150.5,-825.5 150.5,-647.5 10.5,-647.5"/>
-<text text-anchor="start" x="18.5" y="-813.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
-<text text-anchor="middle" x="80.5" y="-802.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
-<polyline fill="none" stroke="black" points="10.5,-795.5 150.5,-795.5 "/>
-<text text-anchor="middle" x="80.5" y="-783.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="10.5,-776.5 150.5,-776.5 "/>
+<polygon fill="white" stroke="black" points="10.5,-658.5 10.5,-836.5 150.5,-836.5 150.5,-658.5 10.5,-658.5"/>
+<text text-anchor="start" x="18.5" y="-824.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
+<text text-anchor="middle" x="80.5" y="-813.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
+<polyline fill="none" stroke="black" points="10.5,-806.5 150.5,-806.5 "/>
+<text text-anchor="middle" x="80.5" y="-794.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="10.5,-787.5 150.5,-787.5 "/>
+<text text-anchor="start" x="18.5" y="-775.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="18.5" y="-764.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="18.5" y="-753.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="18.5" y="-742.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="18.5" y="-731.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="18.5" y="-720.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="18.5" y="-709.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="18.5" y="-698.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
-<text text-anchor="start" x="18.5" y="-687.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
-<text text-anchor="start" x="18.5" y="-676.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="18.5" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="18.5" y="-654.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
+<text text-anchor="start" x="18.5" y="-709.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
+<text text-anchor="start" x="18.5" y="-698.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
+<text text-anchor="start" x="18.5" y="-687.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="18.5" y="-676.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="18.5" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
 </a>
 </g>
 </g>
 <!-- Node4&#45;&gt;Node3 -->
 <g id="edge3" class="edge">
 <title>Node4&#45;&gt;Node3</title>
-<path fill="none" stroke="#404040" d="M80.5,-647.18C80.5,-635.84 80.5,-624.05 80.5,-612.23"/>
-<polygon fill="none" stroke="#404040" points="80.5,-611.91 76.5,-605.91 80.5,-599.91 84.5,-605.91 80.5,-611.91"/>
-<text text-anchor="middle" x="100" y="-621" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
+<path fill="none" stroke="#404040" d="M80.5,-658.18C80.5,-646.84 80.5,-635.05 80.5,-623.23"/>
+<polygon fill="none" stroke="#404040" points="80.5,-622.91 76.5,-616.91 80.5,-610.91 84.5,-616.91 80.5,-622.91"/>
+<text text-anchor="middle" x="100" y="-632" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExternFuncPattern__inherit__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExternFuncPattern__inherit__graph.svg
index dd021486f5..358db98ab6 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExternFuncPattern__inherit__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1ExternFuncPattern__inherit__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::ExternFuncPattern Pages: 1 -->
-<svg width="169pt" height="617pt"
- viewBox="0.00 0.00 169.00 617.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 613)">
+<svg width="169pt" height="628pt"
+ viewBox="0.00 0.00 169.00 628.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 624)">
 <title>tvm::relax::ExternFuncPattern</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-613 165,-613 165,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-624 165,-624 165,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -28,17 +28,18 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="2.5,-116.5 2.5,-327.5 158.5,-327.5 158.5,-116.5 2.5,-116.5"/>
-<text text-anchor="middle" x="80.5" y="-315.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="2.5,-308.5 158.5,-308.5 "/>
-<text text-anchor="middle" x="80.5" y="-296.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="2.5,-289.5 158.5,-289.5 "/>
+<polygon fill="white" stroke="black" points="2.5,-116.5 2.5,-338.5 158.5,-338.5 158.5,-116.5 2.5,-116.5"/>
+<text text-anchor="middle" x="80.5" y="-326.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="2.5,-319.5 158.5,-319.5 "/>
+<text text-anchor="middle" x="80.5" y="-307.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="2.5,-300.5 158.5,-300.5 "/>
+<text text-anchor="start" x="10.5" y="-288.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="10.5" y="-277.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="10.5" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="10.5" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="10.5" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="10.5" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="10.5" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="10.5" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="10.5" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="10.5" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="10.5" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="10.5" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="10.5" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="10.5" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="10.5" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -54,44 +55,44 @@
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M80.5,-106.05C80.5,-96.73 80.5,-87.8 80.5,-79.7"/>
-<polygon fill="none" stroke="midnightblue" points="77,-106.29 80.5,-116.29 84,-106.29 77,-106.29"/>
+<path fill="none" stroke="midnightblue" d="M80.5,-106.43C80.5,-96.94 80.5,-87.86 80.5,-79.66"/>
+<polygon fill="none" stroke="midnightblue" points="77,-106.45 80.5,-116.45 84,-106.45 77,-106.45"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="13.5,-364.5 13.5,-608.5 147.5,-608.5 147.5,-364.5 13.5,-364.5"/>
-<text text-anchor="middle" x="80.5" y="-596.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="13.5,-589.5 147.5,-589.5 "/>
-<text text-anchor="start" x="21.5" y="-577.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<text text-anchor="start" x="21.5" y="-566.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
-<polyline fill="none" stroke="black" points="13.5,-559.5 147.5,-559.5 "/>
+<polygon fill="white" stroke="black" points="13.5,-375.5 13.5,-619.5 147.5,-619.5 147.5,-375.5 13.5,-375.5"/>
+<text text-anchor="middle" x="80.5" y="-607.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="13.5,-600.5 147.5,-600.5 "/>
+<text text-anchor="start" x="21.5" y="-588.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<text text-anchor="start" x="21.5" y="-577.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
+<polyline fill="none" stroke="black" points="13.5,-570.5 147.5,-570.5 "/>
+<text text-anchor="start" x="21.5" y="-558.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="21.5" y="-547.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="21.5" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="21.5" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="21.5" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="21.5" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="21.5" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="21.5" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="21.5" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="21.5" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="21.5" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="21.5" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="21.5" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="21.5" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="21.5" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="21.5" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="21.5" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="21.5" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="21.5" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="21.5" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="21.5" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="21.5" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="21.5" y="-426.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="21.5" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="21.5" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="21.5" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="21.5" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="21.5" y="-371.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="21.5" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="21.5" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="21.5" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="21.5" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M80.5,-354.19C80.5,-345.29 80.5,-336.38 80.5,-327.64"/>
-<polygon fill="none" stroke="midnightblue" points="77,-354.24 80.5,-364.24 84,-354.24 77,-354.24"/>
+<path fill="none" stroke="midnightblue" d="M80.5,-365.4C80.5,-356.5 80.5,-347.57 80.5,-338.79"/>
+<polygon fill="none" stroke="midnightblue" points="77,-365.44 80.5,-375.44 84,-365.44 77,-365.44"/>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1FunctionPattern-members.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1FunctionPattern-members.html
index 1b947e0ba0..7ec102e683 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1FunctionPattern-members.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1FunctionPattern-members.html
@@ -90,24 +90,25 @@ $(function() {
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#aef57e18f93cc317ba30efbd986a7df18">HasDtype</a>(const std::string &amp;dtype) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a38905d1b7e0ab207b658afce9e50f838">HasSameShapeAs</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a16acd19f1cda9add85d03ce7afa06ad3">HasShape</a>(const Array&lt; PrimExpr &gt; &amp;shape) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1FunctionPattern.html#ae6901da6a7f2b40173afe8b1b91dbd75">TVM_DEFINE_OBJECT_REF_METHODS</a>(FunctionPattern, DFPattern, FunctionPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1FunctionPattern.html">tvm::relax::FunctionPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">tvm::relax::DFPattern::TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a>(const StructInfo &amp;struct_info) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1FunctionPattern.html#ae6901da6a7f2b40173afe8b1b91dbd75">TVM_DEFINE_OBJECT_REF_METHODS</a>(FunctionPattern, DFPattern, FunctionPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1FunctionPattern.html">tvm::relax::FunctionPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">tvm::relax::DFPattern::TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1FunctionPattern.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1FunctionPattern.html
index 1c40c2bc86..402111adcb 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1FunctionPattern.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1FunctionPattern.html
@@ -80,13 +80,13 @@ $(function() {
 <div class="dynheader">
 Inheritance diagram for tvm::relax::FunctionPattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1FunctionPattern__inherit__graph.svg" width="219" height="823"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1FunctionPattern__inherit__graph.svg" width="219" height="838"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <div class="dynheader">
 Collaboration diagram for tvm::relax::FunctionPattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1FunctionPattern__coll__graph.svg" width="219" height="1112"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1FunctionPattern__coll__graph.svg" width="219" height="1127"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <table class="memberdecls">
@@ -117,6 +117,9 @@ Public Member Functions</h2></td></tr>
 <tr class="memitem:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1AttrPattern.html">AttrPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">HasAttr</a> (const <a class="el" href="classtvm_1_1runtime_1_1Map.html">Map</a>&lt; <a class="el" href="classtvm_1_1run [...]
 <tr class="memdesc:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating an <a class="el" href="classtvm_1_1relax_1_1AttrPattern.html" title="Managed reference to AttrPatternNode.">AttrPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">More...</a><br /></td></tr>
 <tr class="separator:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a> (const <a class="el" href="classtvm_1_1relax_1_1StructInfo.html">StructInfo</a> &amp;stru [...]
+<tr class="memdesc:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">More...</a><br /></td></tr>
+<tr class="separator:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1TypePattern.html">TypePattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a> (const <a class="el" href="classtvm_1_1Type.html">Type</a> &amp;type) const</td></tr>
 <tr class="memdesc:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1TypePattern.html" title="Managed reference to TypePatternNode.">TypePattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">More...</a><br /></td></tr>
 <tr class="separator:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1FunctionPatternNode__coll__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1FunctionPatternNode__coll__graph.svg
index 232f814d6d..96863c9d0c 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1FunctionPatternNode__coll__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1FunctionPatternNode__coll__graph.svg
@@ -177,33 +177,34 @@
 <g id="node7" class="node">
 <title>Node7</title>
 <g id="a_node7"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="358,-149.5 358,-360.5 514,-360.5 514,-149.5 358,-149.5"/>
-<text text-anchor="middle" x="436" y="-348.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="358,-341.5 514,-341.5 "/>
-<text text-anchor="middle" x="436" y="-329.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="358,-322.5 514,-322.5 "/>
-<text text-anchor="start" x="366" y="-310.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="366" y="-299.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="366" y="-288.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="366" y="-277.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="366" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="366" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
-<text text-anchor="start" x="366" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
-<text text-anchor="start" x="366" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
-<text text-anchor="start" x="366" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
-<text text-anchor="start" x="366" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasShape()</text>
-<text text-anchor="start" x="366" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasSameShapeAs()</text>
-<text text-anchor="start" x="366" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ dup()</text>
-<text text-anchor="start" x="366" y="-178.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator PatternSeq()</text>
-<text text-anchor="start" x="366" y="-167.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="366" y="-156.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="358,-144 358,-366 514,-366 514,-144 358,-144"/>
+<text text-anchor="middle" x="436" y="-354" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="358,-347 514,-347 "/>
+<text text-anchor="middle" x="436" y="-335" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="358,-328 514,-328 "/>
+<text text-anchor="start" x="366" y="-316" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
+<text text-anchor="start" x="366" y="-305" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
+<text text-anchor="start" x="366" y="-294" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="366" y="-283" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="366" y="-272" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="366" y="-261" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="366" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
+<text text-anchor="start" x="366" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
+<text text-anchor="start" x="366" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
+<text text-anchor="start" x="366" y="-217" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
+<text text-anchor="start" x="366" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasShape()</text>
+<text text-anchor="start" x="366" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasSameShapeAs()</text>
+<text text-anchor="start" x="366" y="-184" font-family="Helvetica,sans-Serif" font-size="10.00">+ dup()</text>
+<text text-anchor="start" x="366" y="-173" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator PatternSeq()</text>
+<text text-anchor="start" x="366" y="-162" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="366" y="-151" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node5&#45;&gt;Node7 -->
 <g id="edge8" class="edge">
 <title>Node5&#45;&gt;Node7</title>
-<path fill="none" stroke="midnightblue" d="M404.3,-486.97C409.96,-445.69 416.19,-400.31 421.62,-360.77"/>
+<path fill="none" stroke="midnightblue" d="M404.27,-487.15C409.69,-447.69 415.62,-404.46 420.88,-366.17"/>
 <polygon fill="none" stroke="midnightblue" points="400.8,-486.71 402.91,-497.09 407.74,-487.66 400.8,-486.71"/>
 </g>
 <!-- Node6 -->
@@ -240,7 +241,7 @@
 <!-- Node7&#45;&gt;Node1 -->
 <g id="edge7" class="edge">
 <title>Node7&#45;&gt;Node1</title>
-<path fill="none" stroke="#404040" d="M366.3,-149.43C360.59,-141.73 354.78,-134.18 349,-127 338.65,-114.14 326.8,-100.87 315.41,-88.71"/>
+<path fill="none" stroke="#404040" d="M362.06,-143.77C357.73,-138.03 353.36,-132.41 349,-127 338.65,-114.14 326.8,-100.87 315.41,-88.71"/>
 <polygon fill="none" stroke="#404040" points="315.09,-88.37 308.06,-86.77 306.83,-79.66 313.86,-81.26 315.09,-88.37"/>
 <text text-anchor="middle" x="350" y="-101" font-family="Helvetica,sans-Serif" font-size="10.00"> +body</text>
 </g>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1FunctionPattern__coll__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1FunctionPattern__coll__graph.svg
index eec44faecf..2697871f38 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1FunctionPattern__coll__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1FunctionPattern__coll__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::FunctionPattern Pages: 1 -->
-<svg width="164pt" height="834pt"
- viewBox="0.00 0.00 164.00 834.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 830)">
+<svg width="164pt" height="845pt"
+ viewBox="0.00 0.00 164.00 845.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 841)">
 <title>tvm::relax::FunctionPattern</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-830 160,-830 160,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-841 160,-841 160,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -28,17 +28,18 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="0,-117.5 0,-328.5 156,-328.5 156,-117.5 0,-117.5"/>
-<text text-anchor="middle" x="78" y="-316.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="0,-309.5 156,-309.5 "/>
-<text text-anchor="middle" x="78" y="-297.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="0,-290.5 156,-290.5 "/>
+<polygon fill="white" stroke="black" points="0,-117.5 0,-339.5 156,-339.5 156,-117.5 0,-117.5"/>
+<text text-anchor="middle" x="78" y="-327.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="0,-320.5 156,-320.5 "/>
+<text text-anchor="middle" x="78" y="-308.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-301.5 156,-301.5 "/>
+<text text-anchor="start" x="8" y="-289.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="8" y="-278.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-267.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-256.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="8" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="8" y="-234.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="8" y="-223.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-267.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="8" y="-256.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="8" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="8" y="-234.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-223.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="8" y="-212.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="8" y="-201.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="8" y="-190.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -54,74 +55,74 @@
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M78,-107.49C78,-97.59 78,-88.11 78,-79.56"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-107.5 78,-117.5 81.5,-107.5 74.5,-107.5"/>
+<path fill="none" stroke="midnightblue" d="M78,-107.14C78,-97.43 78,-88.15 78,-79.78"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-107.39 78,-117.39 81.5,-107.39 74.5,-107.39"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="11,-366.5 11,-599.5 145,-599.5 145,-366.5 11,-366.5"/>
-<text text-anchor="middle" x="78" y="-587.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="11,-580.5 145,-580.5 "/>
-<text text-anchor="start" x="19" y="-568.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<polyline fill="none" stroke="black" points="11,-561.5 145,-561.5 "/>
+<polygon fill="white" stroke="black" points="11,-377.5 11,-610.5 145,-610.5 145,-377.5 11,-377.5"/>
+<text text-anchor="middle" x="78" y="-598.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="11,-591.5 145,-591.5 "/>
+<text text-anchor="start" x="19" y="-579.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<polyline fill="none" stroke="black" points="11,-572.5 145,-572.5 "/>
+<text text-anchor="start" x="19" y="-560.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="19" y="-549.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-538.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-527.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="19" y="-516.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="19" y="-505.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="19" y="-494.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="19" y="-483.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="19" y="-472.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="19" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="19" y="-450.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="19" y="-439.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-538.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="19" y="-527.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="19" y="-516.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="19" y="-505.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="19" y="-494.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="19" y="-483.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="19" y="-472.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="19" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="19" y="-450.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-439.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="19" y="-428.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-417.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-406.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="19" y="-395.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="19" y="-384.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="19" y="-373.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="19" y="-417.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="19" y="-406.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="19" y="-395.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="19" y="-384.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M78,-355.96C78,-346.87 78,-337.76 78,-328.81"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-356.21 78,-366.21 81.5,-356.21 74.5,-356.21"/>
+<path fill="none" stroke="midnightblue" d="M78,-367.36C78,-358.07 78,-348.73 78,-339.54"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-367.43 78,-377.43 81.5,-367.43 74.5,-367.43"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node">
 <title>Node4</title>
 <g id="a_node4"><a xlink:href="classtvm_1_1runtime_1_1ObjectPtr.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="black" points="8,-647.5 8,-825.5 148,-825.5 148,-647.5 8,-647.5"/>
-<text text-anchor="start" x="16" y="-813.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
-<text text-anchor="middle" x="78" y="-802.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
-<polyline fill="none" stroke="black" points="8,-795.5 148,-795.5 "/>
-<text text-anchor="middle" x="78" y="-783.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="8,-776.5 148,-776.5 "/>
+<polygon fill="white" stroke="black" points="8,-658.5 8,-836.5 148,-836.5 148,-658.5 8,-658.5"/>
+<text text-anchor="start" x="16" y="-824.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
+<text text-anchor="middle" x="78" y="-813.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
+<polyline fill="none" stroke="black" points="8,-806.5 148,-806.5 "/>
+<text text-anchor="middle" x="78" y="-794.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="8,-787.5 148,-787.5 "/>
+<text text-anchor="start" x="16" y="-775.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-764.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-753.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-742.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-731.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-720.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-709.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-698.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-687.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
-<text text-anchor="start" x="16" y="-676.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="16" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="16" y="-654.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
+<text text-anchor="start" x="16" y="-709.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
+<text text-anchor="start" x="16" y="-698.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
+<text text-anchor="start" x="16" y="-687.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="16" y="-676.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="16" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
 </a>
 </g>
 </g>
 <!-- Node4&#45;&gt;Node3 -->
 <g id="edge3" class="edge">
 <title>Node4&#45;&gt;Node3</title>
-<path fill="none" stroke="#404040" d="M78,-647.18C78,-635.84 78,-624.05 78,-612.23"/>
-<polygon fill="none" stroke="#404040" points="78,-611.91 74,-605.91 78,-599.91 82,-605.91 78,-611.91"/>
-<text text-anchor="middle" x="97.5" y="-621" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
+<path fill="none" stroke="#404040" d="M78,-658.18C78,-646.84 78,-635.05 78,-623.23"/>
+<polygon fill="none" stroke="#404040" points="78,-622.91 74,-616.91 78,-610.91 82,-616.91 78,-622.91"/>
+<text text-anchor="middle" x="97.5" y="-632" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1FunctionPattern__inherit__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1FunctionPattern__inherit__graph.svg
index 739398bc23..9883b10a52 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1FunctionPattern__inherit__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1FunctionPattern__inherit__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::FunctionPattern Pages: 1 -->
-<svg width="164pt" height="617pt"
- viewBox="0.00 0.00 164.00 617.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 613)">
+<svg width="164pt" height="628pt"
+ viewBox="0.00 0.00 164.00 628.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 624)">
 <title>tvm::relax::FunctionPattern</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-613 160,-613 160,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-624 160,-624 160,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -28,17 +28,18 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="0,-116.5 0,-327.5 156,-327.5 156,-116.5 0,-116.5"/>
-<text text-anchor="middle" x="78" y="-315.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="0,-308.5 156,-308.5 "/>
-<text text-anchor="middle" x="78" y="-296.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="0,-289.5 156,-289.5 "/>
+<polygon fill="white" stroke="black" points="0,-116.5 0,-338.5 156,-338.5 156,-116.5 0,-116.5"/>
+<text text-anchor="middle" x="78" y="-326.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="0,-319.5 156,-319.5 "/>
+<text text-anchor="middle" x="78" y="-307.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-300.5 156,-300.5 "/>
+<text text-anchor="start" x="8" y="-288.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="8" y="-277.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="8" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="8" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="8" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="8" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="8" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="8" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="8" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="8" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="8" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -54,44 +55,44 @@
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M78,-106.05C78,-96.73 78,-87.8 78,-79.7"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-106.29 78,-116.29 81.5,-106.29 74.5,-106.29"/>
+<path fill="none" stroke="midnightblue" d="M78,-106.43C78,-96.94 78,-87.86 78,-79.66"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-106.45 78,-116.45 81.5,-106.45 74.5,-106.45"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="11,-364.5 11,-608.5 145,-608.5 145,-364.5 11,-364.5"/>
-<text text-anchor="middle" x="78" y="-596.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="11,-589.5 145,-589.5 "/>
-<text text-anchor="start" x="19" y="-577.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<text text-anchor="start" x="19" y="-566.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
-<polyline fill="none" stroke="black" points="11,-559.5 145,-559.5 "/>
+<polygon fill="white" stroke="black" points="11,-375.5 11,-619.5 145,-619.5 145,-375.5 11,-375.5"/>
+<text text-anchor="middle" x="78" y="-607.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="11,-600.5 145,-600.5 "/>
+<text text-anchor="start" x="19" y="-588.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<text text-anchor="start" x="19" y="-577.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
+<polyline fill="none" stroke="black" points="11,-570.5 145,-570.5 "/>
+<text text-anchor="start" x="19" y="-558.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="19" y="-547.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="19" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="19" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="19" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="19" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="19" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="19" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="19" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="19" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="19" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="19" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="19" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="19" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="19" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="19" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="19" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="19" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="19" y="-426.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="19" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="19" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="19" y="-371.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="19" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="19" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="19" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="19" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M78,-354.19C78,-345.29 78,-336.38 78,-327.64"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-354.24 78,-364.24 81.5,-354.24 74.5,-354.24"/>
+<path fill="none" stroke="midnightblue" d="M78,-365.4C78,-356.5 78,-347.57 78,-338.79"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-365.44 78,-375.44 81.5,-365.44 74.5,-365.44"/>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1GlobalVarPattern-members.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1GlobalVarPattern-members.html
index 031728d2ed..05a6fe5ad7 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1GlobalVarPattern-members.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1GlobalVarPattern-members.html
@@ -90,24 +90,25 @@ $(function() {
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#aef57e18f93cc317ba30efbd986a7df18">HasDtype</a>(const std::string &amp;dtype) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a38905d1b7e0ab207b658afce9e50f838">HasSameShapeAs</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a16acd19f1cda9add85d03ce7afa06ad3">HasShape</a>(const Array&lt; PrimExpr &gt; &amp;shape) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1GlobalVarPattern.html#aabdada7000b2974c0205085740806881">TVM_DEFINE_OBJECT_REF_METHODS</a>(GlobalVarPattern, DFPattern, GlobalVarPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1GlobalVarPattern.html">tvm::relax::GlobalVarPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">tvm::relax::DFPattern::TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a>(const StructInfo &amp;struct_info) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1GlobalVarPattern.html#aabdada7000b2974c0205085740806881">TVM_DEFINE_OBJECT_REF_METHODS</a>(GlobalVarPattern, DFPattern, GlobalVarPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1GlobalVarPattern.html">tvm::relax::GlobalVarPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">tvm::relax::DFPattern::TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1GlobalVarPattern.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1GlobalVarPattern.html
index bebffbf39c..849eb5cf02 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1GlobalVarPattern.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1GlobalVarPattern.html
@@ -80,13 +80,13 @@ $(function() {
 <div class="dynheader">
 Inheritance diagram for tvm::relax::GlobalVarPattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1GlobalVarPattern__inherit__graph.svg" width="219" height="823"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1GlobalVarPattern__inherit__graph.svg" width="219" height="838"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <div class="dynheader">
 Collaboration diagram for tvm::relax::GlobalVarPattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1GlobalVarPattern__coll__graph.svg" width="219" height="1112"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1GlobalVarPattern__coll__graph.svg" width="219" height="1127"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <table class="memberdecls">
@@ -116,6 +116,9 @@ Public Member Functions</h2></td></tr>
 <tr class="memitem:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1AttrPattern.html">AttrPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">HasAttr</a> (const <a class="el" href="classtvm_1_1runtime_1_1Map.html">Map</a>&lt; <a class="el" href="classtvm_1_1run [...]
 <tr class="memdesc:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating an <a class="el" href="classtvm_1_1relax_1_1AttrPattern.html" title="Managed reference to AttrPatternNode.">AttrPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">More...</a><br /></td></tr>
 <tr class="separator:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a> (const <a class="el" href="classtvm_1_1relax_1_1StructInfo.html">StructInfo</a> &amp;stru [...]
+<tr class="memdesc:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">More...</a><br /></td></tr>
+<tr class="separator:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1TypePattern.html">TypePattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a> (const <a class="el" href="classtvm_1_1Type.html">Type</a> &amp;type) const</td></tr>
 <tr class="memdesc:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1TypePattern.html" title="Managed reference to TypePatternNode.">TypePattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">More...</a><br /></td></tr>
 <tr class="separator:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1GlobalVarPattern__coll__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1GlobalVarPattern__coll__graph.svg
index 63a092da05..1c69cacb10 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1GlobalVarPattern__coll__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1GlobalVarPattern__coll__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::GlobalVarPattern Pages: 1 -->
-<svg width="164pt" height="834pt"
- viewBox="0.00 0.00 164.00 834.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 830)">
+<svg width="164pt" height="845pt"
+ viewBox="0.00 0.00 164.00 845.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 841)">
 <title>tvm::relax::GlobalVarPattern</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-830 160,-830 160,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-841 160,-841 160,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -28,17 +28,18 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="0,-117.5 0,-328.5 156,-328.5 156,-117.5 0,-117.5"/>
-<text text-anchor="middle" x="78" y="-316.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="0,-309.5 156,-309.5 "/>
-<text text-anchor="middle" x="78" y="-297.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="0,-290.5 156,-290.5 "/>
+<polygon fill="white" stroke="black" points="0,-117.5 0,-339.5 156,-339.5 156,-117.5 0,-117.5"/>
+<text text-anchor="middle" x="78" y="-327.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="0,-320.5 156,-320.5 "/>
+<text text-anchor="middle" x="78" y="-308.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-301.5 156,-301.5 "/>
+<text text-anchor="start" x="8" y="-289.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="8" y="-278.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-267.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-256.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="8" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="8" y="-234.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="8" y="-223.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-267.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="8" y="-256.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="8" y="-245.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="8" y="-234.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-223.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="8" y="-212.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="8" y="-201.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="8" y="-190.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -54,74 +55,74 @@
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M78,-107.49C78,-97.59 78,-88.11 78,-79.56"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-107.5 78,-117.5 81.5,-107.5 74.5,-107.5"/>
+<path fill="none" stroke="midnightblue" d="M78,-107.14C78,-97.43 78,-88.15 78,-79.78"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-107.39 78,-117.39 81.5,-107.39 74.5,-107.39"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="11,-366.5 11,-599.5 145,-599.5 145,-366.5 11,-366.5"/>
-<text text-anchor="middle" x="78" y="-587.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="11,-580.5 145,-580.5 "/>
-<text text-anchor="start" x="19" y="-568.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<polyline fill="none" stroke="black" points="11,-561.5 145,-561.5 "/>
+<polygon fill="white" stroke="black" points="11,-377.5 11,-610.5 145,-610.5 145,-377.5 11,-377.5"/>
+<text text-anchor="middle" x="78" y="-598.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="11,-591.5 145,-591.5 "/>
+<text text-anchor="start" x="19" y="-579.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<polyline fill="none" stroke="black" points="11,-572.5 145,-572.5 "/>
+<text text-anchor="start" x="19" y="-560.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="19" y="-549.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-538.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-527.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="19" y="-516.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="19" y="-505.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="19" y="-494.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="19" y="-483.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="19" y="-472.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="19" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="19" y="-450.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="19" y="-439.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-538.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="19" y="-527.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="19" y="-516.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="19" y="-505.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="19" y="-494.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="19" y="-483.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="19" y="-472.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="19" y="-461.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="19" y="-450.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-439.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="19" y="-428.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-417.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-406.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="19" y="-395.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="19" y="-384.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="19" y="-373.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="19" y="-417.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="19" y="-406.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="19" y="-395.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="19" y="-384.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M78,-355.96C78,-346.87 78,-337.76 78,-328.81"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-356.21 78,-366.21 81.5,-356.21 74.5,-356.21"/>
+<path fill="none" stroke="midnightblue" d="M78,-367.36C78,-358.07 78,-348.73 78,-339.54"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-367.43 78,-377.43 81.5,-367.43 74.5,-367.43"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node">
 <title>Node4</title>
 <g id="a_node4"><a xlink:href="classtvm_1_1runtime_1_1ObjectPtr.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="black" points="8,-647.5 8,-825.5 148,-825.5 148,-647.5 8,-647.5"/>
-<text text-anchor="start" x="16" y="-813.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
-<text text-anchor="middle" x="78" y="-802.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
-<polyline fill="none" stroke="black" points="8,-795.5 148,-795.5 "/>
-<text text-anchor="middle" x="78" y="-783.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="8,-776.5 148,-776.5 "/>
+<polygon fill="white" stroke="black" points="8,-658.5 8,-836.5 148,-836.5 148,-658.5 8,-658.5"/>
+<text text-anchor="start" x="16" y="-824.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectPtr</text>
+<text text-anchor="middle" x="78" y="-813.5" font-family="Helvetica,sans-Serif" font-size="10.00">&lt; tvm::runtime::Object &gt;</text>
+<polyline fill="none" stroke="black" points="8,-806.5 148,-806.5 "/>
+<text text-anchor="middle" x="78" y="-794.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="8,-787.5 148,-787.5 "/>
+<text text-anchor="start" x="16" y="-775.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-764.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-753.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-742.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-731.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
 <text text-anchor="start" x="16" y="-720.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-709.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-698.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
-<text text-anchor="start" x="16" y="-687.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
-<text text-anchor="start" x="16" y="-676.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="16" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="16" y="-654.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
+<text text-anchor="start" x="16" y="-709.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~ObjectPtr()</text>
+<text text-anchor="start" x="16" y="-698.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ swap()</text>
+<text text-anchor="start" x="16" y="-687.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="16" y="-676.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="16" y="-665.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 11 more...</text>
 </a>
 </g>
 </g>
 <!-- Node4&#45;&gt;Node3 -->
 <g id="edge3" class="edge">
 <title>Node4&#45;&gt;Node3</title>
-<path fill="none" stroke="#404040" d="M78,-647.18C78,-635.84 78,-624.05 78,-612.23"/>
-<polygon fill="none" stroke="#404040" points="78,-611.91 74,-605.91 78,-599.91 82,-605.91 78,-611.91"/>
-<text text-anchor="middle" x="97.5" y="-621" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
+<path fill="none" stroke="#404040" d="M78,-658.18C78,-646.84 78,-635.05 78,-623.23"/>
+<polygon fill="none" stroke="#404040" points="78,-622.91 74,-616.91 78,-610.91 82,-616.91 78,-622.91"/>
+<text text-anchor="middle" x="97.5" y="-632" font-family="Helvetica,sans-Serif" font-size="10.00"> #data_</text>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1GlobalVarPattern__inherit__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1GlobalVarPattern__inherit__graph.svg
index 3c91863cdd..5f10992580 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1GlobalVarPattern__inherit__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1GlobalVarPattern__inherit__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::GlobalVarPattern Pages: 1 -->
-<svg width="164pt" height="617pt"
- viewBox="0.00 0.00 164.00 617.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 613)">
+<svg width="164pt" height="628pt"
+ viewBox="0.00 0.00 164.00 628.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 624)">
 <title>tvm::relax::GlobalVarPattern</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-613 160,-613 160,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-624 160,-624 160,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -28,17 +28,18 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="0,-116.5 0,-327.5 156,-327.5 156,-116.5 0,-116.5"/>
-<text text-anchor="middle" x="78" y="-315.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="0,-308.5 156,-308.5 "/>
-<text text-anchor="middle" x="78" y="-296.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="0,-289.5 156,-289.5 "/>
+<polygon fill="white" stroke="black" points="0,-116.5 0,-338.5 156,-338.5 156,-116.5 0,-116.5"/>
+<text text-anchor="middle" x="78" y="-326.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="0,-319.5 156,-319.5 "/>
+<text text-anchor="middle" x="78" y="-307.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-300.5 156,-300.5 "/>
+<text text-anchor="start" x="8" y="-288.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="8" y="-277.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="8" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="8" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="8" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="8" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="8" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="8" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="8" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="8" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="8" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="8" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="8" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -54,44 +55,44 @@
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M78,-106.05C78,-96.73 78,-87.8 78,-79.7"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-106.29 78,-116.29 81.5,-106.29 74.5,-106.29"/>
+<path fill="none" stroke="midnightblue" d="M78,-106.43C78,-96.94 78,-87.86 78,-79.66"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-106.45 78,-116.45 81.5,-106.45 74.5,-106.45"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="11,-364.5 11,-608.5 145,-608.5 145,-364.5 11,-364.5"/>
-<text text-anchor="middle" x="78" y="-596.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="11,-589.5 145,-589.5 "/>
-<text text-anchor="start" x="19" y="-577.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<text text-anchor="start" x="19" y="-566.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
-<polyline fill="none" stroke="black" points="11,-559.5 145,-559.5 "/>
+<polygon fill="white" stroke="black" points="11,-375.5 11,-619.5 145,-619.5 145,-375.5 11,-375.5"/>
+<text text-anchor="middle" x="78" y="-607.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="11,-600.5 145,-600.5 "/>
+<text text-anchor="start" x="19" y="-588.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<text text-anchor="start" x="19" y="-577.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
+<polyline fill="none" stroke="black" points="11,-570.5 145,-570.5 "/>
+<text text-anchor="start" x="19" y="-558.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="19" y="-547.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="19" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="19" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="19" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="19" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="19" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="19" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="19" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="19" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="19" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="19" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="19" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="19" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="19" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="19" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="19" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="19" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="19" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="19" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="19" y="-426.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="19" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="19" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="19" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="19" y="-371.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="19" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="19" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="19" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="19" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M78,-354.19C78,-345.29 78,-336.38 78,-327.64"/>
-<polygon fill="none" stroke="midnightblue" points="74.5,-354.24 78,-364.24 81.5,-354.24 74.5,-354.24"/>
+<path fill="none" stroke="midnightblue" d="M78,-365.4C78,-356.5 78,-347.57 78,-338.79"/>
+<polygon fill="none" stroke="midnightblue" points="74.5,-365.44 78,-375.44 81.5,-365.44 74.5,-365.44"/>
 </g>
 </g>
 </svg>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1NotPattern-members.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1NotPattern-members.html
index 31d9cfa2d4..b95ca3b5e8 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1NotPattern-members.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1NotPattern-members.html
@@ -89,25 +89,26 @@ $(function() {
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#aef57e18f93cc317ba30efbd986a7df18">HasDtype</a>(const std::string &amp;dtype) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a38905d1b7e0ab207b658afce9e50f838">HasSameShapeAs</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a16acd19f1cda9add85d03ce7afa06ad3">HasShape</a>(const Array&lt; PrimExpr &gt; &amp;shape) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1NotPattern.html#a41ce9f395a526d582a60e51cd2bb1cae">NotPattern</a>(DFPattern reject)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1NotPattern.html">tvm::relax::NotPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1NotPattern.html#ae58b41563b747fb8bd3acab9b3291603">TVM_DEFINE_OBJECT_REF_METHODS</a>(NotPattern, DFPattern, NotPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1NotPattern.html">tvm::relax::NotPattern</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">tvm::relax::DFPattern::TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a>(const StructInfo &amp;struct_info) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a>(const Type &amp;type) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1NotPattern.html#a41ce9f395a526d582a60e51cd2bb1cae">NotPattern</a>(DFPattern reject)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1NotPattern.html">tvm::relax::NotPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a6a7dd7404edf1c26f8dbd9bd92d03a02">ObjectRef</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">explicit</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#afce09ce23acba783755ac41f21145b0f">operator PatternSeq</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa1bd13a7185cb4b2b6bdde49416e8aa4">operator!=</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a935b45987613932342fba50b4f809834">operator&amp;</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ba2775bc9e3740874b28bb153acc1d4">operator()</a>(Args &amp;&amp;... args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a10c80fcdb8cd368569bb2ef99b52b6bf">operator()</a>(const std::vector&lt; DFPattern &gt; &amp;args) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3deeeac5827a88f375b8c6ae1039c219">operator-&gt;</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4744bf4a1b48f202d41b51dc5e08e6ee">operator&lt;</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#affdf1b8cdb36e140de7b3ad7064e4617">operator==</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a421011ffe33c4b8406a141a676a0a7e1">operator|</a>(const DFPattern &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#abce844fe4314f8af18c2a0e38b0dad3b">operator~</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae31a5b9f40781d60a2901994ead700e8">same_as</a>(const ObjectRef &amp;other) const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relax_1_1NotPattern.html#ae58b41563b747fb8bd3acab9b3291603">TVM_DEFINE_OBJECT_REF_METHODS</a>(NotPattern, DFPattern, NotPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1NotPattern.html">tvm::relax::NotPattern</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a4ca6fbf4018443e3d7d642547da52ed7">tvm::relax::DFPattern::TVM_DEFINE_OBJECT_REF_METHODS</a>(DFPattern, ObjectRef, DFPatternNode)</td><td class="entry"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html">tvm::relax::DFPattern</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4e7cdb1574b93a59e784d70aa47b8da7">unique</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a0ae0da21d247cd87ea94fe3777c4405e">use_count</a>() const</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1NotPattern.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1NotPattern.html
index 848506331f..b39c3aab13 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1NotPattern.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1NotPattern.html
@@ -80,13 +80,13 @@ $(function() {
 <div class="dynheader">
 Inheritance diagram for tvm::relax::NotPattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1NotPattern__inherit__graph.svg" width="219" height="823"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1NotPattern__inherit__graph.svg" width="219" height="838"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <div class="dynheader">
 Collaboration diagram for tvm::relax::NotPattern:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1NotPattern__coll__graph.svg" width="219" height="1112"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1NotPattern__coll__graph.svg" width="219" height="1127"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <table class="memberdecls">
@@ -116,6 +116,9 @@ Public Member Functions</h2></td></tr>
 <tr class="memitem:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1AttrPattern.html">AttrPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">HasAttr</a> (const <a class="el" href="classtvm_1_1runtime_1_1Map.html">Map</a>&lt; <a class="el" href="classtvm_1_1run [...]
 <tr class="memdesc:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating an <a class="el" href="classtvm_1_1relax_1_1AttrPattern.html" title="Managed reference to AttrPatternNode.">AttrPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#ad5c48ebffbab0cd2bfae718845b67b93">More...</a><br /></td></tr>
 <tr class="separator:ad5c48ebffbab0cd2bfae718845b67b93 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">HasStructInfo</a> (const <a class="el" href="classtvm_1_1relax_1_1StructInfo.html">StructInfo</a> &amp;stru [...]
+<tr class="memdesc:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1StructInfoPattern.html">StructInfoPattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a72ffeedc398250202c2c8a296da3f709">More...</a><br /></td></tr>
+<tr class="separator:a72ffeedc398250202c2c8a296da3f709 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1relax_1_1TypePattern.html">TypePattern</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">HasType</a> (const <a class="el" href="classtvm_1_1Type.html">Type</a> &amp;type) const</td></tr>
 <tr class="memdesc:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="mdescLeft">&#160;</td><td class="mdescRight">Syntatic Sugar for creating a <a class="el" href="classtvm_1_1relax_1_1TypePattern.html" title="Managed reference to TypePatternNode.">TypePattern</a>.  <a href="classtvm_1_1relax_1_1DFPattern.html#a6bf034c3081dce53de73eafdcc30d549">More...</a><br /></td></tr>
 <tr class="separator:a6bf034c3081dce53de73eafdcc30d549 inherit pub_methods_classtvm_1_1relax_1_1DFPattern"><td class="memSeparator" colspan="2">&#160;</td></tr>
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1NotPatternNode.html b/docs/reference/api/doxygen/classtvm_1_1relax_1_1NotPatternNode.html
index 09e33ae9a9..bf92c78535 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1NotPatternNode.html
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1NotPatternNode.html
@@ -88,7 +88,7 @@ Inheritance diagram for tvm::relax::NotPatternNode:</div>
 <div class="dynheader">
 Collaboration diagram for tvm::relax::NotPatternNode:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1NotPatternNode__coll__graph.svg" width="556" height="1331"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
+<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relax_1_1NotPatternNode__coll__graph.svg" width="556" height="1346"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 <table class="memberdecls">
diff --git a/docs/reference/api/doxygen/classtvm_1_1relax_1_1NotPatternNode__coll__graph.svg b/docs/reference/api/doxygen/classtvm_1_1relax_1_1NotPatternNode__coll__graph.svg
index c764c4dc20..fe4e07502d 100644
--- a/docs/reference/api/doxygen/classtvm_1_1relax_1_1NotPatternNode__coll__graph.svg
+++ b/docs/reference/api/doxygen/classtvm_1_1relax_1_1NotPatternNode__coll__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: tvm::relax::NotPatternNode Pages: 1 -->
-<svg width="417pt" height="998pt"
- viewBox="0.00 0.00 417.00 998.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 994)">
+<svg width="417pt" height="1009pt"
+ viewBox="0.00 0.00 417.00 1009.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1005)">
 <title>tvm::relax::NotPatternNode</title>
-<polygon fill="white" stroke="transparent" points="-4,4 -4,-994 413,-994 413,4 -4,4"/>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-1005 413,-1005 413,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node">
 <title>Node1</title>
@@ -28,93 +28,94 @@
 <g id="node2" class="node">
 <title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1relax_1_1DFPatternNode.html" target="_top" xlink:title="Base type of all dataflow patterns.">
-<polygon fill="white" stroke="black" points="53.5,-199 53.5,-267 226.5,-267 226.5,-199 53.5,-199"/>
-<text text-anchor="middle" x="140" y="-255" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPatternNode</text>
-<polyline fill="none" stroke="black" points="53.5,-248 226.5,-248 "/>
-<text text-anchor="start" x="61.5" y="-236" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<polyline fill="none" stroke="black" points="53.5,-229 226.5,-229 "/>
-<text text-anchor="start" x="61.5" y="-217" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT</text>
-<text text-anchor="start" x="61.5" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
+<polygon fill="white" stroke="black" points="53.5,-204.5 53.5,-272.5 226.5,-272.5 226.5,-204.5 53.5,-204.5"/>
+<text text-anchor="middle" x="140" y="-260.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPatternNode</text>
+<polyline fill="none" stroke="black" points="53.5,-253.5 226.5,-253.5 "/>
+<text text-anchor="start" x="61.5" y="-241.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<polyline fill="none" stroke="black" points="53.5,-234.5 226.5,-234.5 "/>
+<text text-anchor="start" x="61.5" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT</text>
+<text text-anchor="start" x="61.5" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">_INFO()</text>
 </a>
 </g>
 </g>
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge">
 <title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M160.3,-189.4C175.93,-156.59 197.35,-111.62 212.51,-79.81"/>
-<polygon fill="none" stroke="midnightblue" points="156.99,-188.2 155.85,-198.73 163.31,-191.21 156.99,-188.2"/>
+<path fill="none" stroke="midnightblue" d="M159.74,-194.87C175.63,-160.56 197.78,-112.74 213.14,-79.56"/>
+<polygon fill="none" stroke="midnightblue" points="156.46,-193.62 155.44,-204.17 162.82,-196.56 156.46,-193.62"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node">
 <title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1runtime_1_1Object.html" target="_top" xlink:title="base class of all object containers.">
-<polygon fill="white" stroke="black" points="0,-376.5 0,-763.5 184,-763.5 184,-376.5 0,-376.5"/>
-<text text-anchor="middle" x="92" y="-751.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::Object</text>
-<polyline fill="none" stroke="black" points="0,-744.5 184,-744.5 "/>
-<text text-anchor="start" x="8" y="-732.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<text text-anchor="start" x="8" y="-721.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_final</text>
-<text text-anchor="start" x="8" y="-710.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_child_slots</text>
-<text text-anchor="start" x="8" y="-699.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_child_slots_can</text>
-<text text-anchor="start" x="8" y="-688.5" font-family="Helvetica,sans-Serif" font-size="10.00">_overflow</text>
-<text text-anchor="start" x="8" y="-677.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_visit</text>
-<text text-anchor="start" x="8" y="-666.5" font-family="Helvetica,sans-Serif" font-size="10.00">_attrs</text>
-<text text-anchor="start" x="8" y="-655.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_sequal</text>
-<text text-anchor="start" x="8" y="-644.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
-<text text-anchor="start" x="8" y="-633.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_shash</text>
-<text text-anchor="start" x="8" y="-622.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
-<text text-anchor="start" x="8" y="-611.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_index</text>
-<text text-anchor="start" x="8" y="-600.5" font-family="Helvetica,sans-Serif" font-size="10.00"># type_index_</text>
-<text text-anchor="start" x="8" y="-589.5" font-family="Helvetica,sans-Serif" font-size="10.00"># ref_counter_</text>
-<polyline fill="none" stroke="black" points="0,-582.5 184,-582.5 "/>
-<text text-anchor="start" x="8" y="-570.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ type_index()</text>
-<text text-anchor="start" x="8" y="-559.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetTypeKey()</text>
-<text text-anchor="start" x="8" y="-548.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetTypeKeyHash()</text>
-<text text-anchor="start" x="8" y="-537.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ IsInstance()</text>
-<text text-anchor="start" x="8" y="-526.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<polygon fill="white" stroke="black" points="0,-387.5 0,-774.5 184,-774.5 184,-387.5 0,-387.5"/>
+<text text-anchor="middle" x="92" y="-762.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::Object</text>
+<polyline fill="none" stroke="black" points="0,-755.5 184,-755.5 "/>
+<text text-anchor="start" x="8" y="-743.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<text text-anchor="start" x="8" y="-732.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_final</text>
+<text text-anchor="start" x="8" y="-721.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_child_slots</text>
+<text text-anchor="start" x="8" y="-710.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_child_slots_can</text>
+<text text-anchor="start" x="8" y="-699.5" font-family="Helvetica,sans-Serif" font-size="10.00">_overflow</text>
+<text text-anchor="start" x="8" y="-688.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_visit</text>
+<text text-anchor="start" x="8" y="-677.5" font-family="Helvetica,sans-Serif" font-size="10.00">_attrs</text>
+<text text-anchor="start" x="8" y="-666.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_sequal</text>
+<text text-anchor="start" x="8" y="-655.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
+<text text-anchor="start" x="8" y="-644.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_shash</text>
+<text text-anchor="start" x="8" y="-633.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
+<text text-anchor="start" x="8" y="-622.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_index</text>
+<text text-anchor="start" x="8" y="-611.5" font-family="Helvetica,sans-Serif" font-size="10.00"># type_index_</text>
+<text text-anchor="start" x="8" y="-600.5" font-family="Helvetica,sans-Serif" font-size="10.00"># ref_counter_</text>
+<polyline fill="none" stroke="black" points="0,-593.5 184,-593.5 "/>
+<text text-anchor="start" x="8" y="-581.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ type_index()</text>
+<text text-anchor="start" x="8" y="-570.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetTypeKey()</text>
+<text text-anchor="start" x="8" y="-559.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetTypeKeyHash()</text>
+<text text-anchor="start" x="8" y="-548.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ IsInstance()</text>
+<text text-anchor="start" x="8" y="-537.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="8" y="-526.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Object()</text>
 <text text-anchor="start" x="8" y="-515.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Object()</text>
 <text text-anchor="start" x="8" y="-504.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Object()</text>
-<text text-anchor="start" x="8" y="-493.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Object()</text>
+<text text-anchor="start" x="8" y="-493.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
 <text text-anchor="start" x="8" y="-482.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
-<text text-anchor="start" x="8" y="-471.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
-<text text-anchor="start" x="8" y="-460.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeIndex2Key()</text>
-<text text-anchor="start" x="8" y="-449.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeIndex2KeyHash()</text>
-<text text-anchor="start" x="8" y="-438.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeKey2Index()</text>
-<text text-anchor="start" x="8" y="-427.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _GetOrAllocRuntimeTypeIndex()</text>
-<text text-anchor="start" x="8" y="-416.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ RuntimeTypeIndex()</text>
-<text text-anchor="start" x="8" y="-405.5" font-family="Helvetica,sans-Serif" font-size="10.00"># IncRef()</text>
-<text text-anchor="start" x="8" y="-394.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DecRef()</text>
-<text text-anchor="start" x="8" y="-383.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetOrAllocRuntimeTypeIndex()</text>
+<text text-anchor="start" x="8" y="-471.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeIndex2Key()</text>
+<text text-anchor="start" x="8" y="-460.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeIndex2KeyHash()</text>
+<text text-anchor="start" x="8" y="-449.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TypeKey2Index()</text>
+<text text-anchor="start" x="8" y="-438.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _GetOrAllocRuntimeTypeIndex()</text>
+<text text-anchor="start" x="8" y="-427.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ RuntimeTypeIndex()</text>
+<text text-anchor="start" x="8" y="-416.5" font-family="Helvetica,sans-Serif" font-size="10.00"># IncRef()</text>
+<text text-anchor="start" x="8" y="-405.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DecRef()</text>
+<text text-anchor="start" x="8" y="-394.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetOrAllocRuntimeTypeIndex()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge">
 <title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M121.12,-365.74C126.61,-327.42 131.73,-291.72 135.25,-267.18"/>
-<polygon fill="none" stroke="midnightblue" points="117.6,-365.67 119.64,-376.07 124.53,-366.67 117.6,-365.67"/>
+<path fill="none" stroke="midnightblue" d="M120.58,-377.26C126.31,-336.61 131.68,-298.52 135.31,-272.75"/>
+<polygon fill="none" stroke="midnightblue" points="117.09,-376.97 119.16,-387.36 124.02,-377.95 117.09,-376.97"/>
 </g>
 <!-- Node3&#45;&gt;Node3 -->
 <g id="edge3" class="edge">
 <title>Node3&#45;&gt;Node3</title>
-<path fill="none" stroke="#404040" d="M184.28,-603.92C195.02,-597.66 202,-586.36 202,-570 202,-559.01 198.85,-550.3 193.52,-543.87"/>
-<polygon fill="none" stroke="#404040" points="193.46,-543.81 186.29,-543 184.28,-536.08 191.45,-536.89 193.46,-543.81"/>
-<text text-anchor="middle" x="228" y="-567.5" font-family="Helvetica,sans-Serif" font-size="10.00"> #deleter_</text>
+<path fill="none" stroke="#404040" d="M184.28,-614.92C195.02,-608.66 202,-597.36 202,-581 202,-570.01 198.85,-561.3 193.52,-554.87"/>
+<polygon fill="none" stroke="#404040" points="193.46,-554.81 186.29,-554 184.28,-547.08 191.45,-547.89 193.46,-554.81"/>
+<text text-anchor="middle" x="228" y="-578.5" font-family="Helvetica,sans-Serif" font-size="10.00"> #deleter_</text>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node">
 <title>Node4</title>
 <g id="a_node4"><a xlink:href="classtvm_1_1relax_1_1DFPattern.html" target="_top" xlink:title="Managed reference to dataflow patterns.">
-<polygon fill="white" stroke="black" points="253,-127.5 253,-338.5 409,-338.5 409,-127.5 253,-127.5"/>
-<text text-anchor="middle" x="331" y="-326.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
-<polyline fill="none" stroke="black" points="253,-319.5 409,-319.5 "/>
-<text text-anchor="middle" x="331" y="-307.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="253,-300.5 409,-300.5 "/>
+<polygon fill="white" stroke="black" points="253,-127.5 253,-349.5 409,-349.5 409,-127.5 253,-127.5"/>
+<text text-anchor="middle" x="331" y="-337.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relax::DFPattern</text>
+<polyline fill="none" stroke="black" points="253,-330.5 409,-330.5 "/>
+<text text-anchor="middle" x="331" y="-318.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="253,-311.5 409,-311.5 "/>
+<text text-anchor="start" x="261" y="-299.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
 <text text-anchor="start" x="261" y="-288.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="261" y="-277.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator()()</text>
-<text text-anchor="start" x="261" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
-<text text-anchor="start" x="261" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
-<text text-anchor="start" x="261" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
-<text text-anchor="start" x="261" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="261" y="-277.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator|()</text>
+<text text-anchor="start" x="261" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&amp;()</text>
+<text text-anchor="start" x="261" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator~()</text>
+<text text-anchor="start" x="261" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="261" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasStructInfo()</text>
 <text text-anchor="start" x="261" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasType()</text>
 <text text-anchor="start" x="261" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
 <text text-anchor="start" x="261" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasDtype()</text>
@@ -130,75 +131,75 @@
 <!-- Node4&#45;&gt;Node1 -->
 <g id="edge4" class="edge">
 <title>Node4&#45;&gt;Node1</title>
-<path fill="none" stroke="#404040" d="M276.17,-127.28C269.49,-114.51 262.91,-101.96 256.94,-90.55"/>
-<polygon fill="none" stroke="#404040" points="256.76,-90.2 250.43,-86.74 251.19,-79.57 257.52,-83.03 256.76,-90.2"/>
-<text text-anchor="middle" x="286" y="-101" font-family="Helvetica,sans-Serif" font-size="10.00"> +reject</text>
+<path fill="none" stroke="#404040" d="M275.01,-127.47C268.45,-114.58 262.03,-101.96 256.2,-90.53"/>
+<polygon fill="none" stroke="#404040" points="256.04,-90.21 249.76,-86.68 250.6,-79.52 256.89,-83.05 256.04,-90.21"/>
+<text text-anchor="middle" x="283" y="-101" font-family="Helvetica,sans-Serif" font-size="10.00"> +reject</text>
 </g>
 <!-- Node5 -->
 <g id="node5" class="node">
 <title>Node5</title>
 <g id="a_node5"><a xlink:href="classtvm_1_1runtime_1_1ObjectRef.html" target="_top" xlink:title="Base class of all object reference.">
-<polygon fill="white" stroke="black" points="272,-453.5 272,-686.5 406,-686.5 406,-453.5 272,-453.5"/>
-<text text-anchor="middle" x="339" y="-674.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="272,-667.5 406,-667.5 "/>
-<text text-anchor="start" x="280" y="-655.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
-<polyline fill="none" stroke="black" points="272,-648.5 406,-648.5 "/>
+<polygon fill="white" stroke="black" points="272,-464.5 272,-697.5 406,-697.5 406,-464.5 272,-464.5"/>
+<text text-anchor="middle" x="339" y="-685.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="272,-678.5 406,-678.5 "/>
+<text text-anchor="start" x="280" y="-666.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<polyline fill="none" stroke="black" points="272,-659.5 406,-659.5 "/>
+<text text-anchor="start" x="280" y="-647.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="280" y="-636.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="280" y="-625.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="280" y="-614.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="280" y="-603.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="280" y="-592.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="280" y="-581.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="280" y="-570.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="280" y="-559.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="280" y="-548.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="280" y="-537.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="280" y="-526.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="280" y="-625.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="280" y="-614.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="280" y="-603.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="280" y="-592.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="280" y="-581.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="280" y="-570.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="280" y="-559.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="280" y="-548.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="280" y="-537.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="280" y="-526.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
 <text text-anchor="start" x="280" y="-515.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="280" y="-504.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="280" y="-493.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="280" y="-482.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="280" y="-471.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="280" y="-460.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<text text-anchor="start" x="280" y="-504.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="280" y="-493.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="280" y="-482.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="280" y="-471.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </a>
 </g>
... 59920 lines suppressed ...