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 2020/04/15 02:10:21 UTC

[incubator-tvm-site] branch asf-site updated: Docs build at Tue Apr 14 19:10:06 PDT 2020

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/incubator-tvm-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 7631a36  Docs build at Tue Apr 14 19:10:06 PDT 2020
7631a36 is described below

commit 7631a361b9bcf44d170ad9b62de0d6593d0863f1
Author: tqchen <tq...@octoml.ai>
AuthorDate: Tue Apr 14 19:10:07 2020 -0700

    Docs build at Tue Apr 14 19:10:06 PDT 2020
---
 .../relay_pass_infra.ipynb                         |   12 +-
 .../relay_pass_infra.py                            |   26 +-
 docs/_sources/api/python/ir.rst.txt                |    8 +
 docs/_sources/dev/convert_layout.rst.txt           |    2 +-
 docs/_sources/dev/relay_pass_infra.rst.txt         |    4 +-
 docs/_sources/frontend/tensorflow.rst.txt          |    1 +
 .../tutorials/autotvm/sg_execution_times.rst.txt   |   16 +-
 .../tutorials/autotvm/tune_conv2d_cuda.rst.txt     |   42 +-
 .../tutorials/autotvm/tune_simple_template.rst.txt |   20 +-
 .../tutorials/cross_compilation_and_rpc.rst.txt    |    2 +-
 .../tutorials/dev/relay_pass_infra.rst.txt         |   26 +-
 .../tutorials/dev/sg_execution_times.rst.txt       |    6 +-
 .../frontend/deploy_model_on_android.rst.txt       |    2 +-
 .../tutorials/frontend/deploy_ssd_gluoncv.rst.txt  |   78 +-
 docs/_sources/tutorials/frontend/from_onnx.rst.txt |    2 +-
 .../tutorials/frontend/from_pytorch.rst.txt        |    9 +
 .../tutorials/frontend/sg_execution_times.rst.txt  |   32 +-
 .../tutorials/language/sg_execution_times.rst.txt  |   18 +-
 docs/_sources/tutorials/language/tensorize.rst.txt |    2 +-
 .../tutorials/optimize/opt_conv_cuda.rst.txt       |    2 +-
 .../tutorials/optimize/opt_conv_tensorcore.rst.txt |    2 +-
 docs/_sources/tutorials/optimize/opt_gemm.rst.txt  |   16 +-
 .../tutorials/optimize/sg_execution_times.rst.txt  |   10 +-
 docs/_sources/tutorials/relay_quick_start.rst.txt  |    4 +-
 docs/_sources/tutorials/sg_execution_times.rst.txt |    8 +-
 .../tutorials/tensor_expr_get_started.rst.txt      |    2 +-
 docs/_sources/tutorials/topi/intro_topi.rst.txt    |    2 +-
 .../tutorials/topi/sg_execution_times.rst.txt      |    4 +-
 .../tutorials/autotvm/sg_execution_times.rst.txt   |    4 +-
 .../vta/tutorials/autotvm/tune_relay_vta.rst.txt   |   12 +-
 .../frontend/deploy_classification.rst.txt         |    4 +-
 .../tutorials/frontend/deploy_detection.rst.txt    |    2 +-
 .../tutorials/frontend/sg_execution_times.rst.txt  |    6 +-
 .../tutorials/optimize/sg_execution_times.rst.txt  |    6 +-
 .../vta/tutorials/sg_execution_times.rst.txt       |    6 +-
 docs/api/python/autotvm.html                       |    1 +
 docs/api/python/contrib.html                       |    1 +
 docs/api/python/driver.html                        |    1 +
 docs/api/python/error.html                         |    1 +
 docs/api/python/graph_runtime.html                 |    1 +
 docs/api/python/index.html                         |    2 +
 docs/api/python/ir.html                            |  256 +++
 docs/api/python/ndarray.html                       |    1 +
 docs/api/python/relay/analysis.html                |    1 +
 docs/api/python/relay/backend.html                 |    1 +
 docs/api/python/relay/frontend.html                |    1 +
 docs/api/python/relay/image.html                   |    1 +
 docs/api/python/relay/index.html                   |  253 +--
 docs/api/python/relay/nn.html                      |    1 +
 docs/api/python/relay/op.html                      |  157 +-
 docs/api/python/relay/testing.html                 |    1 +
 docs/api/python/relay/transform.html               |  315 +--
 docs/api/python/relay/vision.html                  |    1 +
 docs/api/python/rpc.html                           |    1 +
 docs/api/python/runtime.html                       |    1 +
 docs/api/python/target.html                        |    1 +
 docs/api/python/te.html                            |    1 +
 docs/api/python/tir.html                           |   83 +-
 docs/api/python/topi.html                          |    1 +
 docs/api/python/vta/index.html                     |    1 +
 docs/dev/convert_layout.html                       |    2 +-
 docs/dev/relay_pass_infra.html                     |    4 +-
 docs/doxygen/algorithm_8h_source.html              |    4 +-
 docs/doxygen/analyzer_8h_source.html               |    4 +-
 docs/doxygen/annotated.html                        |  231 +--
 docs/doxygen/annotation_8h_source.html             |    2 +-
 docs/doxygen/base_8h_source.html                   |    4 +-
 docs/doxygen/batch__matmul_8h_source.html          |    2 +-
 docs/doxygen/bitserial_8h_source.html              |    4 +-
 docs/doxygen/buffer_8h_source.html                 |    2 +-
 docs/doxygen/classes.html                          |  235 +--
 docs/doxygen/classtvm_1_1BaseExpr.html             |    2 +-
 .../classtvm_1_1BaseExprNode__inherit__graph.svg   |   21 +-
 .../classtvm_1_1BaseExpr__inherit__graph.svg       |  795 ++++----
 docs/doxygen/classtvm_1_1BaseFuncNode-members.html |   15 +-
 docs/doxygen/classtvm_1_1BaseFuncNode.html         |   61 +-
 .../classtvm_1_1BaseFuncNode__coll__graph.svg      |  187 +-
 .../classtvm_1_1BaseFuncNode__inherit__graph.svg   |   93 +-
 ...-members.html => classtvm_1_1Bool-members.html} |   25 +-
 ...asstvm_1_1IntImm.html => classtvm_1_1Bool.html} |  128 +-
 docs/doxygen/classtvm_1_1Bool__coll__graph.svg     |   98 +
 docs/doxygen/classtvm_1_1Bool__inherit__graph.svg  |   98 +
 docs/doxygen/classtvm_1_1IntImm.html               |    2 +-
 .../doxygen/classtvm_1_1IntImm__inherit__graph.svg |  137 +-
 docs/doxygen/classtvm_1_1Integer-members.html      |    6 +-
 docs/doxygen/classtvm_1_1Integer.html              |  128 +-
 docs/doxygen/classtvm_1_1Integer__coll__graph.svg  |  112 +-
 .../classtvm_1_1Integer__inherit__graph.svg        |  112 +-
 docs/doxygen/classtvm_1_1PrimExpr.html             |    2 +-
 .../classtvm_1_1PrimExpr__inherit__graph.svg       |  275 +--
 .../classtvm_1_1RelayExprNode__inherit__graph.svg  |   29 +-
 ...sstvm_1_1relay_1_1ConstantNode__coll__graph.svg |    2 +-
 .../classtvm_1_1relay_1_1FunctionNode-members.html |   29 +-
 .../doxygen/classtvm_1_1relay_1_1FunctionNode.html |   15 +-
 ...sstvm_1_1relay_1_1FunctionNode__coll__graph.svg |  293 +--
 ...vm_1_1relay_1_1FunctionNode__inherit__graph.svg |   89 +-
 ...tvm_1_1relay_1_1InterpreterClosure-members.html |   43 +-
 .../classtvm_1_1relay_1_1InterpreterClosure.html   |    5 +-
 ...1_1relay_1_1InterpreterClosure__coll__graph.svg |    2 +-
 ...relay_1_1InterpreterClosure__inherit__graph.svg |   19 +-
 ...stvm_1_1relay_1_1RecClosureObj__coll__graph.svg |    2 +-
 .../classtvm_1_1runtime_1_1ADT-members.html        |   53 +-
 docs/doxygen/classtvm_1_1runtime_1_1ADT.html       |    5 +-
 .../classtvm_1_1runtime_1_1ADT__coll__graph.svg    |    2 +-
 .../classtvm_1_1runtime_1_1ADT__inherit__graph.svg |   19 +-
 .../classtvm_1_1runtime_1_1DeviceAPI-members.html  |   11 +-
 docs/doxygen/classtvm_1_1runtime_1_1DeviceAPI.html |   39 +-
 ...asstvm_1_1runtime_1_1DeviceAPI__coll__graph.svg |   47 +-
 .../classtvm_1_1runtime_1_1Module-members.html     |   51 +-
 docs/doxygen/classtvm_1_1runtime_1_1Module.html    |    5 +-
 .../classtvm_1_1runtime_1_1Module__coll__graph.svg |    2 +-
 ...asstvm_1_1runtime_1_1Module__inherit__graph.svg |   19 +-
 .../classtvm_1_1runtime_1_1NDArray-members.html    |   87 +-
 docs/doxygen/classtvm_1_1runtime_1_1NDArray.html   |    5 +-
 ...classtvm_1_1runtime_1_1NDArray__coll__graph.svg |    2 +-
 ...sstvm_1_1runtime_1_1NDArray__inherit__graph.svg |   19 +-
 .../classtvm_1_1runtime_1_1ObjectRef-members.html  |   45 +-
 docs/doxygen/classtvm_1_1runtime_1_1ObjectRef.html |   30 +-
 ...asstvm_1_1runtime_1_1ObjectRef__coll__graph.svg |    2 +-
 ...tvm_1_1runtime_1_1ObjectRef__inherit__graph.svg |  202 +-
 ...> classtvm_1_1runtime_1_1Optional-members.html} |   48 +-
 ...g.html => classtvm_1_1runtime_1_1Optional.html} |  642 +++---
 ...lasstvm_1_1runtime_1_1Optional__coll__graph.svg |   93 +
 ...stvm_1_1runtime_1_1Optional__inherit__graph.svg |   65 +
 .../classtvm_1_1runtime_1_1String-members.html     |   64 +-
 docs/doxygen/classtvm_1_1runtime_1_1String.html    |   43 +-
 .../classtvm_1_1runtime_1_1String__coll__graph.svg |   16 +-
 ...asstvm_1_1runtime_1_1String__inherit__graph.svg |   33 +-
 ...asstvm_1_1runtime_1_1vm_1_1Closure-members.html |   39 +-
 .../classtvm_1_1runtime_1_1vm_1_1Closure.html      |    5 +-
 ...vm_1_1runtime_1_1vm_1_1Closure__coll__graph.svg |    2 +-
 ...1_1runtime_1_1vm_1_1Closure__inherit__graph.svg |   19 +-
 ...1_1runtime_1_1vm_1_1Executable__coll__graph.svg |    2 +-
 ...stvm_1_1runtime_1_1vm_1_1VMClosure-members.html |   43 +-
 .../classtvm_1_1runtime_1_1vm_1_1VMClosure.html    |    5 +-
 ..._1_1runtime_1_1vm_1_1VMClosure__coll__graph.svg |    2 +-
 ...1runtime_1_1vm_1_1VMClosure__inherit__graph.svg |   19 +-
 ...untime_1_1vm_1_1VirtualMachine__coll__graph.svg |    2 +-
 .../classtvm_1_1tir_1_1PrimFuncNode-members.html   |   27 +-
 docs/doxygen/classtvm_1_1tir_1_1PrimFuncNode.html  |   15 +-
 ...lasstvm_1_1tir_1_1PrimFuncNode__coll__graph.svg |  281 +--
 ...stvm_1_1tir_1_1PrimFuncNode__inherit__graph.svg |   89 +-
 docs/doxygen/codegen_8h.html                       |    2 +-
 docs/doxygen/codegen_8h__incl.svg                  | 1079 +++++-----
 docs/doxygen/constant__utils_8h.html               |    2 +-
 docs/doxygen/constant__utils_8h__incl.svg          | 1069 +++++-----
 docs/doxygen/cuda_2dense_8h_source.html            |    2 +-
 docs/doxygen/cuda_2injective_8h_source.html        |    2 +-
 docs/doxygen/cuda_2normalization_8h_source.html    |    2 +-
 docs/doxygen/cuda_2pooling_8h_source.html          |    2 +-
 docs/doxygen/cuda_2reduction_8h_source.html        |    2 +-
 docs/doxygen/cuda_2softmax_8h_source.html          |    2 +-
 docs/doxygen/data__layout_8h_source.html           |    4 +-
 docs/doxygen/debug_8h_source.html                  |    2 +-
 docs/doxygen/device__api_8h_source.html            |    7 +-
 docs/doxygen/device__copy_8h_source.html           |    2 +-
 docs/doxygen/dilate_8h.html                        |    2 +-
 docs/doxygen/dilate_8h__incl.svg                   | 1079 +++++-----
 docs/doxygen/dir_000007_000011.html                |    2 +-
 .../dir_02be2c9d68e402f80df60bd528724ee5_dep.svg   |    4 +-
 .../dir_5da96592f3a7c442b838b075c58254c2_dep.svg   |    4 +-
 .../dir_63946bee875c6d52bce55e72a67a86ad_dep.svg   |    4 +-
 .../dir_72c2f11201cd7636dc7624de0754daa5_dep.svg   |    4 +-
 .../dir_b4c7d8e826c599ba55146c099a14beb5_dep.svg   |    4 +-
 .../dir_d523279167051dc3aad9a40981221f4d_dep.svg   |    4 +-
 .../dir_dc867ff9a37cad1764f1670dc7eba6c1_dep.svg   |    4 +-
 docs/doxygen/driver__api_8h__incl.svg              | 1027 +++++-----
 docs/doxygen/elemwise_8h.html                      |    2 +-
 docs/doxygen/elemwise_8h__incl.svg                 | 1079 +++++-----
 docs/doxygen/error_8h.html                         |    2 +-
 docs/doxygen/error_8h__incl.svg                    |  897 ++++----
 docs/doxygen/feature_8h__incl.svg                  | 1059 +++++-----
 docs/doxygen/feature_8h_source.html                |    2 +-
 docs/doxygen/functions__.html                      |    4 +
 docs/doxygen/functions_b.html                      |    3 +-
 docs/doxygen/functions_c.html                      |    3 +-
 docs/doxygen/functions_f.html                      |    1 +
 docs/doxygen/functions_func_b.html                 |    5 +-
 docs/doxygen/functions_func_f.html                 |    3 +-
 docs/doxygen/functions_func_g.html                 |    2 +-
 docs/doxygen/functions_func_n.html                 |    3 +
 docs/doxygen/functions_func_o.html                 |   33 +-
 docs/doxygen/functions_func_s.html                 |    4 +-
 docs/doxygen/functions_func_t.html                 |   15 +-
 docs/doxygen/functions_func_v.html                 |   28 +-
 docs/doxygen/functions_g.html                      |    2 +-
 docs/doxygen/functions_l.html                      |    2 +-
 docs/doxygen/functions_n.html                      |    3 +
 docs/doxygen/functions_o.html                      |   31 +-
 docs/doxygen/functions_s.html                      |    4 +-
 docs/doxygen/functions_t.html                      |   11 +-
 docs/doxygen/functions_type.html                   |    1 +
 docs/doxygen/functions_v.html                      |   28 +-
 docs/doxygen/functions_vars.html                   |    4 +
 docs/doxygen/functor_8h.html                       |    2 +-
 docs/doxygen/generic__func_8h.html                 |    2 +-
 docs/doxygen/generic__func_8h_source.html          |    2 +-
 docs/doxygen/globals.html                          |    6 +
 docs/doxygen/globals_defs.html                     |    6 +
 docs/doxygen/hierarchy.html                        | 1105 +++++-----
 docs/doxygen/image_8h_source.html                  |    4 +-
 docs/doxygen/include_2tvm_2ir_2transform_8h.html   |    5 +-
 .../include_2tvm_2ir_2transform_8h__incl.svg       |  947 ++++-----
 .../include_2tvm_2ir_2transform_8h_source.html     |    7 +-
 .../include_2tvm_2relay_2attrs_2nn_8h_source.html  |    4 +-
 .../include_2tvm_2relay_2attrs_2transform_8h.html  |    2 +-
 ...lude_2tvm_2relay_2attrs_2transform_8h__incl.svg | 1153 +++++------
 ...de_2tvm_2relay_2attrs_2transform_8h_source.html |    6 +-
 .../include_2tvm_2relay_2qnn_2transform_8h.html    |    2 +-
 ...nclude_2tvm_2relay_2qnn_2transform_8h__incl.svg | 1041 +++++-----
 .../include_2tvm_2relay_2transform_8h__incl.svg    | 1181 +++++------
 docs/doxygen/include_2tvm_2tir_2transform_8h.html  |    5 +-
 .../include_2tvm_2tir_2transform_8h__incl.svg      | 1121 +++++-----
 .../include_2tvm_2tir_2transform_8h_source.html    |    3 +-
 docs/doxygen/inherit_graph_10.svg                  |  873 ++++----
 docs/doxygen/inherit_graph_100.svg                 |   21 +-
 docs/doxygen/inherit_graph_101.svg                 |   17 +-
 docs/doxygen/inherit_graph_102.svg                 |   12 +-
 docs/doxygen/inherit_graph_103.svg                 |   12 +-
 docs/doxygen/inherit_graph_104.svg                 |   15 +-
 docs/doxygen/inherit_graph_105.svg                 |   15 +-
 docs/doxygen/inherit_graph_106.svg                 |   15 +-
 docs/doxygen/inherit_graph_107.svg                 |   15 +-
 docs/doxygen/inherit_graph_108.svg                 |   12 +-
 docs/doxygen/inherit_graph_109.svg                 |   12 +-
 docs/doxygen/inherit_graph_110.svg                 |   15 +-
 docs/doxygen/inherit_graph_111.svg                 |   17 +-
 docs/doxygen/inherit_graph_112.svg                 |   16 +-
 docs/doxygen/inherit_graph_113.svg                 |   15 +-
 docs/doxygen/inherit_graph_114.svg                 |   14 +-
 docs/doxygen/inherit_graph_115.svg                 |   12 +-
 docs/doxygen/inherit_graph_116.svg                 |   69 +-
 docs/doxygen/inherit_graph_117.svg                 |   54 +-
 docs/doxygen/inherit_graph_118.svg                 |   68 +-
 docs/doxygen/inherit_graph_119.svg                 |   18 +-
 docs/doxygen/inherit_graph_120.svg                 |   19 +-
 docs/doxygen/inherit_graph_121.svg                 |   15 +-
 docs/doxygen/inherit_graph_122.svg                 |   15 +-
 docs/doxygen/inherit_graph_123.svg                 |   27 +-
 docs/doxygen/inherit_graph_124.svg                 |   24 +-
 docs/doxygen/inherit_graph_125.svg                 |   28 +-
 docs/doxygen/inherit_graph_126.svg                 |   12 +-
 docs/doxygen/inherit_graph_127.svg                 |   12 +-
 docs/doxygen/inherit_graph_128.svg                 |   12 +-
 ...inherit_graph_128.svg => inherit_graph_129.svg} |    0
 docs/doxygen/inherit_graph_80.svg                  |   97 +-
 docs/doxygen/inherit_graph_85.svg                  |   17 +-
 docs/doxygen/inherit_graph_86.svg                  |   12 +-
 docs/doxygen/inherit_graph_87.svg                  |   12 +-
 docs/doxygen/inherit_graph_88.svg                  |   17 +-
 docs/doxygen/inherit_graph_89.svg                  |   16 +-
 docs/doxygen/inherit_graph_90.svg                  |   16 +-
 docs/doxygen/inherit_graph_91.svg                  |   17 +-
 docs/doxygen/inherit_graph_92.svg                  |   14 +-
 docs/doxygen/inherit_graph_93.svg                  |   15 +-
 docs/doxygen/inherit_graph_94.svg                  |   12 +-
 docs/doxygen/inherit_graph_95.svg                  |   54 +-
 docs/doxygen/inherit_graph_96.svg                  |   58 +-
 docs/doxygen/inherit_graph_97.svg                  |   19 +-
 docs/doxygen/inherit_graph_98.svg                  |    4 +-
 docs/doxygen/inherit_graph_99.svg                  |   19 +-
 docs/doxygen/inherits.html                         |   90 +-
 docs/doxygen/int__set_8h_source.html               |    2 +-
 docs/doxygen/int__solver_8h_source.html            |    2 +-
 docs/doxygen/interpreter_8h.html                   |    2 +-
 docs/doxygen/interpreter_8h__incl.svg              | 1157 +++++------
 docs/doxygen/interpreter_8h_source.html            |    2 +-
 docs/doxygen/ir_2adt_8h_source.html                |    2 +-
 docs/doxygen/ir_2attrs_8h.html                     |    4 +-
 docs/doxygen/ir_2attrs_8h_source.html              |  184 +-
 docs/doxygen/ir_2expr_8h.html                      |   21 +-
 docs/doxygen/ir_2expr_8h_source.html               |   56 +-
 docs/doxygen/ir_2function_8h.html                  |    3 +-
 docs/doxygen/ir_2function_8h__incl.svg             |  779 +++----
 docs/doxygen/ir_2function_8h_source.html           |   28 +-
 docs/doxygen/ir_2module_8h.html                    |    2 +-
 docs/doxygen/ir_2module_8h__incl.svg               |  857 ++++----
 docs/doxygen/ir_2module_8h_source.html             |    4 +-
 docs/doxygen/ir_2op_8h.html                        |    4 +-
 docs/doxygen/ir_2op_8h__incl.svg                   |  961 ++++-----
 docs/doxygen/ir_2op_8h_source.html                 |    4 +-
 docs/doxygen/ir_2type_8h_source.html               |    4 +-
 docs/doxygen/ir__pass_8h.html                      |    2 +-
 docs/doxygen/ir__pass_8h__incl.svg                 | 1037 +++++-----
 docs/doxygen/local__response__norm_8h_source.html  |    2 +-
 docs/doxygen/namespacemembers_b.html               |    9 +-
 docs/doxygen/namespacemembers_func_b.html          |    9 +-
 docs/doxygen/namespacemembers_func_o.html          |   32 +-
 docs/doxygen/namespacemembers_func_p.html          |    1 +
 docs/doxygen/namespacemembers_o.html               |   34 +-
 docs/doxygen/namespacemembers_p.html               |    1 +
 docs/doxygen/namespacemembers_s.html               |    2 +-
 docs/doxygen/namespacetvm.html                     |  489 +++--
 docs/doxygen/namespacetvm_1_1runtime.html          |   19 +-
 docs/doxygen/namespacetvm_1_1tir_1_1transform.html |   21 -
 docs/doxygen/namespacetvm_1_1transform.html        |   39 +
 docs/doxygen/ndarray_8h.html                       |    2 +-
 docs/doxygen/ndarray_8h__dep__incl.svg             |  763 +++----
 docs/doxygen/ndarray_8h_source.html                |   10 +-
 docs/doxygen/nn_2bnn_8h.html                       |    2 +-
 docs/doxygen/nn_2bnn_8h__incl.svg                  | 1135 +++++------
 docs/doxygen/nn_2bnn_8h_source.html                |    2 +-
 docs/doxygen/nn_2dense_8h_source.html              |    2 +-
 docs/doxygen/nn_2pooling_8h.html                   |    2 +-
 docs/doxygen/nn_2pooling_8h__incl.svg              | 1261 ++++++------
 docs/doxygen/nn_2pooling_8h_source.html            |    2 +-
 docs/doxygen/nn_2softmax_8h_source.html            |    4 +-
 docs/doxygen/node_2container_8h_source.html        |    2 +-
 docs/doxygen/node_8h_source.html                   |    4 +-
 docs/doxygen/object_8h.html                        |   74 +-
 docs/doxygen/object_8h__dep__incl.svg              |  933 ++++-----
 docs/doxygen/object_8h_source.html                 |   41 +-
 docs/doxygen/op__attr__types_8h_source.html        |    2 +-
 docs/doxygen/op__strategy_8h_source.html           |    6 +-
 docs/doxygen/operation_8h_source.html              |    8 +-
 docs/doxygen/packed__func_8h.html                  |    2 +-
 docs/doxygen/packed__func_8h__dep__incl.svg        |  761 +++----
 docs/doxygen/packed__func_8h_source.html           |   10 +-
 docs/doxygen/pattern__functor_8h.html              |    2 +-
 docs/doxygen/pattern__functor_8h__incl.svg         | 1227 +++++------
 docs/doxygen/reduce_8h_source.html                 |    2 +-
 docs/doxygen/reduction_8h_source.html              |    2 +-
 docs/doxygen/reflection_8h.html                    |    4 +-
 docs/doxygen/registry_8h.html                      |    2 +-
 docs/doxygen/relay_2adt_8h.html                    |    2 +-
 docs/doxygen/relay_2adt_8h__incl.svg               | 1163 +++++------
 docs/doxygen/relay_2adt_8h_source.html             |    6 +-
 docs/doxygen/relay_2analysis_8h.html               |    2 +-
 docs/doxygen/relay_2analysis_8h__incl.svg          | 1175 +++++------
 docs/doxygen/relay_2attrs_2memory_8h.html          |    2 +-
 docs/doxygen/relay_2attrs_2memory_8h__incl.svg     | 1149 +++++------
 docs/doxygen/relay_2attrs_2memory_8h_source.html   |    2 +-
 docs/doxygen/relay_2expr_8h.html                   |    2 +-
 docs/doxygen/relay_2expr_8h__incl.svg              | 1195 +++++------
 docs/doxygen/relay_2expr_8h_source.html            |    8 +-
 docs/doxygen/relay_2expr__functor_8h.html          |    2 +-
 docs/doxygen/relay_2expr__functor_8h__incl.svg     | 1205 +++++------
 docs/doxygen/relay_2function_8h.html               |    2 +-
 docs/doxygen/relay_2function_8h__incl.svg          | 2143 ++++++++++----------
 docs/doxygen/relay_2function_8h_source.html        |   12 +-
 docs/doxygen/relay_2op_8h.html                     |    2 +-
 docs/doxygen/relay_2op_8h__incl.svg                | 1209 +++++------
 docs/doxygen/relay_2qnn_2attrs_8h_source.html      |    4 +-
 docs/doxygen/relay_2type_8h.html                   |    2 +-
 docs/doxygen/relay_2type_8h__incl.svg              | 1121 +++++-----
 docs/doxygen/runtime_2container_8h.html            |    7 +-
 docs/doxygen/runtime_2container_8h__dep__incl.svg  | 1734 ++++++++--------
 docs/doxygen/runtime_2container_8h_source.html     |   72 +-
 docs/doxygen/runtime_2memory_8h.html               |    2 +-
 docs/doxygen/runtime_2memory_8h__dep__incl.svg     |  893 ++++----
 docs/doxygen/runtime_2module_8h.html               |    2 +-
 docs/doxygen/runtime_2module_8h__dep__incl.svg     |  759 +++----
 docs/doxygen/runtime_2module_8h_source.html        |    6 +-
 docs/doxygen/schedule_8h_source.html               |    6 +-
 docs/doxygen/search/all_1.js                       |    1 +
 docs/doxygen/search/all_10.js                      |   20 +-
 docs/doxygen/search/all_11.js                      |    7 +-
 docs/doxygen/search/all_14.js                      |    8 +-
 docs/doxygen/search/all_15.js                      |   24 +-
 docs/doxygen/search/all_17.js                      |   11 +-
 docs/doxygen/search/all_3.js                       |   12 +-
 docs/doxygen/search/all_4.js                       |    2 +-
 docs/doxygen/search/all_7.js                       |    2 +-
 docs/doxygen/search/all_8.js                       |    4 +-
 docs/doxygen/search/all_9.js                       |    4 +-
 docs/doxygen/search/all_a.js                       |    2 +-
 docs/doxygen/search/all_d.js                       |    2 +-
 docs/doxygen/search/all_f.js                       |    1 +
 docs/doxygen/search/classes_1.js                   |    1 +
 docs/doxygen/search/classes_13.js                  |    2 +-
 docs/doxygen/search/classes_7.js                   |    2 +-
 docs/doxygen/search/classes_c.js                   |    1 +
 docs/doxygen/search/classes_d.js                   |    1 +
 docs/doxygen/search/defines_6.js                   |    2 +
 docs/doxygen/search/functions_10.js                |    2 +-
 docs/doxygen/search/functions_12.js                |    6 +-
 docs/doxygen/search/functions_13.js                |    3 +-
 docs/doxygen/search/functions_15.js                |    3 +-
 docs/doxygen/search/functions_2.js                 |    3 +-
 docs/doxygen/search/functions_6.js                 |    2 +-
 docs/doxygen/search/functions_7.js                 |    4 +-
 docs/doxygen/search/functions_9.js                 |    2 +-
 docs/doxygen/search/functions_e.js                 |    1 +
 docs/doxygen/search/functions_f.js                 |   17 +-
 docs/doxygen/search/typedefs_2.js                  |    2 +-
 docs/doxygen/search/variables_0.js                 |    1 +
 docs/doxygen/serializer_8h.html                    |    2 +-
 docs/doxygen/serializer_8h__dep__incl.svg          |  761 +++----
 docs/doxygen/span_8h_source.html                   |    2 +-
 docs/doxygen/stmt_8h_source.html                   |    6 +-
 .../doxygen/structtvm_1_1relay_1_1RepeatAttrs.html |    2 +-
 ...ucttvm_1_1relay_1_1RepeatAttrs__coll__graph.svg |  200 +-
 .../structtvm_1_1relay_1_1ReverseAttrs.html        |    2 +-
 ...cttvm_1_1relay_1_1ReverseAttrs__coll__graph.svg |  198 +-
 docs/doxygen/structtvm_1_1relay_1_1StackAttrs.html |    2 +-
 ...ructtvm_1_1relay_1_1StackAttrs__coll__graph.svg |  198 +-
 docs/doxygen/structtvm_1_1relay_1_1TakeAttrs.html  |    2 +-
 ...tructtvm_1_1relay_1_1TakeAttrs__coll__graph.svg |  198 +-
 .../structtvm_1_1relay_1_1YoloReorgAttrs.html      |    2 +-
 ...tvm_1_1relay_1_1YoloReorgAttrs__coll__graph.svg |  200 +-
 ...rter_3_01Optional_3_01T_01_4_01_4-members.html} |   25 +-
 ...alueConverter_3_01Optional_3_01T_01_4_01_4.html |  177 ++
 ...r_3_01Optional_3_01T_01_4_01_4__coll__graph.svg |   25 +
 docs/doxygen/target__info_8h_source.html           |    2 +-
 docs/doxygen/tensor_8h_source.html                 |    4 +-
 docs/doxygen/tensor__intrin_8h_source.html         |    2 +-
 docs/doxygen/tensor__type_8h_source.html           |    4 +-
 docs/doxygen/tir_2analysis_8h.html                 |    2 +-
 docs/doxygen/tir_2analysis_8h__incl.svg            | 1075 +++++-----
 docs/doxygen/tir_2expr_8h_source.html              |    6 +-
 docs/doxygen/tir_2function_8h.html                 |    2 +-
 docs/doxygen/tir_2function_8h__incl.svg            |  989 ++++-----
 docs/doxygen/tir_2function_8h_source.html          |   12 +-
 docs/doxygen/tir_2op_8h_source.html                |    6 +-
 docs/doxygen/topi_2include_2topi_2nn_8h.html       |    2 +-
 docs/doxygen/topi_2include_2topi_2nn_8h__incl.svg  | 1129 ++++++-----
 .../doxygen/topi_2include_2topi_2nn_8h_source.html |    2 +-
 .../topi_2include_2topi_2transform_8h_source.html  |    4 +-
 .../topi_2include_2topi_2util_8h_source.html       |    2 +-
 docs/doxygen/type__functor_8h.html                 |    2 +-
 docs/doxygen/type__functor_8h__incl.svg            | 1203 +++++------
 docs/doxygen/type__relation_8h.html                |    2 +-
 docs/doxygen/type__relation_8h__incl.svg           |  905 +++++----
 docs/doxygen/type__relation_8h_source.html         |    4 +-
 docs/doxygen/var_8h_source.html                    |    4 +-
 docs/doxygen/vision_8h_source.html                 |    4 +-
 docs/doxygen/vm_8h_source.html                     |    4 +-
 docs/doxygen/with_8h_source.html                   |    2 +-
 docs/frontend/tensorflow.html                      |    1 +
 docs/genindex.html                                 |   34 +-
 docs/index.html                                    |    1 +
 .../javadoc/org/apache/tvm/class-use/Function.html |   12 +-
 docs/javadoc/org/apache/tvm/class-use/Module.html  |    8 +-
 docs/objects.inv                                   |  Bin 14056 -> 14053 bytes
 docs/py-modindex.html                              |    5 +
 docs/searchindex.js                                |    2 +-
 docs/tutorials/autotvm/sg_execution_times.html     |   14 +-
 docs/tutorials/autotvm/tune_conv2d_cuda.html       |   42 +-
 docs/tutorials/autotvm/tune_simple_template.html   |   20 +-
 docs/tutorials/cross_compilation_and_rpc.html      |    2 +-
 docs/tutorials/dev/relay_pass_infra.html           |   26 +-
 docs/tutorials/dev/sg_execution_times.html         |    6 +-
 .../frontend/deploy_model_on_android.html          |    2 +-
 docs/tutorials/frontend/deploy_ssd_gluoncv.html    |   80 +-
 docs/tutorials/frontend/from_onnx.html             |    4 +-
 docs/tutorials/frontend/from_pytorch.html          |    5 +
 docs/tutorials/frontend/sg_execution_times.html    |   32 +-
 docs/tutorials/language/sg_execution_times.html    |   18 +-
 docs/tutorials/language/tensorize.html             |    2 +-
 docs/tutorials/optimize/opt_conv_cuda.html         |    2 +-
 docs/tutorials/optimize/opt_conv_tensorcore.html   |    2 +-
 docs/tutorials/optimize/opt_gemm.html              |   16 +-
 docs/tutorials/optimize/sg_execution_times.html    |   10 +-
 docs/tutorials/relay_quick_start.html              |  104 +-
 docs/tutorials/sg_execution_times.html             |    8 +-
 docs/tutorials/tensor_expr_get_started.html        |    2 +-
 docs/tutorials/topi/intro_topi.html                |    2 +-
 docs/tutorials/topi/sg_execution_times.html        |    4 +-
 docs/vta/tutorials/autotvm/sg_execution_times.html |    4 +-
 docs/vta/tutorials/autotvm/tune_relay_vta.html     |  194 +-
 .../tutorials/frontend/deploy_classification.html  |   18 +-
 docs/vta/tutorials/frontend/deploy_detection.html  |    2 +-
 .../vta/tutorials/frontend/sg_execution_times.html |    6 +-
 .../vta/tutorials/optimize/sg_execution_times.html |    6 +-
 docs/vta/tutorials/sg_execution_times.html         |    6 +-
 465 files changed, 29596 insertions(+), 27690 deletions(-)

diff --git a/docs/_downloads/289640e7ded85c57931fc0537d443c5f/relay_pass_infra.ipynb b/docs/_downloads/289640e7ded85c57931fc0537d443c5f/relay_pass_infra.ipynb
index 2421cf1..12bb90f 100644
--- a/docs/_downloads/289640e7ded85c57931fc0537d443c5f/relay_pass_infra.ipynb
+++ b/docs/_downloads/289640e7ded85c57931fc0537d443c5f/relay_pass_infra.ipynb
@@ -15,7 +15,7 @@
       "cell_type": "markdown",
       "metadata": {},
       "source": [
-        "\n\nHow to Use Relay Pass Infra\n===========================\n**Author**: `Zhi Chen <https://github.com/zhiics>`_\n\nAs the number of optimization passes increases in Relay, it becomes intractable to\nexecute them and maintain their dependencies manually. Therefore, we have\nintroduced an infrastructure to manage the optimization passes.\n\nThe optimizations of a Relay program could be applied at various granularity,\nnamely function-level and module-level using :py:class:`tvm.r [...]
+        "\n\nHow to Use Relay Pass Infra\n===========================\n**Author**: `Zhi Chen <https://github.com/zhiics>`_\n\nAs the number of optimization passes increases in Relay, it becomes intractable to\nexecute them and maintain their dependencies manually. Therefore, we have\nintroduced an infrastructure to manage the optimization passes.\n\nThe optimizations of a Relay program could be applied at various granularity,\nnamely function-level and module-level using :py:class:`tvm.r [...]
       ]
     },
     {
@@ -123,7 +123,7 @@
       "cell_type": "markdown",
       "metadata": {},
       "source": [
-        "Use Sequential to Apply a Sequence of Passes\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nApplying passes as above is actually tedious and it may require users to have\nbetter understanding about the dependencies between them. For example, fusion\ncurrently doesn't work well on let bindings. Therefore, we would not be able\nto fuse operators that were fusable if :py:func:`relay.transform.ToANormalForm` is applied before\nfusion, as this pass generates let bindings for each exp [...]
+        "Use Sequential to Apply a Sequence of Passes\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nApplying passes as above is actually tedious and it may require users to have\nbetter understanding about the dependencies between them. For example, fusion\ncurrently doesn't work well on let bindings. Therefore, we would not be able\nto fuse operators that were fusable if :py:func:`relay.transform.ToANormalForm` is applied before\nfusion, as this pass generates let bindings for each exp [...]
       ]
     },
     {
@@ -134,14 +134,14 @@
       },
       "outputs": [],
       "source": [
-        "# Now let's execute some passes through :py:class:`tvm.relay.transform.Sequential`\nf = example()\nmod = tvm.IRModule.from_expr(f)\n# Glob the interested passes.\nseq = relay.transform.Sequential([relay.transform.FoldConstant(),\n                                  relay.transform.EliminateCommonSubexpr(),\n                                  relay.transform.FuseOps(fuse_opt_level=2)])\nmod1 = seq(mod)\nprint(mod1)"
+        "# Now let's execute some passes through :py:class:`tvm.transform.Sequential`\nf = example()\nmod = tvm.IRModule.from_expr(f)\n# Glob the interested passes.\nseq = tvm.transform.Sequential([relay.transform.FoldConstant(),\n                                  relay.transform.EliminateCommonSubexpr(),\n                                  relay.transform.FuseOps(fuse_opt_level=2)])\nmod1 = seq(mod)\nprint(mod1)"
       ]
     },
     {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
-        "From the transformed Relay program, we can see that there are still two\nidentical addition operations. This is because `EliminateCommonSubexpr`\nwas not actually performed. The reason is because only the passes that have\noptimization level less or equal to 2 will be executed by default under\n:py:class:`tvm.relay.transform.Sequential`. The pass infra,\nhowever, provides a configuration interface\nfor users to customize the optimization level that they want to execute.\n\n"
+        "From the transformed Relay program, we can see that there are still two\nidentical addition operations. This is because `EliminateCommonSubexpr`\nwas not actually performed. The reason is because only the passes that have\noptimization level less or equal to 2 will be executed by default under\n:py:class:`tvm.transform.Sequential`. The pass infra,\nhowever, provides a configuration interface\nfor users to customize the optimization level that they want to execute.\n\n"
       ]
     },
     {
@@ -188,7 +188,7 @@
       },
       "outputs": [],
       "source": [
-        "with relay.build_config(opt_level=3):\n    mod4 = seq(mod)\nprint(mod4)\n\nseq1 = relay.transform.Sequential([relay.transform.AlterOpLayout()])\nwith relay.build_config(opt_level=3):\n    with tvm.target.create(\"llvm\"):\n        mod5 = seq1(mod)\nprint(mod5)"
+        "with relay.build_config(opt_level=3):\n    mod4 = seq(mod)\nprint(mod4)\n\nseq1 = tvm.transform.Sequential([relay.transform.AlterOpLayout()])\nwith relay.build_config(opt_level=3):\n    with tvm.target.create(\"llvm\"):\n        mod5 = seq1(mod)\nprint(mod5)"
       ]
     },
     {
@@ -224,7 +224,7 @@
       },
       "outputs": [],
       "source": [
-        "f = example()\nmod = tvm.IRModule.from_expr(f)\nseq = relay.transform.Sequential([relay.transform.FoldConstant(),\n                                  relay.transform.PrintIR(False),\n                                  relay.transform.EliminateCommonSubexpr(),\n                                  relay.transform.FuseOps(),\n                                  relay.transform.PrintIR(False)])\nwith relay.build_config(opt_level=3):\n    mod = seq(mod)\n\nprint(\"done\")"
+        "f = example()\nmod = tvm.IRModule.from_expr(f)\nseq = tvm.transform.Sequential([relay.transform.FoldConstant(),\n                                tvm.transform.PrintIR(),\n                                relay.transform.EliminateCommonSubexpr(),\n                                relay.transform.FuseOps(),\n                                tvm.transform.PrintIR()])\nwith relay.build_config(opt_level=3):\n    mod = seq(mod)\n\nprint(\"done\")"
       ]
     }
   ],
diff --git a/docs/_downloads/52b04835c256bb81bbf4187f18950a0a/relay_pass_infra.py b/docs/_downloads/52b04835c256bb81bbf4187f18950a0a/relay_pass_infra.py
index 6b844ff..980d96c 100644
--- a/docs/_downloads/52b04835c256bb81bbf4187f18950a0a/relay_pass_infra.py
+++ b/docs/_downloads/52b04835c256bb81bbf4187f18950a0a/relay_pass_infra.py
@@ -29,7 +29,7 @@ introduced an infrastructure to manage the optimization passes.
 The optimizations of a Relay program could be applied at various granularity,
 namely function-level and module-level using :py:class:`tvm.relay.transform.FunctionPass`
 and py:class:`tvm.relay.transform.ModulePass`
-respectively. Or users can rely on py:class:`tvm.relay.transform.Sequential` to apply a sequence of passes
+respectively. Or users can rely on py:class:`tvm.transform.Sequential` to apply a sequence of passes
 on a Relay program where the dependencies between passes can be resolved by the
 pass infra. For more details about each type of these passes, please refer to
 the :ref:`relay-pass-infra`
@@ -130,22 +130,22 @@ print(mod)
 # fusion, as this pass generates let bindings for each expression to
 # canonicalize a Relay program.
 #
-# Relay, hence, provides :py:class:`tvm.relay.transform.Sequential` to alleviate developers from handling
+# Relay, hence, provides :py:class:`tvm.transform.Sequential` to alleviate developers from handling
 # these issues explicitly by specifying the required passes of each pass and
 # packing them as a whole to execute. For example, the same passes can now be
-# applied using the sequential style as the following. :py:class:`tvm.relay.transform.Sequential` is
+# applied using the sequential style as the following. :py:class:`tvm.transform.Sequential` is
 # similiar to `torch.nn.sequential <https://pytorch.org/docs/stable/nn.html#torch.nn.Sequential>`_
 # and `mxnet.gluon.block <https://mxnet.incubator.apache.org/api/python/docs/_modules/mxnet/gluon/block.html>`_.
 # For example, `torch.nn.sequential` is used to contain a sequence of PyTorch
 # `Modules` that will be added to build a network. It focuses on the network
-# layers. Instead, the :py:class:`tvm.relay.transform.Sequential` in our pass infra works on the optimizing
+# layers. Instead, the :py:class:`tvm.transform.Sequential` in our pass infra works on the optimizing
 # pass.
 
-# Now let's execute some passes through :py:class:`tvm.relay.transform.Sequential`
+# Now let's execute some passes through :py:class:`tvm.transform.Sequential`
 f = example()
 mod = tvm.IRModule.from_expr(f)
 # Glob the interested passes.
-seq = relay.transform.Sequential([relay.transform.FoldConstant(),
+seq = tvm.transform.Sequential([relay.transform.FoldConstant(),
                                   relay.transform.EliminateCommonSubexpr(),
                                   relay.transform.FuseOps(fuse_opt_level=2)])
 mod1 = seq(mod)
@@ -156,7 +156,7 @@ print(mod1)
 # identical addition operations. This is because `EliminateCommonSubexpr`
 # was not actually performed. The reason is because only the passes that have
 # optimization level less or equal to 2 will be executed by default under
-# :py:class:`tvm.relay.transform.Sequential`. The pass infra,
+# :py:class:`tvm.transform.Sequential`. The pass infra,
 # however, provides a configuration interface
 # for users to customize the optimization level that they want to execute.
 
@@ -186,7 +186,7 @@ with relay.build_config(opt_level=3):
     mod4 = seq(mod)
 print(mod4)
 
-seq1 = relay.transform.Sequential([relay.transform.AlterOpLayout()])
+seq1 = tvm.transform.Sequential([relay.transform.AlterOpLayout()])
 with relay.build_config(opt_level=3):
     with tvm.target.create("llvm"):
         mod5 = seq1(mod)
@@ -237,11 +237,11 @@ print(mod3)
 
 f = example()
 mod = tvm.IRModule.from_expr(f)
-seq = relay.transform.Sequential([relay.transform.FoldConstant(),
-                                  relay.transform.PrintIR(False),
-                                  relay.transform.EliminateCommonSubexpr(),
-                                  relay.transform.FuseOps(),
-                                  relay.transform.PrintIR(False)])
+seq = tvm.transform.Sequential([relay.transform.FoldConstant(),
+                                tvm.transform.PrintIR(),
+                                relay.transform.EliminateCommonSubexpr(),
+                                relay.transform.FuseOps(),
+                                tvm.transform.PrintIR()])
 with relay.build_config(opt_level=3):
     mod = seq(mod)
 
diff --git a/docs/_sources/api/python/ir.rst.txt b/docs/_sources/api/python/ir.rst.txt
index 1f0dc0c..c2a1a1e 100644
--- a/docs/_sources/api/python/ir.rst.txt
+++ b/docs/_sources/api/python/ir.rst.txt
@@ -21,3 +21,11 @@ tvm.ir
    :members:
    :imported-members:
    :autosummary:
+
+
+tvm.transform
+-------------
+.. automodule:: tvm.transform
+   :members:
+   :imported-members:
+   :autosummary:
diff --git a/docs/_sources/dev/convert_layout.rst.txt b/docs/_sources/dev/convert_layout.rst.txt
index 715d810..7345c15 100644
--- a/docs/_sources/dev/convert_layout.rst.txt
+++ b/docs/_sources/dev/convert_layout.rst.txt
@@ -227,7 +227,7 @@ ConvertLayout pass is extremely easy to use. The pass is not a part of default r
 
     # Convert the layout to NCHW
     # RemoveUnunsedFunctions is used to clean up the graph.
-    seq = relay.transform.Sequential([relay.transform.RemoveUnusedFunctions(),
+    seq = tvm.transform.Sequential([relay.transform.RemoveUnusedFunctions(),
                                       relay.transform.ConvertLayout('NCHW')])
     with relay.transform.PassContext(opt_level=3):
         mod = seq(mod)
diff --git a/docs/_sources/dev/relay_pass_infra.rst.txt b/docs/_sources/dev/relay_pass_infra.rst.txt
index b42e128..3b443fa 100644
--- a/docs/_sources/dev/relay_pass_infra.rst.txt
+++ b/docs/_sources/dev/relay_pass_infra.rst.txt
@@ -582,7 +582,7 @@ using ``Sequential`` associated with other types of passes.
     func = relay.Function([x], z2)
 
     # Customize the optimization pipeline.
-    seq = _transform.Sequential([
+    seq = tvm.transform.Sequential([
         relay.transform.InferType(),
         relay.transform.FoldConstant(),
         relay.transform.EliminateCommonSubexpr(),
@@ -609,7 +609,7 @@ sequential pass example could be like the following to enable IR dumping for
 
 .. code:: python
 
-    seq = _transform.Sequential([
+    seq = tvm.transform.Sequential([
         relay.transform.InferType(),
         relay.transform.FoldConstant(),
         relay.transform.PrintIR(),
diff --git a/docs/_sources/frontend/tensorflow.rst.txt b/docs/_sources/frontend/tensorflow.rst.txt
index 45db9e4..a158db9 100644
--- a/docs/_sources/frontend/tensorflow.rst.txt
+++ b/docs/_sources/frontend/tensorflow.rst.txt
@@ -162,6 +162,7 @@ Supported Ops
 - Identity
 - IsFinite
 - IsInf
+- IsNan
 - LeakyRelu
 - LeftShift
 - Less
diff --git a/docs/_sources/tutorials/autotvm/sg_execution_times.rst.txt b/docs/_sources/tutorials/autotvm/sg_execution_times.rst.txt
index 0517a22..d844268 100644
--- a/docs/_sources/tutorials/autotvm/sg_execution_times.rst.txt
+++ b/docs/_sources/tutorials/autotvm/sg_execution_times.rst.txt
@@ -5,11 +5,11 @@
 
 Computation times
 =================
-**00:49.203** total execution time for **tutorials_autotvm** files:
-
-- **00:27.517**: :ref:`sphx_glr_tutorials_autotvm_tune_simple_template.py` (``tune_simple_template.py``)
-- **00:21.065**: :ref:`sphx_glr_tutorials_autotvm_tune_conv2d_cuda.py` (``tune_conv2d_cuda.py``)
-- **00:00.192**: :ref:`sphx_glr_tutorials_autotvm_tune_relay_x86.py` (``tune_relay_x86.py``)
-- **00:00.145**: :ref:`sphx_glr_tutorials_autotvm_tune_relay_cuda.py` (``tune_relay_cuda.py``)
-- **00:00.143**: :ref:`sphx_glr_tutorials_autotvm_tune_relay_arm.py` (``tune_relay_arm.py``)
-- **00:00.141**: :ref:`sphx_glr_tutorials_autotvm_tune_relay_mobile_gpu.py` (``tune_relay_mobile_gpu.py``)
+**00:47.538** total execution time for **tutorials_autotvm** files:
+
+- **00:26.480**: :ref:`sphx_glr_tutorials_autotvm_tune_simple_template.py` (``tune_simple_template.py``)
+- **00:20.478**: :ref:`sphx_glr_tutorials_autotvm_tune_conv2d_cuda.py` (``tune_conv2d_cuda.py``)
+- **00:00.162**: :ref:`sphx_glr_tutorials_autotvm_tune_relay_x86.py` (``tune_relay_x86.py``)
+- **00:00.140**: :ref:`sphx_glr_tutorials_autotvm_tune_relay_cuda.py` (``tune_relay_cuda.py``)
+- **00:00.139**: :ref:`sphx_glr_tutorials_autotvm_tune_relay_arm.py` (``tune_relay_arm.py``)
+- **00:00.139**: :ref:`sphx_glr_tutorials_autotvm_tune_relay_mobile_gpu.py` (``tune_relay_mobile_gpu.py``)
diff --git a/docs/_sources/tutorials/autotvm/tune_conv2d_cuda.rst.txt b/docs/_sources/tutorials/autotvm/tune_conv2d_cuda.rst.txt
index 09df187..d50b90c 100644
--- a/docs/_sources/tutorials/autotvm/tune_conv2d_cuda.rst.txt
+++ b/docs/_sources/tutorials/autotvm/tune_conv2d_cuda.rst.txt
@@ -234,26 +234,26 @@ for this template
        7 unroll_explicit: OtherOption([0, 1]) len=2
     )
     Get devices for measurement successfully!
-    No: 1   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f5a12489a81]\n  [bt] (0) /workspace/build/libtvm.so(+0xcfc10b) [0x7f5a1248610b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
-    No: 2   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f5a12489a81]\n  [bt] (0) /workspace/build/libtvm.so(+0xcfc10b) [0x7f5a1248610b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
-    No: 3   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f5a12489a81]\n  [bt] (0) /workspace/build/libtvm.so(+0xcfc10b) [0x7f5a1248610b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
-    No: 4   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f5a12489a81]\n  [bt] (0) /workspace/build/libtvm.so(+0xcfc10b) [0x7f5a1248610b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
-    No: 5   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f5a12489a81]\n  [bt] (0) /workspace/build/libtvm.so(+0xcfc10b) [0x7f5a1248610b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
-    No: 6   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f5a12489a81]\n  [bt] (0) /workspace/build/libtvm.so(+0xcfc10b) [0x7f5a1248610b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
-    No: 7   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f5a12489a81]\n  [bt] (0) /workspace/build/libtvm.so(+0xcfc10b) [0x7f5a1248610b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
-    No: 8   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f5a12489a81]\n  [bt] (0) /workspace/build/libtvm.so(+0xcfc10b) [0x7f5a1248610b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
-    No: 9   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f5a12489a81]\n  [bt] (0) /workspace/build/libtvm.so(+0xcfc10b) [0x7f5a1248610b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
-    No: 10  GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f5a12489a81]\n  [bt] (0) /workspace/build/libtvm.so(+0xcfc10b) [0x7f5a1248610b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
-    No: 11  GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f5a12489a81]\n  [bt] (0) /workspace/build/libtvm.so(+0xcfc10b) [0x7f5a1248610b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
-    No: 12  GFLOPS: 56.87/56.87     result: MeasureResult(costs=(0.00407087504,), error_no=0, all_cost=1.6911427974700928, timestamp=1586715755.3946226)    [('tile_f', [-1, 1, 1, 1]), ('tile_y', [-1, 1, 1, 7]), ('tile_x', [-1, 1, 1, 1]), ('tile_rc', [-1, 16, 1]), ('tile_ry', [-1, 1, 3]), ('tile_rx', [-1, 1, 3]), ('auto_unroll_max_step', 512), ('unroll_explicit', 1)],None,8533140
-    No: 13  GFLOPS: 0.00/56.87      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f5a12489a81]\n  [bt] (0) /workspace/build/libtvm.so(+0xcfc10b) [0x7f5a1248610b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
-    No: 14  GFLOPS: 0.00/56.87      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f5a12489a81]\n  [bt] (0) /workspace/build/libtvm.so(+0xcfc10b) [0x7f5a1248610b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
-    No: 15  GFLOPS: 0.00/56.87      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f5a12489a81]\n  [bt] (0) /workspace/build/libtvm.so(+0xcfc10b) [0x7f5a1248610b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
-    No: 16  GFLOPS: 0.00/56.87      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f5a12489a81]\n  [bt] (0) /workspace/build/libtvm.so(+0xcfc10b) [0x7f5a1248610b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
-    No: 17  GFLOPS: 0.00/56.87      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f5a12489a81]\n  [bt] (0) /workspace/build/libtvm.so(+0xcfc10b) [0x7f5a1248610b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
-    No: 18  GFLOPS: 0.00/56.87      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f5a12489a81]\n  [bt] (0) /workspace/build/libtvm.so(+0xcfc10b) [0x7f5a1248610b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
-    No: 19  GFLOPS: 512.08/512.08   result: MeasureResult(costs=(0.00045207791512915133,), error_no=0, all_cost=2.182642698287964, timestamp=1586715759.0644317)    [('tile_f', [-1, 2, 1, 1]), ('tile_y', [-1, 1, 7, 1]), ('tile_x', [-1, 1, 7, 1]), ('tile_rc', [-1, 32, 1]), ('tile_ry', [-1, 1, 3]), ('tile_rx', [-1, 3, 1]), ('auto_unroll_max_step', 1500), ('unroll_explicit', 1)],None,9699801
-    No: 20  GFLOPS: 4.97/512.08     result: MeasureResult(costs=(0.0466157565,), error_no=0, all_cost=1.9102404117584229, timestamp=1586715760.1168633)     [('tile_f', [-1, 2, 1, 16]), ('tile_y', [-1, 1, 1, 1]), ('tile_x', [-1, 7, 1, 1]), ('tile_rc', [-1, 2, 32]), ('tile_ry', [-1, 1, 3]), ('tile_rx', [-1, 1, 1]), ('auto_unroll_max_step', 512), ('unroll_explicit', 1)],None,7502165
+    No: 1   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f43bf236f01]\n  [bt] (0) /workspace/build/libtvm.so(+0xd0258b) [0x7f43bf23358b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
+    No: 2   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f43bf236f01]\n  [bt] (0) /workspace/build/libtvm.so(+0xd0258b) [0x7f43bf23358b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
+    No: 3   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f43bf236f01]\n  [bt] (0) /workspace/build/libtvm.so(+0xd0258b) [0x7f43bf23358b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
+    No: 4   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f43bf236f01]\n  [bt] (0) /workspace/build/libtvm.so(+0xd0258b) [0x7f43bf23358b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
+    No: 5   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f43bf236f01]\n  [bt] (0) /workspace/build/libtvm.so(+0xd0258b) [0x7f43bf23358b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
+    No: 6   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f43bf236f01]\n  [bt] (0) /workspace/build/libtvm.so(+0xd0258b) [0x7f43bf23358b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
+    No: 7   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f43bf236f01]\n  [bt] (0) /workspace/build/libtvm.so(+0xd0258b) [0x7f43bf23358b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
+    No: 8   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f43bf236f01]\n  [bt] (0) /workspace/build/libtvm.so(+0xd0258b) [0x7f43bf23358b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
+    No: 9   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f43bf236f01]\n  [bt] (0) /workspace/build/libtvm.so(+0xd0258b) [0x7f43bf23358b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
+    No: 10  GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f43bf236f01]\n  [bt] (0) /workspace/build/libtvm.so(+0xd0258b) [0x7f43bf23358b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
+    No: 11  GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f43bf236f01]\n  [bt] (0) /workspace/build/libtvm.so(+0xd0258b) [0x7f43bf23358b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
+    No: 12  GFLOPS: 57.86/57.86     result: MeasureResult(costs=(0.00400104356,), error_no=0, all_cost=1.4397563934326172, timestamp=1586914175.9626982)    [('tile_f', [-1, 1, 1, 1]), ('tile_y', [-1, 1, 1, 7]), ('tile_x', [-1, 1, 1, 1]), ('tile_rc', [-1, 16, 1]), ('tile_ry', [-1, 1, 3]), ('tile_rx', [-1, 1, 3]), ('auto_unroll_max_step', 512), ('unroll_explicit', 1)],None,8533140
+    No: 13  GFLOPS: 0.00/57.86      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f43bf236f01]\n  [bt] (0) /workspace/build/libtvm.so(+0xd0258b) [0x7f43bf23358b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
+    No: 14  GFLOPS: 0.00/57.86      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f43bf236f01]\n  [bt] (0) /workspace/build/libtvm.so(+0xd0258b) [0x7f43bf23358b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
+    No: 15  GFLOPS: 0.00/57.86      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f43bf236f01]\n  [bt] (0) /workspace/build/libtvm.so(+0xd0258b) [0x7f43bf23358b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
+    No: 16  GFLOPS: 0.00/57.86      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f43bf236f01]\n  [bt] (0) /workspace/build/libtvm.so(+0xd0258b) [0x7f43bf23358b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
+    No: 17  GFLOPS: 0.00/57.86      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f43bf236f01]\n  [bt] (0) /workspace/build/libtvm.so(+0xd0258b) [0x7f43bf23358b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
+    No: 18  GFLOPS: 0.00/57.86      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (1) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f43bf236f01]\n  [bt] (0) /workspace/build/libtvm.so(+0xd0258b) [0x7f43bf23358b]\n  File "tvm/_ffi/_cython/./packed_func.pxi", line 55, in tvm._ffi._cy3.core.tvm_callback\n  File "/workspace/docs/../python/tvm/autotvm/measure/measure_methods.py", line 621, in verify_pass\n    raise InstantiationError("Skipped b [...]
+    No: 19  GFLOPS: 780.58/780.58   result: MeasureResult(costs=(0.00029657477777777775,), error_no=0, all_cost=1.8615612983703613, timestamp=1586914179.6813614)   [('tile_f', [-1, 2, 1, 1]), ('tile_y', [-1, 1, 7, 1]), ('tile_x', [-1, 1, 7, 1]), ('tile_rc', [-1, 32, 1]), ('tile_ry', [-1, 1, 3]), ('tile_rx', [-1, 3, 1]), ('auto_unroll_max_step', 1500), ('unroll_explicit', 1)],None,9699801
+    No: 20  GFLOPS: 6.97/780.58     result: MeasureResult(costs=(0.03322433125,), error_no=0, all_cost=1.5661084651947021, timestamp=1586914180.5354848)    [('tile_f', [-1, 2, 1, 16]), ('tile_y', [-1, 1, 1, 1]), ('tile_x', [-1, 7, 1, 1]), ('tile_rc', [-1, 2, 32]), ('tile_ry', [-1, 1, 3]), ('tile_rx', [-1, 1, 1]), ('auto_unroll_max_step', 512), ('unroll_explicit', 1)],None,7502165
 
 
 
@@ -307,7 +307,7 @@ and measure running time.
 
     Best config:
     [('tile_f', [-1, 2, 1, 1]), ('tile_y', [-1, 1, 7, 1]), ('tile_x', [-1, 1, 7, 1]), ('tile_rc', [-1, 32, 1]), ('tile_ry', [-1, 1, 3]), ('tile_rx', [-1, 3, 1]), ('auto_unroll_max_step', 1500), ('unroll_explicit', 1)],None,9699801
-    Time cost of this operator: 0.000735
+    Time cost of this operator: 0.000393
 
 
 
diff --git a/docs/_sources/tutorials/autotvm/tune_simple_template.rst.txt b/docs/_sources/tutorials/autotvm/tune_simple_template.rst.txt
index cad45fd..259bad6 100644
--- a/docs/_sources/tutorials/autotvm/tune_simple_template.rst.txt
+++ b/docs/_sources/tutorials/autotvm/tune_simple_template.rst.txt
@@ -361,16 +361,16 @@ used to get the best config later.
  .. code-block:: none
 
     Get devices for measurement successfully!
-    No: 1   GFLOPS: 3.70/3.70       result: MeasureResult(costs=(0.0726390902,), error_no=0, all_cost=1.509979248046875, timestamp=1586715725.159796)       [('tile_y', [-1, 8]), ('tile_x', [-1, 8])],None,33
-    No: 2   GFLOPS: 2.07/3.70       result: MeasureResult(costs=(0.1293902854,), error_no=0, all_cost=2.3905489444732666, timestamp=1586715727.6000252)     [('tile_y', [-1, 8]), ('tile_x', [-1, 2])],None,13
-    No: 3   GFLOPS: 10.87/10.87     result: MeasureResult(costs=(0.0246902404,), error_no=0, all_cost=1.1836769580841064, timestamp=1586715728.3712142)     [('tile_y', [-1, 16]), ('tile_x', [-1, 128])],None,74
-    No: 4   GFLOPS: 9.34/10.87      result: MeasureResult(costs=(0.0287529132,), error_no=0, all_cost=0.9011032581329346, timestamp=1586715729.1978703)     [('tile_y', [-1, 16]), ('tile_x', [-1, 32])],None,54
-    No: 5   GFLOPS: 3.21/10.87      result: MeasureResult(costs=(0.0835949164,), error_no=0, all_cost=1.7742857933044434, timestamp=1586715730.9071991)     [('tile_y', [-1, 128]), ('tile_x', [-1, 8])],None,37
-    No: 6   GFLOPS: 3.36/10.87      result: MeasureResult(costs=(0.07994333,), error_no=0, all_cost=1.692866563796997, timestamp=1586715732.5534587)        [('tile_y', [-1, 64]), ('tile_x', [-1, 8])],None,36
-    No: 7   GFLOPS: 9.11/10.87      result: MeasureResult(costs=(0.029475111999999998,), error_no=0, all_cost=0.9065210819244385, timestamp=1586715733.3981507)     [('tile_y', [-1, 1]), ('tile_x', [-1, 128])],None,70
-    No: 8   GFLOPS: 14.53/14.53     result: MeasureResult(costs=(0.0184796516,), error_no=0, all_cost=0.596898078918457, timestamp=1586715734.0661497)      [('tile_y', [-1, 4]), ('tile_x', [-1, 512])],None,92
-    No: 9   GFLOPS: 0.86/14.53      result: MeasureResult(costs=(0.3138868858,), error_no=0, all_cost=5.292659044265747, timestamp=1586715739.8294945)      [('tile_y', [-1, 512]), ('tile_x', [-1, 2])],None,19
-    No: 10  GFLOPS: 0.48/14.53      result: MeasureResult(costs=(0.5537147096,), error_no=0, all_cost=9.120985984802246, timestamp=1586715749.0552027)      [('tile_y', [-1, 512]), ('tile_x', [-1, 1])],None,9
+    No: 1   GFLOPS: 7.07/7.07       result: MeasureResult(costs=(0.0379557924,), error_no=0, all_cost=0.9605300426483154, timestamp=1586914145.5969672)     [('tile_y', [-1, 8]), ('tile_x', [-1, 8])],None,33
+    No: 2   GFLOPS: 2.29/7.07       result: MeasureResult(costs=(0.117000299,), error_no=0, all_cost=2.1433587074279785, timestamp=1586914147.8018377)      [('tile_y', [-1, 8]), ('tile_x', [-1, 2])],None,13
+    No: 3   GFLOPS: 7.27/7.27       result: MeasureResult(costs=(0.0369386566,), error_no=0, all_cost=1.1326470375061035, timestamp=1586914148.7241485)     [('tile_y', [-1, 16]), ('tile_x', [-1, 128])],None,74
+    No: 4   GFLOPS: 4.52/7.27       result: MeasureResult(costs=(0.0593773454,), error_no=0, all_cost=1.3157463073730469, timestamp=1586914150.0114)        [('tile_y', [-1, 16]), ('tile_x', [-1, 32])],None,54
+    No: 5   GFLOPS: 6.19/7.27       result: MeasureResult(costs=(0.043364872799999996,), error_no=0, all_cost=0.976433515548706, timestamp=1586914151.0318248)      [('tile_y', [-1, 128]), ('tile_x', [-1, 8])],None,37
+    No: 6   GFLOPS: 6.44/7.27       result: MeasureResult(costs=(0.041681231,), error_no=0, all_cost=1.0092697143554688, timestamp=1586914152.0299819)      [('tile_y', [-1, 64]), ('tile_x', [-1, 8])],None,36
+    No: 7   GFLOPS: 26.51/26.51     result: MeasureResult(costs=(0.0101250118,), error_no=0, all_cost=0.5193133354187012, timestamp=1586914152.5232635)     [('tile_y', [-1, 1]), ('tile_x', [-1, 128])],None,70
+    No: 8   GFLOPS: 20.75/26.51     result: MeasureResult(costs=(0.012933676199999999,), error_no=0, all_cost=0.5106756687164307, timestamp=1586914153.071874)      [('tile_y', [-1, 4]), ('tile_x', [-1, 512])],None,92
+    No: 9   GFLOPS: 0.84/26.51      result: MeasureResult(costs=(0.319964087,), error_no=0, all_cost=5.368131399154663, timestamp=1586914158.5233579)       [('tile_y', [-1, 512]), ('tile_x', [-1, 2])],None,19
+    No: 10  GFLOPS: 0.00/26.51      result: MeasureResult(costs=(RuntimeError('Traceback (most recent call last):\n  [bt] (3) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f43bf236f01]\n  [bt] (2) /workspace/build/libtvm.so(std::_Function_handler<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*), tvm::runtime::RPCModuleNode::WrapRemote(void*)::{lambda(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)#1}>::_M_invoke(std::_Any_data const&, tvm::runtime::TVMArgs&&, tvm::runtime:: [...]
 
 
 
diff --git a/docs/_sources/tutorials/cross_compilation_and_rpc.rst.txt b/docs/_sources/tutorials/cross_compilation_and_rpc.rst.txt
index 5a0963f..e3f17e7 100644
--- a/docs/_sources/tutorials/cross_compilation_and_rpc.rst.txt
+++ b/docs/_sources/tutorials/cross_compilation_and_rpc.rst.txt
@@ -235,7 +235,7 @@ device and returns the measured cost. Network overhead is excluded.
 
  .. code-block:: none
 
-    1.22e-07 secs/op
+    1.683e-07 secs/op
 
 
 
diff --git a/docs/_sources/tutorials/dev/relay_pass_infra.rst.txt b/docs/_sources/tutorials/dev/relay_pass_infra.rst.txt
index 087e3f2..2cde6d2 100644
--- a/docs/_sources/tutorials/dev/relay_pass_infra.rst.txt
+++ b/docs/_sources/tutorials/dev/relay_pass_infra.rst.txt
@@ -20,7 +20,7 @@ introduced an infrastructure to manage the optimization passes.
 The optimizations of a Relay program could be applied at various granularity,
 namely function-level and module-level using :py:class:`tvm.relay.transform.FunctionPass`
 and py:class:`tvm.relay.transform.ModulePass`
-respectively. Or users can rely on py:class:`tvm.relay.transform.Sequential` to apply a sequence of passes
+respectively. Or users can rely on py:class:`tvm.transform.Sequential` to apply a sequence of passes
 on a Relay program where the dependencies between passes can be resolved by the
 pass infra. For more details about each type of these passes, please refer to
 the :ref:`relay-pass-infra`
@@ -232,26 +232,26 @@ to fuse operators that were fusable if :py:func:`relay.transform.ToANormalForm`
 fusion, as this pass generates let bindings for each expression to
 canonicalize a Relay program.
 
-Relay, hence, provides :py:class:`tvm.relay.transform.Sequential` to alleviate developers from handling
+Relay, hence, provides :py:class:`tvm.transform.Sequential` to alleviate developers from handling
 these issues explicitly by specifying the required passes of each pass and
 packing them as a whole to execute. For example, the same passes can now be
-applied using the sequential style as the following. :py:class:`tvm.relay.transform.Sequential` is
+applied using the sequential style as the following. :py:class:`tvm.transform.Sequential` is
 similiar to `torch.nn.sequential <https://pytorch.org/docs/stable/nn.html#torch.nn.Sequential>`_
 and `mxnet.gluon.block <https://mxnet.incubator.apache.org/api/python/docs/_modules/mxnet/gluon/block.html>`_.
 For example, `torch.nn.sequential` is used to contain a sequence of PyTorch
 `Modules` that will be added to build a network. It focuses on the network
-layers. Instead, the :py:class:`tvm.relay.transform.Sequential` in our pass infra works on the optimizing
+layers. Instead, the :py:class:`tvm.transform.Sequential` in our pass infra works on the optimizing
 pass.
 
 
 .. code-block:: default
 
 
-    # Now let's execute some passes through :py:class:`tvm.relay.transform.Sequential`
+    # Now let's execute some passes through :py:class:`tvm.transform.Sequential`
     f = example()
     mod = tvm.IRModule.from_expr(f)
     # Glob the interested passes.
-    seq = relay.transform.Sequential([relay.transform.FoldConstant(),
+    seq = tvm.transform.Sequential([relay.transform.FoldConstant(),
                                       relay.transform.EliminateCommonSubexpr(),
                                       relay.transform.FuseOps(fuse_opt_level=2)])
     mod1 = seq(mod)
@@ -286,7 +286,7 @@ From the transformed Relay program, we can see that there are still two
 identical addition operations. This is because `EliminateCommonSubexpr`
 was not actually performed. The reason is because only the passes that have
 optimization level less or equal to 2 will be executed by default under
-:py:class:`tvm.relay.transform.Sequential`. The pass infra,
+:py:class:`tvm.transform.Sequential`. The pass infra,
 however, provides a configuration interface
 for users to customize the optimization level that they want to execute.
 
@@ -375,7 +375,7 @@ alteration pass falls in such category.
         mod4 = seq(mod)
     print(mod4)
 
-    seq1 = relay.transform.Sequential([relay.transform.AlterOpLayout()])
+    seq1 = tvm.transform.Sequential([relay.transform.AlterOpLayout()])
     with relay.build_config(opt_level=3):
         with tvm.target.create("llvm"):
             mod5 = seq1(mod)
@@ -497,11 +497,11 @@ them.
 
     f = example()
     mod = tvm.IRModule.from_expr(f)
-    seq = relay.transform.Sequential([relay.transform.FoldConstant(),
-                                      relay.transform.PrintIR(False),
-                                      relay.transform.EliminateCommonSubexpr(),
-                                      relay.transform.FuseOps(),
-                                      relay.transform.PrintIR(False)])
+    seq = tvm.transform.Sequential([relay.transform.FoldConstant(),
+                                    tvm.transform.PrintIR(),
+                                    relay.transform.EliminateCommonSubexpr(),
+                                    relay.transform.FuseOps(),
+                                    tvm.transform.PrintIR()])
     with relay.build_config(opt_level=3):
         mod = seq(mod)
 
diff --git a/docs/_sources/tutorials/dev/sg_execution_times.rst.txt b/docs/_sources/tutorials/dev/sg_execution_times.rst.txt
index 47b8bba..8435590 100644
--- a/docs/_sources/tutorials/dev/sg_execution_times.rst.txt
+++ b/docs/_sources/tutorials/dev/sg_execution_times.rst.txt
@@ -5,7 +5,7 @@
 
 Computation times
 =================
-**00:00.490** total execution time for **tutorials_dev** files:
+**00:00.450** total execution time for **tutorials_dev** files:
 
-- **00:00.348**: :ref:`sphx_glr_tutorials_dev_relay_pass_infra.py` (``relay_pass_infra.py``)
-- **00:00.142**: :ref:`sphx_glr_tutorials_dev_low_level_custom_pass.py` (``low_level_custom_pass.py``)
+- **00:00.311**: :ref:`sphx_glr_tutorials_dev_relay_pass_infra.py` (``relay_pass_infra.py``)
+- **00:00.139**: :ref:`sphx_glr_tutorials_dev_low_level_custom_pass.py` (``low_level_custom_pass.py``)
diff --git a/docs/_sources/tutorials/frontend/deploy_model_on_android.rst.txt b/docs/_sources/tutorials/frontend/deploy_model_on_android.rst.txt
index 5ea0b66..2aa5c09 100644
--- a/docs/_sources/tutorials/frontend/deploy_model_on_android.rst.txt
+++ b/docs/_sources/tutorials/frontend/deploy_model_on_android.rst.txt
@@ -415,7 +415,7 @@ Execute on TVM
 
     TVM prediction top-1: tiger cat
     Evaluate inference time cost...
-    Mean inference time (std dev): 3.77 ms (0.12 ms)
+    Mean inference time (std dev): 2.73 ms (0.03 ms)
 
 
 
diff --git a/docs/_sources/tutorials/frontend/deploy_ssd_gluoncv.rst.txt b/docs/_sources/tutorials/frontend/deploy_ssd_gluoncv.rst.txt
index df25838..242a3ce 100644
--- a/docs/_sources/tutorials/frontend/deploy_ssd_gluoncv.rst.txt
+++ b/docs/_sources/tutorials/frontend/deploy_ssd_gluoncv.rst.txt
@@ -169,6 +169,45 @@ Create TVM runtime and do inference
 
  .. code-block:: none
 
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 3, 512, 512), 'float32'), ('TENSOR', (64, 3, 7, 7), 'float32'), (2, 2), (3, 3, 3, 3), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 64, 128, 128), 'float32'), ('TENSOR', (64, 64, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 64, 128, 128), 'float32'), ('TENSOR', (64, 64, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 64, 128, 128), 'float32'), ('TENSOR', (256, 64, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 128, 128), 'float32'), ('TENSOR', (64, 256, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 128, 128), 'float32'), ('TENSOR', (128, 256, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 128, 64, 64), 'float32'), ('TENSOR', (128, 128, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 128, 64, 64), 'float32'), ('TENSOR', (512, 128, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 128, 128), 'float32'), ('TENSOR', (512, 256, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 64, 64), 'float32'), ('TENSOR', (128, 512, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 64, 64), 'float32'), ('TENSOR', (256, 512, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 32, 32), 'float32'), ('TENSOR', (256, 256, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 32, 32), 'float32'), ('TENSOR', (1024, 256, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 64, 64), 'float32'), ('TENSOR', (1024, 512, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 1024, 32, 32), 'float32'), ('TENSOR', (256, 1024, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 1024, 32, 32), 'float32'), ('TENSOR', (84, 1024, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 1024, 32, 32), 'float32'), ('TENSOR', (512, 1024, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 16, 16), 'float32'), ('TENSOR', (512, 512, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 16, 16), 'float32'), ('TENSOR', (2048, 512, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 1024, 32, 32), 'float32'), ('TENSOR', (2048, 1024, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 2048, 16, 16), 'float32'), ('TENSOR', (512, 2048, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 2048, 16, 16), 'float32'), ('TENSOR', (126, 2048, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 16, 16), 'float32'), ('TENSOR', (512, 512, 3, 3), 'float32'), (2, 2), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 8, 8), 'float32'), ('TENSOR', (126, 512, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 8, 8), 'float32'), ('TENSOR', (512, 512, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 8, 8), 'float32'), ('TENSOR', (512, 512, 3, 3), 'float32'), (2, 2), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 4, 4), 'float32'), ('TENSOR', (126, 512, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 4, 4), 'float32'), ('TENSOR', (256, 512, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 4, 4), 'float32'), ('TENSOR', (256, 256, 3, 3), 'float32'), (2, 2), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 2, 2), 'float32'), ('TENSOR', (84, 256, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 2, 2), 'float32'), ('TENSOR', (256, 256, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 2, 2), 'float32'), ('TENSOR', (256, 256, 3, 3), 'float32'), (2, 2), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 1, 1), 'float32'), ('TENSOR', (84, 256, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 1024, 32, 32), 'float32'), ('TENSOR', (16, 1024, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 2048, 16, 16), 'float32'), ('TENSOR', (24, 2048, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 8, 8), 'float32'), ('TENSOR', (24, 512, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 4, 4), 'float32'), ('TENSOR', (24, 512, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 2, 2), 'float32'), ('TENSOR', (16, 256, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 1, 1), 'float32'), ('TENSOR', (16, 256, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
     Cannot find config for target=cuda, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 3, 512, 512), 'float32'), ('TENSOR', (64, 3, 7, 7), 'float32'), (2, 2), (3, 3, 3, 3), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
     Cannot find config for target=cuda, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 64, 128, 128), 'float32'), ('TENSOR', (64, 64, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
     Cannot find config for target=cuda, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 64, 128, 128), 'float32'), ('TENSOR', (64, 64, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
@@ -224,45 +263,6 @@ Create TVM runtime and do inference
     Cannot find config for target=cuda, workload=('conv2d_nchw_winograd.cuda', ('TENSOR', (1, 256, 2, 2), 'float32'), ('TENSOR', (16, 256, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
     Cannot find config for target=cuda, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 256, 1, 1), 'float32'), ('TENSOR', (16, 256, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
     Cannot find config for target=cuda, workload=('conv2d_nchw_winograd.cuda', ('TENSOR', (1, 256, 1, 1), 'float32'), ('TENSOR', (16, 256, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 3, 512, 512), 'float32'), ('TENSOR', (64, 3, 7, 7), 'float32'), (2, 2), (3, 3, 3, 3), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 64, 128, 128), 'float32'), ('TENSOR', (64, 64, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 64, 128, 128), 'float32'), ('TENSOR', (64, 64, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 64, 128, 128), 'float32'), ('TENSOR', (256, 64, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 128, 128), 'float32'), ('TENSOR', (64, 256, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 128, 128), 'float32'), ('TENSOR', (128, 256, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 128, 64, 64), 'float32'), ('TENSOR', (128, 128, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 128, 64, 64), 'float32'), ('TENSOR', (512, 128, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 128, 128), 'float32'), ('TENSOR', (512, 256, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 64, 64), 'float32'), ('TENSOR', (128, 512, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 64, 64), 'float32'), ('TENSOR', (256, 512, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 32, 32), 'float32'), ('TENSOR', (256, 256, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 32, 32), 'float32'), ('TENSOR', (1024, 256, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 64, 64), 'float32'), ('TENSOR', (1024, 512, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 1024, 32, 32), 'float32'), ('TENSOR', (256, 1024, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 1024, 32, 32), 'float32'), ('TENSOR', (84, 1024, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 1024, 32, 32), 'float32'), ('TENSOR', (512, 1024, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 16, 16), 'float32'), ('TENSOR', (512, 512, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 16, 16), 'float32'), ('TENSOR', (2048, 512, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 1024, 32, 32), 'float32'), ('TENSOR', (2048, 1024, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 2048, 16, 16), 'float32'), ('TENSOR', (512, 2048, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 2048, 16, 16), 'float32'), ('TENSOR', (126, 2048, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 16, 16), 'float32'), ('TENSOR', (512, 512, 3, 3), 'float32'), (2, 2), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 8, 8), 'float32'), ('TENSOR', (126, 512, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 8, 8), 'float32'), ('TENSOR', (512, 512, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 8, 8), 'float32'), ('TENSOR', (512, 512, 3, 3), 'float32'), (2, 2), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 4, 4), 'float32'), ('TENSOR', (126, 512, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 4, 4), 'float32'), ('TENSOR', (256, 512, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 4, 4), 'float32'), ('TENSOR', (256, 256, 3, 3), 'float32'), (2, 2), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 2, 2), 'float32'), ('TENSOR', (84, 256, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 2, 2), 'float32'), ('TENSOR', (256, 256, 1, 1), 'float32'), (1, 1), (0, 0, 0, 0), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 2, 2), 'float32'), ('TENSOR', (256, 256, 3, 3), 'float32'), (2, 2), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 1, 1), 'float32'), ('TENSOR', (84, 256, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 1024, 32, 32), 'float32'), ('TENSOR', (16, 1024, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 2048, 16, 16), 'float32'), ('TENSOR', (24, 2048, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 8, 8), 'float32'), ('TENSOR', (24, 512, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 512, 4, 4), 'float32'), ('TENSOR', (24, 512, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 2, 2), 'float32'), ('TENSOR', (16, 256, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 256, 1, 1), 'float32'), ('TENSOR', (16, 256, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
 
 
 
diff --git a/docs/_sources/tutorials/frontend/from_onnx.rst.txt b/docs/_sources/tutorials/frontend/from_onnx.rst.txt
index 2ac00c8..0c8a0f9 100644
--- a/docs/_sources/tutorials/frontend/from_onnx.rst.txt
+++ b/docs/_sources/tutorials/frontend/from_onnx.rst.txt
@@ -151,7 +151,7 @@ Execute on TVM
 
  .. code-block:: none
 
-
    ...47%, 0.01 MB, 41 KB/s, 0 seconds passed
    ...94%, 0.02 MB, 79 KB/s, 0 seconds passed
    ...100%, 0.02 MB, 119 KB/s, 0 seconds passed
+
    ...47%, 0.01 MB, 41 KB/s, 0 seconds passed
    ...94%, 0.02 MB, 83 KB/s, 0 seconds passed
    ...100%, 0.02 MB, 124 KB/s, 0 seconds passed
     Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 32, 224, 224), 'float32'), ('TENSOR', (9, 32, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
     Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 64, 224, 224), 'float32'), ('TENSOR', (32, 64, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
     Cannot find config for target=llvm, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 1, 224, 224), 'float32'), ('TENSOR', (64, 1, 5, 5), 'float32'), (1, 1), (2, 2, 2, 2), (1, 1), 'NCHW', 'NCHW', 'float32'). A fallback configuration is used, which may bring great performance regression.
diff --git a/docs/_sources/tutorials/frontend/from_pytorch.rst.txt b/docs/_sources/tutorials/frontend/from_pytorch.rst.txt
index b3b8697..3a90a70 100644
--- a/docs/_sources/tutorials/frontend/from_pytorch.rst.txt
+++ b/docs/_sources/tutorials/frontend/from_pytorch.rst.txt
@@ -128,6 +128,15 @@ Convert PyTorch graph to Relay graph.
 
 
 
+.. rst-class:: sphx-glr-script-out
+
+ Out:
+
+ .. code-block:: none
+
+    ANTLR runtime and generated code versions disagree: 4.8!=4.7.2
+    ANTLR runtime and generated code versions disagree: 4.8!=4.7.2
+
 
 
 Relay Build
diff --git a/docs/_sources/tutorials/frontend/sg_execution_times.rst.txt b/docs/_sources/tutorials/frontend/sg_execution_times.rst.txt
index f2ab478..930a656 100644
--- a/docs/_sources/tutorials/frontend/sg_execution_times.rst.txt
+++ b/docs/_sources/tutorials/frontend/sg_execution_times.rst.txt
@@ -5,20 +5,20 @@
 
 Computation times
 =================
-**03:29.978** total execution time for **tutorials_frontend** files:
+**02:46.309** total execution time for **tutorials_frontend** files:
 
-- **00:28.508**: :ref:`sphx_glr_tutorials_frontend_deploy_ssd_gluoncv.py` (``deploy_ssd_gluoncv.py``)
-- **00:25.585**: :ref:`sphx_glr_tutorials_frontend_deploy_quantized.py` (``deploy_quantized.py``)
-- **00:25.001**: :ref:`sphx_glr_tutorials_frontend_from_tflite.py` (``from_tflite.py``)
-- **00:24.408**: :ref:`sphx_glr_tutorials_frontend_from_tensorflow.py` (``from_tensorflow.py``)
-- **00:19.450**: :ref:`sphx_glr_tutorials_frontend_from_darknet.py` (``from_darknet.py``)
-- **00:18.118**: :ref:`sphx_glr_tutorials_frontend_deploy_model_on_android.py` (``deploy_model_on_android.py``)
-- **00:17.282**: :ref:`sphx_glr_tutorials_frontend_from_keras.py` (``from_keras.py``)
-- **00:13.611**: :ref:`sphx_glr_tutorials_frontend_from_caffe2.py` (``from_caffe2.py``)
-- **00:08.364**: :ref:`sphx_glr_tutorials_frontend_deploy_model_on_rasp.py` (``deploy_model_on_rasp.py``)
-- **00:07.265**: :ref:`sphx_glr_tutorials_frontend_from_pytorch.py` (``from_pytorch.py``)
-- **00:06.705**: :ref:`sphx_glr_tutorials_frontend_from_coreml.py` (``from_coreml.py``)
-- **00:05.867**: :ref:`sphx_glr_tutorials_frontend_from_mxnet.py` (``from_mxnet.py``)
-- **00:05.391**: :ref:`sphx_glr_tutorials_frontend_build_gcn.py` (``build_gcn.py``)
-- **00:02.711**: :ref:`sphx_glr_tutorials_frontend_using_external_lib.py` (``using_external_lib.py``)
-- **00:01.710**: :ref:`sphx_glr_tutorials_frontend_from_onnx.py` (``from_onnx.py``)
+- **00:21.903**: :ref:`sphx_glr_tutorials_frontend_deploy_ssd_gluoncv.py` (``deploy_ssd_gluoncv.py``)
+- **00:19.754**: :ref:`sphx_glr_tutorials_frontend_from_tflite.py` (``from_tflite.py``)
+- **00:17.764**: :ref:`sphx_glr_tutorials_frontend_from_tensorflow.py` (``from_tensorflow.py``)
+- **00:17.623**: :ref:`sphx_glr_tutorials_frontend_deploy_quantized.py` (``deploy_quantized.py``)
+- **00:15.681**: :ref:`sphx_glr_tutorials_frontend_from_darknet.py` (``from_darknet.py``)
+- **00:15.601**: :ref:`sphx_glr_tutorials_frontend_deploy_model_on_android.py` (``deploy_model_on_android.py``)
+- **00:13.258**: :ref:`sphx_glr_tutorials_frontend_from_keras.py` (``from_keras.py``)
+- **00:11.054**: :ref:`sphx_glr_tutorials_frontend_from_caffe2.py` (``from_caffe2.py``)
+- **00:09.056**: :ref:`sphx_glr_tutorials_frontend_from_pytorch.py` (``from_pytorch.py``)
+- **00:06.607**: :ref:`sphx_glr_tutorials_frontend_deploy_model_on_rasp.py` (``deploy_model_on_rasp.py``)
+- **00:05.287**: :ref:`sphx_glr_tutorials_frontend_from_coreml.py` (``from_coreml.py``)
+- **00:04.659**: :ref:`sphx_glr_tutorials_frontend_build_gcn.py` (``build_gcn.py``)
+- **00:04.553**: :ref:`sphx_glr_tutorials_frontend_from_mxnet.py` (``from_mxnet.py``)
+- **00:02.088**: :ref:`sphx_glr_tutorials_frontend_using_external_lib.py` (``using_external_lib.py``)
+- **00:01.421**: :ref:`sphx_glr_tutorials_frontend_from_onnx.py` (``from_onnx.py``)
diff --git a/docs/_sources/tutorials/language/sg_execution_times.rst.txt b/docs/_sources/tutorials/language/sg_execution_times.rst.txt
index ab7862f..c29d06c 100644
--- a/docs/_sources/tutorials/language/sg_execution_times.rst.txt
+++ b/docs/_sources/tutorials/language/sg_execution_times.rst.txt
@@ -5,13 +5,13 @@
 
 Computation times
 =================
-**00:03.615** total execution time for **tutorials_language** files:
+**00:03.451** total execution time for **tutorials_language** files:
 
-- **00:01.282**: :ref:`sphx_glr_tutorials_language_intrin_math.py` (``intrin_math.py``)
-- **00:00.598**: :ref:`sphx_glr_tutorials_language_tensorize.py` (``tensorize.py``)
-- **00:00.481**: :ref:`sphx_glr_tutorials_language_scan.py` (``scan.py``)
-- **00:00.448**: :ref:`sphx_glr_tutorials_language_reduction.py` (``reduction.py``)
-- **00:00.252**: :ref:`sphx_glr_tutorials_language_extern_op.py` (``extern_op.py``)
-- **00:00.196**: :ref:`sphx_glr_tutorials_language_schedule_primitives.py` (``schedule_primitives.py``)
-- **00:00.193**: :ref:`sphx_glr_tutorials_language_tedd.py` (``tedd.py``)
-- **00:00.166**: :ref:`sphx_glr_tutorials_language_tuple_inputs.py` (``tuple_inputs.py``)
+- **00:01.193**: :ref:`sphx_glr_tutorials_language_intrin_math.py` (``intrin_math.py``)
+- **00:00.652**: :ref:`sphx_glr_tutorials_language_tensorize.py` (``tensorize.py``)
+- **00:00.437**: :ref:`sphx_glr_tutorials_language_reduction.py` (``reduction.py``)
+- **00:00.430**: :ref:`sphx_glr_tutorials_language_scan.py` (``scan.py``)
+- **00:00.272**: :ref:`sphx_glr_tutorials_language_extern_op.py` (``extern_op.py``)
+- **00:00.169**: :ref:`sphx_glr_tutorials_language_tedd.py` (``tedd.py``)
+- **00:00.158**: :ref:`sphx_glr_tutorials_language_schedule_primitives.py` (``schedule_primitives.py``)
+- **00:00.140**: :ref:`sphx_glr_tutorials_language_tuple_inputs.py` (``tuple_inputs.py``)
diff --git a/docs/_sources/tutorials/language/tensorize.rst.txt b/docs/_sources/tutorials/language/tensorize.rst.txt
index 8ebe7f9..6b284ab 100644
--- a/docs/_sources/tutorials/language/tensorize.rst.txt
+++ b/docs/_sources/tutorials/language/tensorize.rst.txt
@@ -288,7 +288,7 @@ The importing needs to happen before the tensorized GEMV being executed.
  .. code-block:: none
 
     produce C {
-      // attr [iter_var(i, )] pragma_import_llvm = "; ModuleID = '/tmp/tmp6igi60ud/input0.cc'\nsource_filename = \"/tmp/tmp6igi60ud/input0.cc\"\ntarget datalayout = \"e-m:e-i64:64-f80:128-n8:16:32:64-S128\"\ntarget triple = \"x86_64-pc-linux-gnu\"\n\n; Function Attrs: noinline nounwind optnone uwtable\ndefine dso_local i32 @gemv_update(float*, float*, float*, i32, i32, i32) #0 {\n  %7 = alloca float*, align 8\n  %8 = alloca float*, align 8\n  %9 = alloca float*, align 8\n  %10 = alloca i [...]
+      // attr [iter_var(i, )] pragma_import_llvm = "; ModuleID = '/tmp/tmpa_fzin16/input0.cc'\nsource_filename = \"/tmp/tmpa_fzin16/input0.cc\"\ntarget datalayout = \"e-m:e-i64:64-f80:128-n8:16:32:64-S128\"\ntarget triple = \"x86_64-pc-linux-gnu\"\n\n; Function Attrs: noinline nounwind optnone uwtable\ndefine dso_local i32 @gemv_update(float*, float*, float*, i32, i32, i32) #0 {\n  %7 = alloca float*, align 8\n  %8 = alloca float*, align 8\n  %9 = alloca float*, align 8\n  %10 = alloca i [...]
       for (i, 0, 1024) {
         for (j.outer, 0, 32) {
           gemv_update(tvm_access_ptr(type_annotation(), C, ((i*512) + (j.outer*16)), 16, 2), tvm_access_ptr(type_annotation(), A, (i*64), 64, 1), tvm_access_ptr(type_annotation(), B, (j.outer*1024), 1024, 1), 16, 64, 64)
diff --git a/docs/_sources/tutorials/optimize/opt_conv_cuda.rst.txt b/docs/_sources/tutorials/optimize/opt_conv_cuda.rst.txt
index 853f7b7..c719f50 100644
--- a/docs/_sources/tutorials/optimize/opt_conv_cuda.rst.txt
+++ b/docs/_sources/tutorials/optimize/opt_conv_cuda.rst.txt
@@ -293,7 +293,7 @@ latency of convolution.
 
  .. code-block:: none
 
-    Convolution: 53.222976 ms
+    Convolution: 19.769246 ms
 
 
 
diff --git a/docs/_sources/tutorials/optimize/opt_conv_tensorcore.rst.txt b/docs/_sources/tutorials/optimize/opt_conv_tensorcore.rst.txt
index 72c1083..86d3144 100644
--- a/docs/_sources/tutorials/optimize/opt_conv_tensorcore.rst.txt
+++ b/docs/_sources/tutorials/optimize/opt_conv_tensorcore.rst.txt
@@ -567,7 +567,7 @@ be able to run on our build server
 
  .. code-block:: none
 
-    conv2d with tensor core: 13.390368 ms
+    conv2d with tensor core: 6.365957 ms
 
 
 
diff --git a/docs/_sources/tutorials/optimize/opt_gemm.rst.txt b/docs/_sources/tutorials/optimize/opt_gemm.rst.txt
index 1a1fcc7..cd4da59 100644
--- a/docs/_sources/tutorials/optimize/opt_gemm.rst.txt
+++ b/docs/_sources/tutorials/optimize/opt_gemm.rst.txt
@@ -118,8 +118,8 @@ Then we write a baseline implementation, the simplest way to write a matrix mult
 
  .. code-block:: none
 
-    Numpy running time: 0.010819
-    Baseline: 3.314082
+    Numpy running time: 0.007138
+    Baseline: 5.849220
 
 
 
@@ -200,7 +200,7 @@ fill 32 * 32 * sizeof(float) which is 4KB in the cache whose total size is 32KB
 
  .. code-block:: none
 
-    Opt1: 0.288940
+    Opt1: 0.110809
 
 
 
@@ -288,7 +288,7 @@ In this tutorial, we chose to vectorize the inner loop row data since it is cach
 
  .. code-block:: none
 
-    Opt2: 0.320343
+    Opt2: 0.118893
 
 
 
@@ -371,7 +371,7 @@ the access pattern for A matrix is more cache friendly.
 
  .. code-block:: none
 
-    Opt3: 0.111966
+    Opt3: 0.059414
 
 
 
@@ -473,7 +473,7 @@ the corresponding value from the packed array.
 
  .. code-block:: none
 
-    Opt4: 0.105252
+    Opt4: 0.064715
 
 
 
@@ -578,7 +578,7 @@ write to C when all the block results are ready.
 
  .. code-block:: none
 
-    Opt5: 0.099655
+    Opt5: 0.089912
 
 
 
@@ -691,7 +691,7 @@ Futhermore, we can also utilize multi-core processors to do the thread-level par
 
  .. code-block:: none
 
-    Opt6: 0.032349
+    Opt6: 0.016163
 
 
 
diff --git a/docs/_sources/tutorials/optimize/sg_execution_times.rst.txt b/docs/_sources/tutorials/optimize/sg_execution_times.rst.txt
index 24edae5..a530b56 100644
--- a/docs/_sources/tutorials/optimize/sg_execution_times.rst.txt
+++ b/docs/_sources/tutorials/optimize/sg_execution_times.rst.txt
@@ -5,9 +5,9 @@
 
 Computation times
 =================
-**00:26.791** total execution time for **tutorials_optimize** files:
+**00:27.034** total execution time for **tutorials_optimize** files:
 
-- **00:24.638**: :ref:`sphx_glr_tutorials_optimize_opt_gemm.py` (``opt_gemm.py``)
-- **00:01.080**: :ref:`sphx_glr_tutorials_optimize_opt_conv_tensorcore.py` (``opt_conv_tensorcore.py``)
-- **00:00.880**: :ref:`sphx_glr_tutorials_optimize_opt_conv_cuda.py` (``opt_conv_cuda.py``)
-- **00:00.193**: :ref:`sphx_glr_tutorials_optimize_opt_matmul_auto_tensorcore.py` (``opt_matmul_auto_tensorcore.py``)
+- **00:25.258**: :ref:`sphx_glr_tutorials_optimize_opt_gemm.py` (``opt_gemm.py``)
+- **00:00.929**: :ref:`sphx_glr_tutorials_optimize_opt_conv_tensorcore.py` (``opt_conv_tensorcore.py``)
+- **00:00.695**: :ref:`sphx_glr_tutorials_optimize_opt_conv_cuda.py` (``opt_conv_cuda.py``)
+- **00:00.153**: :ref:`sphx_glr_tutorials_optimize_opt_matmul_auto_tensorcore.py` (``opt_matmul_auto_tensorcore.py``)
diff --git a/docs/_sources/tutorials/relay_quick_start.rst.txt b/docs/_sources/tutorials/relay_quick_start.rst.txt
index d59addc..c844ff7 100644
--- a/docs/_sources/tutorials/relay_quick_start.rst.txt
+++ b/docs/_sources/tutorials/relay_quick_start.rst.txt
@@ -223,7 +223,7 @@ in this example. Then the machine code will be generated as the module library.
 
  .. code-block:: none
 
-
    ...1%, 0.01 MB, 30 KB/s, 0 seconds passed
    ...3%, 0.02 MB, 59 KB/s, 0 seconds passed
    ...5%, 0.02 MB, 88 KB/s, 0 seconds passed
    ...7%, 0.03 MB, 114 KB/s, 0 seconds passed
    ...9%, 0.04 MB, 143 KB/s, 0 seconds passed
    ...11%, 0.05 MB, 172 KB/s, 0 seconds passed
    ...13%, 0.05 MB, 200 KB/s, 0 seconds passed
    ...15%, 0.06 MB, 229 KB/s, 0 seconds passed
    ...17%, 0.07 MB, 258 KB/s, 0 seconds passed
    ...19%, 0.08 MB, 286 KB/s, 0 seconds passed
    ...21%, 0.09 MB, 315 KB/s, 0 seconds passed
    ...23%, 0.09 MB, 335 KB/s, 0 seconds passed
    ...25%, 0.10 MB, 363 KB/s, 0 seconds passed
    ...27%, 0.11 MB, 390 KB/s, 0 seconds passed
    ...29%, 0.12 MB, 418 KB/s, 0 seconds passed
    ...31%, 0.12 MB, 446 KB/s, 0 seconds passed
    ...33%, 0.13 MB, 474 KB/s, 0 seconds passed
    ...35%, 0.14 MB, 501 KB/s, 0 seconds passed
    ...37%, 0.15 MB, 529 KB/s, 0 seconds passed
    ...39%, 0.16 MB, 557 KB/s, 0 seconds passed
    ...41%, 0.16 MB, 585 KB/s, 0 seconds pas
 sed
    ...43%, 0.17 MB, 612 KB/s, 0 seconds passed
    ...45%, 0.18 MB, 640 KB/s, 0 seconds passed
    ...47%, 0.19 MB, 668 KB/s, 0 seconds passed
    ...49%, 0.20 MB, 696 KB/s, 0 seconds passed
    ...51%, 0.20 MB, 707 KB/s, 0 seconds passed
    ...53%, 0.21 MB, 734 KB/s, 0 seconds passed
    ...55%, 0.22 MB, 760 KB/s, 0 seconds passed
    ...57%, 0.23 MB, 787 KB/s, 0 seconds passed
    ...59%, 0.23 MB, 814 KB/s, 0 seconds passed
    ...61%, 0.24 MB, 841 KB/s, 0 seconds passed
    ...63%, 0.25 MB, 868 KB/s, 0 seconds passed
    ...65%, 0.26 MB, 895 KB/s, 0 seconds passed
    ...67%, 0.27 MB, 922 KB/s, 0 seconds passed
    ...69%, 0.27 MB, 949 KB/s, 0 seconds passed
    ...71%, 0.28 MB, 976 KB/s, 0 seconds passed
    ...73%, 0.29 MB, 1003 KB/s, 0 seconds passed
    ...75%, 0.30 MB, 1030 KB/s, 0 seconds passed
    ...77%, 0.30 MB, 1056 KB/s, 0 seconds passed
    ...79%, 0.31 MB, 1083 KB/s, 0 seconds passed
    ...81%, 0.32 MB, 1110 KB/s, 0 seconds passed
    ...83%, 0.33 MB, 1137 KB
 /s, 0 seconds passed
    ...85%, 0.34 MB, 1164 KB/s, 0 seconds passed
    ...87%, 0.34 MB, 1191 KB/s, 0 seconds passed
    ...89%, 0.35 MB, 1217 KB/s, 0 seconds passed
    ...91%, 0.36 MB, 1244 KB/s, 0 seconds passed
    ...93%, 0.37 MB, 1271 KB/s, 0 seconds passed
    ...95%, 0.38 MB, 1298 KB/s, 0 seconds passed
    ...97%, 0.38 MB, 1324 KB/s, 0 seconds passed
    ...99%, 0.39 MB, 1351 KB/s, 0 seconds passed
    ...100%, 0.40 MB, 1377 KB/s, 0 seconds passed
+
    ...1%, 0.01 MB, 48 KB/s, 0 seconds passed
    ...3%, 0.02 MB, 97 KB/s, 0 seconds passed
    ...5%, 0.02 MB, 145 KB/s, 0 seconds passed
    ...7%, 0.03 MB, 192 KB/s, 0 seconds passed
    ...9%, 0.04 MB, 240 KB/s, 0 seconds passed
    ...11%, 0.05 MB, 288 KB/s, 0 seconds passed
    ...13%, 0.05 MB, 335 KB/s, 0 seconds passed
    ...15%, 0.06 MB, 381 KB/s, 0 seconds passed
    ...17%, 0.07 MB, 429 KB/s, 0 seconds passed
    ...19%, 0.08 MB, 474 KB/s, 0 seconds passed
    ...21%, 0.09 MB, 521 KB/s, 0 seconds passed
    ...23%, 0.09 MB, 568 KB/s, 0 seconds passed
    ...25%, 0.10 MB, 615 KB/s, 0 seconds passed
    ...27%, 0.11 MB, 659 KB/s, 0 seconds passed
    ...29%, 0.12 MB, 705 KB/s, 0 seconds passed
    ...31%, 0.12 MB, 751 KB/s, 0 seconds passed
    ...33%, 0.13 MB, 798 KB/s, 0 seconds passed
    ...35%, 0.14 MB, 842 KB/s, 0 seconds passed
    ...37%, 0.15 MB, 889 KB/s, 0 seconds passed
    ...39%, 0.16 MB, 932 KB/s, 0 seconds passed
    ...41%, 0.16 MB, 978 KB/s, 0 seconds pa
 ssed
    ...43%, 0.17 MB, 1023 KB/s, 0 seconds passed
    ...45%, 0.18 MB, 1069 KB/s, 0 seconds passed
    ...47%, 0.19 MB, 1112 KB/s, 0 seconds passed
    ...49%, 0.20 MB, 1158 KB/s, 0 seconds passed
    ...51%, 0.20 MB, 1203 KB/s, 0 seconds passed
    ...53%, 0.21 MB, 1248 KB/s, 0 seconds passed
    ...55%, 0.22 MB, 1290 KB/s, 0 seconds passed
    ...57%, 0.23 MB, 1335 KB/s, 0 seconds passed
    ...59%, 0.23 MB, 1379 KB/s, 0 seconds passed
    ...61%, 0.24 MB, 1424 KB/s, 0 seconds passed
    ...63%, 0.25 MB, 1466 KB/s, 0 seconds passed
    ...65%, 0.26 MB, 1511 KB/s, 0 seconds passed
    ...67%, 0.27 MB, 1554 KB/s, 0 seconds passed
    ...69%, 0.27 MB, 1599 KB/s, 0 seconds passed
    ...71%, 0.28 MB, 1640 KB/s, 0 seconds passed
    ...73%, 0.29 MB, 1684 KB/s, 0 seconds passed
    ...75%, 0.30 MB, 1729 KB/s, 0 seconds passed
    ...77%, 0.30 MB, 1773 KB/s, 0 seconds passed
    ...79%, 0.31 MB, 1817 KB/s, 0 seconds passed
    ...81%, 0.32 MB, 1861 KB/s, 0 seconds passed
    ...83%, 
 0.33 MB, 1902 KB/s, 0 seconds passed
    ...85%, 0.34 MB, 1946 KB/s, 0 seconds passed
    ...87%, 0.34 MB, 1986 KB/s, 0 seconds passed
    ...89%, 0.35 MB, 2030 KB/s, 0 seconds passed
    ...91%, 0.36 MB, 2074 KB/s, 0 seconds passed
    ...93%, 0.37 MB, 2118 KB/s, 0 seconds passed
    ...95%, 0.38 MB, 2160 KB/s, 0 seconds passed
    ...97%, 0.38 MB, 2204 KB/s, 0 seconds passed
    ...99%, 0.39 MB, 2248 KB/s, 0 seconds passed
    ...100%, 0.40 MB, 2291 KB/s, 0 seconds passed
     Cannot find config for target=cuda -model=unknown, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 64, 56, 56), 'float32'), ('TENSOR', (64, 64, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
     Cannot find config for target=cuda -model=unknown, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 128, 28, 28), 'float32'), ('TENSOR', (128, 128, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
     Cannot find config for target=cuda -model=unknown, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 256, 14, 14), 'float32'), ('TENSOR', (256, 256, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
@@ -302,7 +302,7 @@ back in deploy environment.
 
  .. code-block:: none
 
-    ['deploy_lib.tar', 'deploy_graph.json', 'deploy_param.params']
+    ['deploy_lib.tar', 'deploy_param.params', 'deploy_graph.json']
 
 
 
diff --git a/docs/_sources/tutorials/sg_execution_times.rst.txt b/docs/_sources/tutorials/sg_execution_times.rst.txt
index f56890f..2703f7d 100644
--- a/docs/_sources/tutorials/sg_execution_times.rst.txt
+++ b/docs/_sources/tutorials/sg_execution_times.rst.txt
@@ -5,8 +5,8 @@
 
 Computation times
 =================
-**00:11.210** total execution time for **tutorials** files:
+**00:09.090** total execution time for **tutorials** files:
 
-- **00:10.767**: :ref:`sphx_glr_tutorials_relay_quick_start.py` (``relay_quick_start.py``)
-- **00:00.327**: :ref:`sphx_glr_tutorials_tensor_expr_get_started.py` (``tensor_expr_get_started.py``)
-- **00:00.117**: :ref:`sphx_glr_tutorials_cross_compilation_and_rpc.py` (``cross_compilation_and_rpc.py``)
+- **00:08.641**: :ref:`sphx_glr_tutorials_relay_quick_start.py` (``relay_quick_start.py``)
+- **00:00.317**: :ref:`sphx_glr_tutorials_tensor_expr_get_started.py` (``tensor_expr_get_started.py``)
+- **00:00.131**: :ref:`sphx_glr_tutorials_cross_compilation_and_rpc.py` (``cross_compilation_and_rpc.py``)
diff --git a/docs/_sources/tutorials/tensor_expr_get_started.rst.txt b/docs/_sources/tutorials/tensor_expr_get_started.rst.txt
index 213f0df..1aad4c2 100644
--- a/docs/_sources/tutorials/tensor_expr_get_started.rst.txt
+++ b/docs/_sources/tutorials/tensor_expr_get_started.rst.txt
@@ -324,7 +324,7 @@ The following code first performs the following steps:
 
  .. code-block:: none
 
-    ['myadd.tvm_meta.json', 'myadd.ptx', 'myadd.so', 'myadd.o']
+    ['myadd.tvm_meta.json', 'myadd.so', 'myadd.ptx', 'myadd.o']
 
 
 
diff --git a/docs/_sources/tutorials/topi/intro_topi.rst.txt b/docs/_sources/tutorials/topi/intro_topi.rst.txt
index 18cafb3..09415ba 100644
--- a/docs/_sources/tutorials/topi/intro_topi.rst.txt
+++ b/docs/_sources/tutorials/topi/intro_topi.rst.txt
@@ -218,7 +218,7 @@ As you can see, scheduled stages of computation have been accumulated and we can
 
  .. code-block:: none
 
-    [stage(a, 0xf8572560), stage(b, 0x1047a1f70), stage(T_add, 0x1047a2a50), stage(T_multiply, 0x105375760), stage(T_elemwise_sum, 0x1051a1b80), stage(T_divide, 0x102a7ffa0), stage(T_divide_red.rf, 0x11809e130), stage(T_divide_red, 0x10514fc50)]
+    [stage(a, 0xeee0bd10), stage(b, 0x1020aa6b0), stage(T_add, 0x66ac0fb0), stage(T_multiply, 0x101f8e9c0), stage(T_elemwise_sum, 0x113a344d0), stage(T_divide, 0x101f89a50), stage(T_divide_red.rf, 0x102442390), stage(T_divide_red, 0x1020b1460)]
 
 
 
diff --git a/docs/_sources/tutorials/topi/sg_execution_times.rst.txt b/docs/_sources/tutorials/topi/sg_execution_times.rst.txt
index c861977..6b420bd 100644
--- a/docs/_sources/tutorials/topi/sg_execution_times.rst.txt
+++ b/docs/_sources/tutorials/topi/sg_execution_times.rst.txt
@@ -5,6 +5,6 @@
 
 Computation times
 =================
-**00:00.491** total execution time for **tutorials_topi** files:
+**00:00.455** total execution time for **tutorials_topi** files:
 
-- **00:00.491**: :ref:`sphx_glr_tutorials_topi_intro_topi.py` (``intro_topi.py``)
+- **00:00.455**: :ref:`sphx_glr_tutorials_topi_intro_topi.py` (``intro_topi.py``)
diff --git a/docs/_sources/vta/tutorials/autotvm/sg_execution_times.rst.txt b/docs/_sources/vta/tutorials/autotvm/sg_execution_times.rst.txt
index 57b1101..9966e02 100644
--- a/docs/_sources/vta/tutorials/autotvm/sg_execution_times.rst.txt
+++ b/docs/_sources/vta/tutorials/autotvm/sg_execution_times.rst.txt
@@ -5,6 +5,6 @@
 
 Computation times
 =================
-**00:04.087** total execution time for **vta_tutorials_autotvm** files:
+**00:03.141** total execution time for **vta_tutorials_autotvm** files:
 
-- **00:04.087**: :ref:`sphx_glr_vta_tutorials_autotvm_tune_relay_vta.py` (``tune_relay_vta.py``)
+- **00:03.141**: :ref:`sphx_glr_vta_tutorials_autotvm_tune_relay_vta.py` (``tune_relay_vta.py``)
diff --git a/docs/_sources/vta/tutorials/autotvm/tune_relay_vta.rst.txt b/docs/_sources/vta/tutorials/autotvm/tune_relay_vta.rst.txt
index 9474940..f73deef 100644
--- a/docs/_sources/vta/tutorials/autotvm/tune_relay_vta.rst.txt
+++ b/docs/_sources/vta/tutorials/autotvm/tune_relay_vta.rst.txt
@@ -481,7 +481,7 @@ Finally, we launch tuning jobs and evaluate the end-to-end performance.
  .. code-block:: none
 
     Extract tasks...
-
    ...1%, 0.01 MB, 165 KB/s, 0 seconds passed
    ...2%, 0.02 MB, 286 KB/s, 0 seconds passed
    ...3%, 0.02 MB, 429 KB/s, 0 seconds passed
    ...4%, 0.03 MB, 502 KB/s, 0 seconds passed
    ...5%, 0.04 MB, 627 KB/s, 0 seconds passed
    ...6%, 0.05 MB, 751 KB/s, 0 seconds passed
    ...7%, 0.05 MB, 876 KB/s, 0 seconds passed
    ...8%, 0.06 MB, 999 KB/s, 0 seconds passed
    ...9%, 0.07 MB, 1122 KB/s, 0 seconds passed
    ...10%, 0.08 MB, 1246 KB/s, 0 seconds passed
    ...11%, 0.09 MB, 1369 KB/s, 0 seconds passed
    ...13%, 0.09 MB, 1340 KB/s, 0 seconds passed
    ...14%, 0.10 MB, 1450 KB/s, 0 seconds passed
    ...15%, 0.11 MB, 1560 KB/s, 0 seconds passed
    ...16%, 0.12 MB, 1669 KB/s, 0 seconds passed
    ...17%, 0.12 MB, 1777 KB/s, 0 seconds passed
    ...18%, 0.13 MB, 1886 KB/s, 0 seconds passed
    ...19%, 0.14 MB, 1995 KB/s, 0 seconds passed
    ...20%, 0.15 MB, 2104 KB/s, 0 seconds passed
    ...21%, 0.16 MB, 2212 KB/s, 0 seconds passed
    ...22%, 0.16 MB, 2321 KB/s, 0
  seconds passed
    ...23%, 0.17 MB, 2429 KB/s, 0 seconds passed
    ...25%, 0.18 MB, 2537 KB/s, 0 seconds passed
    ...26%, 0.19 MB, 2645 KB/s, 0 seconds passed
    ...27%, 0.20 MB, 2752 KB/s, 0 seconds passed
    ...28%, 0.20 MB, 2611 KB/s, 0 seconds passed
    ...29%, 0.21 MB, 2709 KB/s, 0 seconds passed
    ...30%, 0.22 MB, 2807 KB/s, 0 seconds passed
    ...31%, 0.23 MB, 2905 KB/s, 0 seconds passed
    ...32%, 0.23 MB, 3001 KB/s, 0 seconds passed
    ...33%, 0.24 MB, 3099 KB/s, 0 seconds passed
    ...34%, 0.25 MB, 3196 KB/s, 0 seconds passed
    ...35%, 0.26 MB, 3293 KB/s, 0 seconds passed
    ...36%, 0.27 MB, 3374 KB/s, 0 seconds passed
    ...38%, 0.27 MB, 3470 KB/s, 0 seconds passed
    ...39%, 0.28 MB, 3565 KB/s, 0 seconds passed
    ...40%, 0.29 MB, 3661 KB/s, 0 seconds passed
    ...41%, 0.30 MB, 3757 KB/s, 0 seconds passed
    ...42%, 0.30 MB, 3853 KB/s, 0 seconds passed
    ...43%, 0.31 MB, 3948 KB/s, 0 seconds passed
    ...44%, 0.32 MB, 4043 KB/s, 0 seconds passed
 
    ...45%, 0.33 MB, 4138 KB/s, 0 seconds passed
    ...46%, 0.34 MB, 4234 KB/s, 0 seconds passed
    ...47%, 0.34 MB, 4328 KB/s, 0 seconds passed
    ...48%, 0.35 MB, 4423 KB/s, 0 seconds passed
    ...50%, 0.36 MB, 4212 KB/s, 0 seconds passed
    ...51%, 0.37 MB, 4294 KB/s, 0 seconds passed
    ...52%, 0.38 MB, 4376 KB/s, 0 seconds passed
    ...53%, 0.38 MB, 4464 KB/s, 0 seconds passed
    ...54%, 0.39 MB, 4551 KB/s, 0 seconds passed
    ...55%, 0.40 MB, 4638 KB/s, 0 seconds passed
    ...56%, 0.41 MB, 4725 KB/s, 0 seconds passed
    ...57%, 0.41 MB, 4812 KB/s, 0 seconds passed
    ...58%, 0.42 MB, 4899 KB/s, 0 seconds passed
    ...59%, 0.43 MB, 4986 KB/s, 0 seconds passed
    ...60%, 0.44 MB, 5073 KB/s, 0 seconds passed
    ...62%, 0.45 MB, 5160 KB/s, 0 seconds passed
    ...63%, 0.45 MB, 5241 KB/s, 0 seconds passed
    ...64%, 0.46 MB, 5319 KB/s, 0 seconds passed
    ...65%, 0.47 MB, 5403 KB/s, 0 seconds passed
    ...66%, 0.48 MB, 5480 KB/s, 0 seconds passed
    ...67%, 0.48 M
 B, 5564 KB/s, 0 seconds passed
    ...68%, 0.49 MB, 5650 KB/s, 0 seconds passed
    ...69%, 0.50 MB, 5735 KB/s, 0 seconds passed
    ...70%, 0.51 MB, 5821 KB/s, 0 seconds passed
    ...71%, 0.52 MB, 5905 KB/s, 0 seconds passed
    ...72%, 0.52 MB, 5991 KB/s, 0 seconds passed
    ...73%, 0.53 MB, 6075 KB/s, 0 seconds passed
    ...75%, 0.54 MB, 6160 KB/s, 0 seconds passed
    ...76%, 0.55 MB, 6244 KB/s, 0 seconds passed
    ...77%, 0.55 MB, 6329 KB/s, 0 seconds passed
    ...78%, 0.56 MB, 6413 KB/s, 0 seconds passed
    ...79%, 0.57 MB, 6498 KB/s, 0 seconds passed
    ...80%, 0.58 MB, 6581 KB/s, 0 seconds passed
    ...81%, 0.59 MB, 6666 KB/s, 0 seconds passed
    ...82%, 0.59 MB, 6749 KB/s, 0 seconds passed
    ...83%, 0.60 MB, 6834 KB/s, 0 seconds passed
    ...84%, 0.61 MB, 6917 KB/s, 0 seconds passed
    ...85%, 0.62 MB, 7001 KB/s, 0 seconds passed
    ...87%, 0.62 MB, 7084 KB/s, 0 seconds passed
    ...88%, 0.63 MB, 7167 KB/s, 0 seconds passed
    ...89%, 0.64 MB, 7250 KB/s, 0 s
 econds passed
    ...90%, 0.65 MB, 7333 KB/s, 0 seconds passed
    ...91%, 0.66 MB, 7416 KB/s, 0 seconds passed
    ...92%, 0.66 MB, 7498 KB/s, 0 seconds passed
    ...93%, 0.67 MB, 7581 KB/s, 0 seconds passed
    ...94%, 0.68 MB, 7663 KB/s, 0 seconds passed
    ...95%, 0.69 MB, 7746 KB/s, 0 seconds passed
    ...96%, 0.70 MB, 7826 KB/s, 0 seconds passed
    ...97%, 0.70 MB, 7909 KB/s, 0 seconds passed
    ...99%, 0.71 MB, 7990 KB/s, 0 seconds passed
    ...100%, 0.72 MB, 8063 KB/s, 0 seconds passed
+
    ...1%, 0.01 MB, 45 KB/s, 0 seconds passed
    ...2%, 0.02 MB, 91 KB/s, 0 seconds passed
    ...3%, 0.02 MB, 137 KB/s, 0 seconds passed
    ...4%, 0.03 MB, 178 KB/s, 0 seconds passed
    ...5%, 0.04 MB, 223 KB/s, 0 seconds passed
    ...6%, 0.05 MB, 265 KB/s, 0 seconds passed
    ...7%, 0.05 MB, 309 KB/s, 0 seconds passed
    ...8%, 0.06 MB, 352 KB/s, 0 seconds passed
    ...9%, 0.07 MB, 395 KB/s, 0 seconds passed
    ...10%, 0.08 MB, 435 KB/s, 0 seconds passed
    ...11%, 0.09 MB, 478 KB/s, 0 seconds passed
    ...13%, 0.09 MB, 521 KB/s, 0 seconds passed
    ...14%, 0.10 MB, 564 KB/s, 0 seconds passed
    ...15%, 0.11 MB, 605 KB/s, 0 seconds passed
    ...16%, 0.12 MB, 648 KB/s, 0 seconds passed
    ...17%, 0.12 MB, 689 KB/s, 0 seconds passed
    ...18%, 0.13 MB, 732 KB/s, 0 seconds passed
    ...19%, 0.14 MB, 771 KB/s, 0 seconds passed
    ...20%, 0.15 MB, 814 KB/s, 0 seconds passed
    ...21%, 0.16 MB, 854 KB/s, 0 seconds passed
    ...22%, 0.16 MB, 896 KB/s, 0 seconds passed
 
    ...23%, 0.17 MB, 936 KB/s, 0 seconds passed
    ...25%, 0.18 MB, 978 KB/s, 0 seconds passed
    ...26%, 0.19 MB, 1017 KB/s, 0 seconds passed
    ...27%, 0.20 MB, 1059 KB/s, 0 seconds passed
    ...28%, 0.20 MB, 1100 KB/s, 0 seconds passed
    ...29%, 0.21 MB, 1142 KB/s, 0 seconds passed
    ...30%, 0.22 MB, 1181 KB/s, 0 seconds passed
    ...31%, 0.23 MB, 1223 KB/s, 0 seconds passed
    ...32%, 0.23 MB, 1261 KB/s, 0 seconds passed
    ...33%, 0.24 MB, 1302 KB/s, 0 seconds passed
    ...34%, 0.25 MB, 1341 KB/s, 0 seconds passed
    ...35%, 0.26 MB, 1382 KB/s, 0 seconds passed
    ...36%, 0.27 MB, 1420 KB/s, 0 seconds passed
    ...38%, 0.27 MB, 1460 KB/s, 0 seconds passed
    ...39%, 0.28 MB, 1498 KB/s, 0 seconds passed
    ...40%, 0.29 MB, 1539 KB/s, 0 seconds passed
    ...41%, 0.30 MB, 1579 KB/s, 0 seconds passed
    ...42%, 0.30 MB, 1620 KB/s, 0 seconds passed
    ...43%, 0.31 MB, 1658 KB/s, 0 seconds passed
    ...44%, 0.32 MB, 1698 KB/s, 0 seconds passed
    ...45%, 0.33 M
 B, 1736 KB/s, 0 seconds passed
    ...46%, 0.34 MB, 1776 KB/s, 0 seconds passed
    ...47%, 0.34 MB, 1815 KB/s, 0 seconds passed
    ...48%, 0.35 MB, 1855 KB/s, 0 seconds passed
    ...50%, 0.36 MB, 1892 KB/s, 0 seconds passed
    ...51%, 0.37 MB, 1932 KB/s, 0 seconds passed
    ...52%, 0.38 MB, 1971 KB/s, 0 seconds passed
    ...53%, 0.38 MB, 2011 KB/s, 0 seconds passed
    ...54%, 0.39 MB, 2048 KB/s, 0 seconds passed
    ...55%, 0.40 MB, 2088 KB/s, 0 seconds passed
    ...56%, 0.41 MB, 2126 KB/s, 0 seconds passed
    ...57%, 0.41 MB, 2166 KB/s, 0 seconds passed
    ...58%, 0.42 MB, 2205 KB/s, 0 seconds passed
    ...59%, 0.43 MB, 2245 KB/s, 0 seconds passed
    ...60%, 0.44 MB, 2280 KB/s, 0 seconds passed
    ...62%, 0.45 MB, 2320 KB/s, 0 seconds passed
    ...63%, 0.45 MB, 2357 KB/s, 0 seconds passed
    ...64%, 0.46 MB, 2397 KB/s, 0 seconds passed
    ...65%, 0.47 MB, 2434 KB/s, 0 seconds passed
    ...66%, 0.48 MB, 2473 KB/s, 0 seconds passed
    ...67%, 0.48 MB, 2513 KB/s, 0 s
 econds passed
    ...68%, 0.49 MB, 2552 KB/s, 0 seconds passed
    ...69%, 0.50 MB, 2586 KB/s, 0 seconds passed
    ...70%, 0.51 MB, 2625 KB/s, 0 seconds passed
    ...71%, 0.52 MB, 2664 KB/s, 0 seconds passed
    ...72%, 0.52 MB, 2704 KB/s, 0 seconds passed
    ...73%, 0.53 MB, 2740 KB/s, 0 seconds passed
    ...75%, 0.54 MB, 2779 KB/s, 0 seconds passed
    ...76%, 0.55 MB, 2818 KB/s, 0 seconds passed
    ...77%, 0.55 MB, 2857 KB/s, 0 seconds passed
    ...78%, 0.56 MB, 2890 KB/s, 0 seconds passed
    ...79%, 0.57 MB, 2929 KB/s, 0 seconds passed
    ...80%, 0.58 MB, 2964 KB/s, 0 seconds passed
    ...81%, 0.59 MB, 3003 KB/s, 0 seconds passed
    ...82%, 0.59 MB, 3039 KB/s, 0 seconds passed
    ...83%, 0.60 MB, 3078 KB/s, 0 seconds passed
    ...84%, 0.61 MB, 3116 KB/s, 0 seconds passed
    ...85%, 0.62 MB, 3154 KB/s, 0 seconds passed
    ...87%, 0.62 MB, 3190 KB/s, 0 seconds passed
    ...88%, 0.63 MB, 3228 KB/s, 0 seconds passed
    ...89%, 0.64 MB, 3260 KB/s, 0 seconds passed
   
  ...90%, 0.65 MB, 3298 KB/s, 0 seconds passed
    ...91%, 0.66 MB, 3336 KB/s, 0 seconds passed
    ...92%, 0.66 MB, 3374 KB/s, 0 seconds passed
    ...93%, 0.67 MB, 3412 KB/s, 0 seconds passed
    ...94%, 0.68 MB, 3450 KB/s, 0 seconds passed
    ...95%, 0.69 MB, 3488 KB/s, 0 seconds passed
    ...96%, 0.70 MB, 3527 KB/s, 0 seconds passed
    ...97%, 0.70 MB, 3561 KB/s, 0 seconds passed
    ...99%, 0.71 MB, 3599 KB/s, 0 seconds passed
    ...100%, 0.72 MB, 3635 KB/s, 0 seconds passed
     Exception in thread Thread-9:
     Traceback (most recent call last):
       File "/usr/lib/python3.6/threading.py", line 916, in _bootstrap_inner
@@ -497,11 +497,11 @@ Finally, we launch tuning jobs and evaluate the end-to-end performance.
       File "tvm/_ffi/_cython/./packed_func.pxi", line 236, in tvm._ffi._cy3.core.FuncCall3
       File "tvm/_ffi/_cython/./base.pxi", line 160, in tvm._ffi._cy3.core.CALL
     tvm._ffi.base.TVMError: Traceback (most recent call last):
-      [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f5a12489a81]
-      [bt] (3) /workspace/build/libtvm.so(std::_Function_handler<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*), tvm::relay::backend::GraphRuntimeCodegenModule::GetFunction(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, tvm::runtime::ObjectPtr<tvm::runtime::Object> const&)::{lambda(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)#5}>::_M_invoke(std::_Any_data const&, tvm::runtime::TVMArgs&&, tvm::runtime::TVMRetValue*&&)+0x17) [0x7f5a1 [...]
-      [bt] (2) /workspace/build/libtvm.so(tvm::relay::backend::GraphRuntimeCodegenModule::GetFunction(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, tvm::runtime::ObjectPtr<tvm::runtime::Object> const&)::{lambda(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)#5}::operator()(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const+0x58) [0x7f5a12330798]
-      [bt] (1) /workspace/build/libtvm.so(tvm::runtime::TVMArgValue::operator std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >[abi:cxx11]() const+0x13b) [0x7f5a11b962fb]
-      [bt] (0) /workspace/build/libtvm.so(dmlc::LogMessageFatal::~LogMessageFatal()+0x32) [0x7f5a11b804b2]
+      [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f43bf236f01]
+      [bt] (3) /workspace/build/libtvm.so(std::_Function_handler<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*), tvm::relay::backend::GraphRuntimeCodegenModule::GetFunction(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, tvm::runtime::ObjectPtr<tvm::runtime::Object> const&)::{lambda(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)#5}>::_M_invoke(std::_Any_data const&, tvm::runtime::TVMArgs&&, tvm::runtime::TVMRetValue*&&)+0x17) [0x7f43b [...]
+      [bt] (2) /workspace/build/libtvm.so(tvm::relay::backend::GraphRuntimeCodegenModule::GetFunction(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, tvm::runtime::ObjectPtr<tvm::runtime::Object> const&)::{lambda(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)#5}::operator()(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const+0x58) [0x7f43bf0daa18]
+      [bt] (1) /workspace/build/libtvm.so(tvm::runtime::TVMArgValue::operator std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >[abi:cxx11]() const+0x13b) [0x7f43be94214b]
+      [bt] (0) /workspace/build/libtvm.so(dmlc::LogMessageFatal::~LogMessageFatal()+0x32) [0x7f43be92c302]
       File "/workspace/include/tvm/runtime/packed_func.h", line 507
     TVMError: Check failed: type_code_ == kTVMStr (8 vs. 11) : expected str but get Object
 
diff --git a/docs/_sources/vta/tutorials/frontend/deploy_classification.rst.txt b/docs/_sources/vta/tutorials/frontend/deploy_classification.rst.txt
index 8552961..bdde011 100644
--- a/docs/_sources/vta/tutorials/frontend/deploy_classification.rst.txt
+++ b/docs/_sources/vta/tutorials/frontend/deploy_classification.rst.txt
@@ -243,8 +243,8 @@ The compilation steps are:
 
  .. code-block:: none
 
-
    ...12%, 0.01 MB, 48 KB/s, 0 seconds passed
    ...25%, 0.02 MB, 92 KB/s, 0 seconds passed
    ...38%, 0.02 MB, 138 KB/s, 0 seconds passed
    ...51%, 0.03 MB, 176 KB/s, 0 seconds passed
    ...64%, 0.04 MB, 220 KB/s, 0 seconds passed
    ...77%, 0.05 MB, 264 KB/s, 0 seconds passed
    ...90%, 0.05 MB, 308 KB/s, 0 seconds passed
    ...100%, 0.06 MB, 352 KB/s, 0 seconds passed
-    resnet18_v1 inference graph built in 4.58s!
+
    ...12%, 0.01 MB, 40 KB/s, 0 seconds passed
    ...25%, 0.02 MB, 80 KB/s, 0 seconds passed
    ...38%, 0.02 MB, 120 KB/s, 0 seconds passed
    ...51%, 0.03 MB, 159 KB/s, 0 seconds passed
    ...64%, 0.04 MB, 199 KB/s, 0 seconds passed
    ...77%, 0.05 MB, 238 KB/s, 0 seconds passed
    ...90%, 0.05 MB, 278 KB/s, 0 seconds passed
    ...100%, 0.06 MB, 317 KB/s, 0 seconds passed
+    resnet18_v1 inference graph built in 4.14s!
 
 
 
diff --git a/docs/_sources/vta/tutorials/frontend/deploy_detection.rst.txt b/docs/_sources/vta/tutorials/frontend/deploy_detection.rst.txt
index 7764f48..2e471dc 100644
--- a/docs/_sources/vta/tutorials/frontend/deploy_detection.rst.txt
+++ b/docs/_sources/vta/tutorials/frontend/deploy_detection.rst.txt
@@ -315,7 +315,7 @@ The compilation steps are:
 
  .. code-block:: none
 
-    yolov3-tiny inference graph built in 5.84s!
+    yolov3-tiny inference graph built in 4.81s!
 
 
 
diff --git a/docs/_sources/vta/tutorials/frontend/sg_execution_times.rst.txt b/docs/_sources/vta/tutorials/frontend/sg_execution_times.rst.txt
index fc70d22..57b76fb 100644
--- a/docs/_sources/vta/tutorials/frontend/sg_execution_times.rst.txt
+++ b/docs/_sources/vta/tutorials/frontend/sg_execution_times.rst.txt
@@ -5,7 +5,7 @@
 
 Computation times
 =================
-**01:00.055** total execution time for **vta_tutorials_frontend** files:
+**00:53.252** total execution time for **vta_tutorials_frontend** files:
 
-- **00:36.173**: :ref:`sphx_glr_vta_tutorials_frontend_deploy_detection.py` (``deploy_detection.py``)
-- **00:23.883**: :ref:`sphx_glr_vta_tutorials_frontend_deploy_classification.py` (``deploy_classification.py``)
+- **00:31.214**: :ref:`sphx_glr_vta_tutorials_frontend_deploy_detection.py` (``deploy_detection.py``)
+- **00:22.038**: :ref:`sphx_glr_vta_tutorials_frontend_deploy_classification.py` (``deploy_classification.py``)
diff --git a/docs/_sources/vta/tutorials/optimize/sg_execution_times.rst.txt b/docs/_sources/vta/tutorials/optimize/sg_execution_times.rst.txt
index 8c6bb02..62fcfb3 100644
--- a/docs/_sources/vta/tutorials/optimize/sg_execution_times.rst.txt
+++ b/docs/_sources/vta/tutorials/optimize/sg_execution_times.rst.txt
@@ -5,7 +5,7 @@
 
 Computation times
 =================
-**00:03.474** total execution time for **vta_tutorials_optimize** files:
+**00:02.839** total execution time for **vta_tutorials_optimize** files:
 
-- **00:03.084**: :ref:`sphx_glr_vta_tutorials_optimize_convolution_opt.py` (``convolution_opt.py``)
-- **00:00.390**: :ref:`sphx_glr_vta_tutorials_optimize_matrix_multiply_opt.py` (``matrix_multiply_opt.py``)
+- **00:02.496**: :ref:`sphx_glr_vta_tutorials_optimize_convolution_opt.py` (``convolution_opt.py``)
+- **00:00.343**: :ref:`sphx_glr_vta_tutorials_optimize_matrix_multiply_opt.py` (``matrix_multiply_opt.py``)
diff --git a/docs/_sources/vta/tutorials/sg_execution_times.rst.txt b/docs/_sources/vta/tutorials/sg_execution_times.rst.txt
index 803dfa9..00ca9f6 100644
--- a/docs/_sources/vta/tutorials/sg_execution_times.rst.txt
+++ b/docs/_sources/vta/tutorials/sg_execution_times.rst.txt
@@ -5,7 +5,7 @@
 
 Computation times
 =================
-**00:00.696** total execution time for **vta_tutorials** files:
+**00:00.650** total execution time for **vta_tutorials** files:
 
-- **00:00.352**: :ref:`sphx_glr_vta_tutorials_matrix_multiply.py` (``matrix_multiply.py``)
-- **00:00.344**: :ref:`sphx_glr_vta_tutorials_vta_get_started.py` (``vta_get_started.py``)
+- **00:00.327**: :ref:`sphx_glr_vta_tutorials_matrix_multiply.py` (``matrix_multiply.py``)
+- **00:00.323**: :ref:`sphx_glr_vta_tutorials_vta_get_started.py` (``vta_get_started.py``)
diff --git a/docs/api/python/autotvm.html b/docs/api/python/autotvm.html
index 630ecdf..e5f1f5f 100644
--- a/docs/api/python/autotvm.html
+++ b/docs/api/python/autotvm.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
diff --git a/docs/api/python/contrib.html b/docs/api/python/contrib.html
index de8dcd7..2376ea8 100644
--- a/docs/api/python/contrib.html
+++ b/docs/api/python/contrib.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
diff --git a/docs/api/python/driver.html b/docs/api/python/driver.html
index 3648f0a..e8c223c 100644
--- a/docs/api/python/driver.html
+++ b/docs/api/python/driver.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
diff --git a/docs/api/python/error.html b/docs/api/python/error.html
index 41c6117..967ecac 100644
--- a/docs/api/python/error.html
+++ b/docs/api/python/error.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2 current"><a class="current reference internal" href="#">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
diff --git a/docs/api/python/graph_runtime.html b/docs/api/python/graph_runtime.html
index 82256a0..3f7d2f6 100644
--- a/docs/api/python/graph_runtime.html
+++ b/docs/api/python/graph_runtime.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
diff --git a/docs/api/python/index.html b/docs/api/python/index.html
index 01efb60..ed6b416 100644
--- a/docs/api/python/index.html
+++ b/docs/api/python/index.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
@@ -205,6 +206,7 @@
 <li class="toctree-l1"><a class="reference internal" href="ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l1"><a class="reference internal" href="error.html">tvm.error</a></li>
 <li class="toctree-l1"><a class="reference internal" href="ir.html">tvm.ir</a></li>
+<li class="toctree-l1"><a class="reference internal" href="ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l1"><a class="reference internal" href="target.html">tvm.target</a></li>
 <li class="toctree-l1"><a class="reference internal" href="tir.html">tvm.tir</a></li>
 <li class="toctree-l1"><a class="reference internal" href="tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
diff --git a/docs/api/python/ir.html b/docs/api/python/ir.html
index ee77726..62ad13e 100644
--- a/docs/api/python/ir.html
+++ b/docs/api/python/ir.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="error.html">tvm.error</a></li>
 <li class="toctree-l2 current"><a class="current reference internal" href="#">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
@@ -1378,6 +1379,261 @@ You can use convert to create a dict[Object-&gt; Object] into a Map</p>
 </dd></dl>
 
 </div>
+<div class="section" id="module-tvm.transform">
+<span id="tvm-transform"></span><h1>tvm.transform<a class="headerlink" href="#module-tvm.transform" title="Permalink to this headline">¶</a></h1>
+<p>Common pass infrastructure across IR variants.</p>
+<p><strong>Classes</strong></p>
+<table class="longtable docutils align-default">
+<colgroup>
+<col style="width: 10%" />
+<col style="width: 90%" />
+</colgroup>
+<tbody>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.transform.ModulePass" title="tvm.transform.ModulePass"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ModulePass</span></code></a></p></td>
+<td><p>A pass that works on tvm.IRModule.</p></td>
+</tr>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.transform.Pass" title="tvm.transform.Pass"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Pass</span></code></a></p></td>
+<td><p>The base class of all passes.</p></td>
+</tr>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.transform.PassContext" title="tvm.transform.PassContext"><code class="xref py py-obj docutils literal notranslate"><span class="pre">PassContext</span></code></a>([opt_level, fallback_device, …])</p></td>
+<td><p>The basis where a Relay optimization/analysis runs on.</p></td>
+</tr>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.transform.PassInfo" title="tvm.transform.PassInfo"><code class="xref py py-obj docutils literal notranslate"><span class="pre">PassInfo</span></code></a>(opt_level, name[, required])</p></td>
+<td><p>The class contains the meta data required by a pass.</p></td>
+</tr>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.transform.Sequential" title="tvm.transform.Sequential"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Sequential</span></code></a>([passes, opt_level, name, required])</p></td>
+<td><p>A pass that works on a sequence of pass objects.</p></td>
+</tr>
+</tbody>
+</table>
+<p><strong>Functions</strong></p>
+<table class="longtable docutils align-default">
+<colgroup>
+<col style="width: 10%" />
+<col style="width: 90%" />
+</colgroup>
+<tbody>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.transform.PrintIR" title="tvm.transform.PrintIR"><code class="xref py py-obj docutils literal notranslate"><span class="pre">PrintIR</span></code></a>([header, show_meta_data])</p></td>
+<td><p>A special trace pass that prints the header and IR.</p></td>
+</tr>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.transform.module_pass" title="tvm.transform.module_pass"><code class="xref py py-obj docutils literal notranslate"><span class="pre">module_pass</span></code></a>([pass_func, opt_level, name, …])</p></td>
+<td><p>Decorate a module pass.</p></td>
+</tr>
+</tbody>
+</table>
+<dl class="class">
+<dt id="tvm.transform.ModulePass">
+<em class="property">class </em><code class="sig-prename descclassname">tvm.transform.</code><code class="sig-name descname">ModulePass</code><a class="headerlink" href="#tvm.transform.ModulePass" title="Permalink to this definition">¶</a></dt>
+<dd><p>A pass that works on tvm.IRModule. Users don’t need to interact with
+this class directly. Instead, a module pass should be created through
+<cite>module_pass</cite>, because the design of the <cite>module_pass</cite> API is flexible
+enough to handle the creation of a module pass in different manners. In
+addition, all members of a module pass can be accessed from the base class.
+The same rule applies to FunctionPass as well.</p>
+</dd></dl>
+
+<dl class="class">
+<dt id="tvm.transform.Pass">
+<em class="property">class </em><code class="sig-prename descclassname">tvm.transform.</code><code class="sig-name descname">Pass</code><a class="headerlink" href="#tvm.transform.Pass" title="Permalink to this definition">¶</a></dt>
+<dd><p>The base class of all passes. All methods here are just simple wrappers
+that are implemented in the backend. They are defined for users to
+conveniently interact with the base class.</p>
+<p><strong>Attributes</strong></p>
+<table class="longtable docutils align-default">
+<colgroup>
+<col style="width: 10%" />
+<col style="width: 90%" />
+</colgroup>
+<tbody>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.transform.Pass.info" title="tvm.transform.Pass.info"><code class="xref py py-obj docutils literal notranslate"><span class="pre">info</span></code></a></p></td>
+<td><p>Get the pass meta.</p></td>
+</tr>
+</tbody>
+</table>
+<dl class="method">
+<dt id="tvm.transform.Pass.info">
+<em class="property">property </em><code class="sig-name descname">info</code><a class="headerlink" href="#tvm.transform.Pass.info" title="Permalink to this definition">¶</a></dt>
+<dd><p>Get the pass meta.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="tvm.transform.PassContext">
+<em class="property">class </em><code class="sig-prename descclassname">tvm.transform.</code><code class="sig-name descname">PassContext</code><span class="sig-paren">(</span><em class="sig-param">opt_level=2</em>, <em class="sig-param">fallback_device=cpu(0)</em>, <em class="sig-param">required_pass=None</em>, <em class="sig-param">disabled_pass=None</em>, <em class="sig-param">trace=None</em><span class="sig-paren">)</span><a class="headerlink" href="#tvm.transform.PassContext" title=" [...]
+<dd><p>The basis where a Relay optimization/analysis runs on.
+Each pass context contains a number of auxiliary information that is used
+to help an optimization pass. Such information includes the error reporter
+to record the errors of during the optimization, etc.</p>
+<dl class="simple">
+<dt>opt_level<span class="classifier">Optional[int]</span></dt><dd><p>The optimization level of this pass.</p>
+</dd>
+<dt>fallback_device<span class="classifier">Optional[Union[int, str, TVMContext]]</span></dt><dd><p>The fallback device type. It is also used as the default device for
+operators that are not annotated during heterogeneous execution.</p>
+</dd>
+<dt>required_pass<span class="classifier">Optional[Union[List[str], Set[str], Tuple[str]]]</span></dt><dd><p>The list of passes that are required by a certain pass.</p>
+</dd>
+<dt>disabled_pass<span class="classifier">Optional[Union[List[str], Set[str], Tuple[str]]]</span></dt><dd><p>The list of passes that are disabled.</p>
+</dd>
+</dl>
+<p><strong>Methods</strong></p>
+<table class="longtable docutils align-default">
+<colgroup>
+<col style="width: 10%" />
+<col style="width: 90%" />
+</colgroup>
+<tbody>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.transform.PassContext.current" title="tvm.transform.PassContext.current"><code class="xref py py-obj docutils literal notranslate"><span class="pre">current</span></code></a>()</p></td>
+<td><p>Return the current pass context.</p></td>
+</tr>
+</tbody>
+</table>
+<dl class="method">
+<dt id="tvm.transform.PassContext.current">
+<em class="property">static </em><code class="sig-name descname">current</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#tvm.transform.PassContext.current" title="Permalink to this definition">¶</a></dt>
+<dd><p>Return the current pass context.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="tvm.transform.PassInfo">
+<em class="property">class </em><code class="sig-prename descclassname">tvm.transform.</code><code class="sig-name descname">PassInfo</code><span class="sig-paren">(</span><em class="sig-param">opt_level</em>, <em class="sig-param">name</em>, <em class="sig-param">required=None</em><span class="sig-paren">)</span><a class="headerlink" href="#tvm.transform.PassInfo" title="Permalink to this definition">¶</a></dt>
+<dd><p>The class contains the meta data required by a pass. It is the
+container of information needed by running an optimization or analysis.
+This class can be extended by adding new members when more meta data is
+needed.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>opt_level</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.8)"><em>int</em></a>) – The optimization level of this pass.</p></li>
+<li><p><strong>name</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)"><em>str</em></a>) – The pass name.</p></li>
+<li><p><strong>required</strong> (<em>List</em><em>[</em><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)"><em>str</em></a><em>]</em>) – The list of passes that are required by a certain pass.</p></li>
+</ul>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="function">
+<dt id="tvm.transform.PrintIR">
+<code class="sig-prename descclassname">tvm.transform.</code><code class="sig-name descname">PrintIR</code><span class="sig-paren">(</span><em class="sig-param">header=''</em>, <em class="sig-param">show_meta_data=False</em><span class="sig-paren">)</span><a class="headerlink" href="#tvm.transform.PrintIR" title="Permalink to this definition">¶</a></dt>
+<dd><p>A special trace pass that prints the header and IR.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>header</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)"><em>str</em></a>) – The header to be displayed along with the dump.</p></li>
+<li><p><strong>show_meta_data</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)"><em>bool</em></a>) – A boolean flag to indicate if meta data should be printed.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p></p>
+</dd>
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>The pass</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="class">
+<dt id="tvm.transform.Sequential">
+<em class="property">class </em><code class="sig-prename descclassname">tvm.transform.</code><code class="sig-name descname">Sequential</code><span class="sig-paren">(</span><em class="sig-param">passes=None</em>, <em class="sig-param">opt_level=2</em>, <em class="sig-param">name='sequential'</em>, <em class="sig-param">required=None</em><span class="sig-paren">)</span><a class="headerlink" href="#tvm.transform.Sequential" title="Permalink to this definition">¶</a></dt>
+<dd><p>A pass that works on a sequence of pass objects. Multiple passes can be
+executed sequentially using this class.</p>
+<p>Some typical usage of the sequential pass are:
+1. Users provide a list of passes for optimization.
+2. Only an optimization level is provided so that the backend system has
+to glob all passes at this level and below to perform the optimizations.</p>
+<p>Note that users can also provide a series of passes that they don’t want to
+apply when running a sequential pass. Pass dependency will be resolved in
+the backend as well.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>passes</strong> (<em>Optional</em><em>[</em><em>List</em><em>[</em><a class="reference internal" href="#tvm.transform.Pass" title="tvm.transform.Pass"><em>Pass</em></a><em>]</em><em>]</em>) – A sequence of passes candidate for optimization.</p></li>
+<li><p><strong>opt_level</strong> (<em>Optional</em><em>[</em><a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.8)"><em>int</em></a><em>]</em>) – The optimization level of this sequential pass.</p></li>
+<li><p><strong>name</strong> (<em>Optional</em><em>[</em><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)"><em>str</em></a><em>]</em>) – The name of the sequential pass.</p></li>
+<li><p><strong>required</strong> (<em>Optional</em><em>[</em><em>List</em><em>[</em><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)"><em>str</em></a><em>]</em><em>]</em>) – The list of passes that the sequential pass is dependent on.</p></li>
+</ul>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="function">
+<dt id="tvm.transform.module_pass">
+<code class="sig-prename descclassname">tvm.transform.</code><code class="sig-name descname">module_pass</code><span class="sig-paren">(</span><em class="sig-param">pass_func=None</em>, <em class="sig-param">opt_level=None</em>, <em class="sig-param">name=None</em>, <em class="sig-param">required=None</em><span class="sig-paren">)</span><a class="headerlink" href="#tvm.transform.module_pass" title="Permalink to this definition">¶</a></dt>
+<dd><p>Decorate a module pass.</p>
+<p>This function returns a callback when pass_func is provided.
+Otherwise, it serves a decorator function.</p>
+<p>pass_func can also be a class type with a method transform_module.
+This function will create a decorated ModulePass using transform_module
+as the pass function.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>pass_func</strong> (<em>Optional</em><em>[</em><em>Callable</em><em>[</em><em>(</em><a class="reference internal" href="runtime.html#tvm.runtime.Module" title="tvm.runtime.Module"><em>Module</em></a><em>, </em><a class="reference internal" href="#tvm.transform.PassContext" title="tvm.transform.PassContext"><em>PassContext</em></a><em>) </em><em>-&gt;Module</em><em>]</em><em>]</em>) – The transformation function or class.</p></li>
+<li><p><strong>opt_level</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.8)"><em>int</em></a>) – The optimization level of this module pass.</p></li>
+<li><p><strong>name</strong> (<em>Optional</em><em>[</em><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)"><em>str</em></a><em>]</em>) – The name of the module pass. The name could be empty. In this case, the
+name of the optimization function will be used as the pass name.</p></li>
+<li><p><strong>required</strong> (<em>Optional</em><em>[</em><em>List</em><em>[</em><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)"><em>str</em></a><em>]</em><em>]</em>) – The list of passes that the module pass is dependent on.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><strong>create_module_pass</strong> – A decorator will be returned if pass_func is not provided,
+otherwise return the decorated result.
+The returned decorator has two behaviors depending on the input:
+A new ModulePass will be returned when we decorate a pass function.
+A new ModulePass class will be returned when we decorate a class type.</p>
+</dd>
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>Union[Callable, <a class="reference internal" href="#tvm.transform.ModulePass" title="tvm.transform.ModulePass">ModulePass</a>]</p>
+</dd>
+</dl>
+<p class="rubric">Examples</p>
+<p>The following code block decorates a module pass class.</p>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span class="nd">@relay.transform.module_pass</span>
+<span class="k">class</span> <span class="nc">CustomPipeline</span><span class="p">:</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">enable_fold</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">enable_fold</span> <span class="o">=</span> <span class="n">enable_fold</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">cse</span> <span class="o">=</span> <span class="n">relay</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">EliminateCommonSubexpr</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">const_fold</span> <span class="o">=</span> <span class="n">relay</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">FoldConstant</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">transform_module</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mod</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
+        <span class="n">mod</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cse</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="n">ctx</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">enable_fold</span><span class="p">:</span>
+            <span class="n">mod</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">const_fold</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="n">ctx</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">mod</span>
+
+<span class="c1"># create an instance of customized pipeline</span>
+<span class="n">pipeline</span> <span class="o">=</span> <span class="n">CustomPipeline</span><span class="p">(</span><span class="n">enable_fold</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
+<span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">pipeline</span><span class="p">,</span> <span class="n">transform</span><span class="o">.</span><span class="n">ModulePass</span><span class="p">)</span>
+<span class="c1"># run the pipeline.</span>
+<span class="n">output_module</span> <span class="o">=</span> <span class="n">pipeline</span><span class="p">(</span><span class="n">input_module</span><span class="p">)</span>
+</pre></div>
+</div>
+<p>The following code creates a module pass by decorating
+a user defined transform function.</p>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span class="nd">@relay.transform.module_pass</span><span class="p">(</span><span class="n">opt_level</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">transform</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
+    <span class="n">tp</span> <span class="o">=</span> <span class="n">relay</span><span class="o">.</span><span class="n">TensorType</span><span class="p">((</span><span class="mi">10</span><span class="p">,),</span> <span class="s2">&quot;float32&quot;</span><span class="p">)</span>
+    <span class="n">x</span> <span class="o">=</span> <span class="n">relay</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;x&quot;</span><span class="p">,</span> <span class="n">tp</span><span class="p">)</span>
+    <span class="n">gv</span> <span class="o">=</span> <span class="n">relay</span><span class="o">.</span><span class="n">GlobalVar</span><span class="p">(</span><span class="s2">&quot;var&quot;</span><span class="p">)</span>
+    <span class="n">func</span> <span class="o">=</span> <span class="n">relay</span><span class="o">.</span><span class="n">Function</span><span class="p">([</span><span class="n">x</span><span class="p">],</span> <span class="n">relay</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
+    <span class="n">new_mod</span> <span class="o">=</span> <span class="n">tvm</span><span class="o">.</span><span class="n">IRModule</span><span class="p">({</span><span class="n">gv</span><span class="p">:</span> <span class="n">func</span><span class="p">})</span>
+    <span class="n">new_mod</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">mod</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">new_mod</span>
+
+<span class="n">module_pass</span> <span class="o">=</span> <span class="n">transform</span>
+<span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">module_pass</span><span class="p">,</span> <span class="n">transform</span><span class="o">.</span><span class="n">ModulePass</span><span class="p">)</span>
+<span class="k">assert</span> <span class="n">module_pass</span><span class="o">.</span><span class="n">info</span><span class="o">.</span><span class="n">opt_level</span> <span class="o">==</span> <span class="mi">2</span>
+
+<span class="c1"># Given a module m, the optimization could be invoked as the follwoing:</span>
+<span class="n">updated_mod</span> <span class="o">=</span> <span class="n">module_pass</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
+<span class="c1"># Now a function abs should be added to the module m.</span>
+</pre></div>
+</div>
+</dd></dl>
+
+</div>
 
 
            </div>
diff --git a/docs/api/python/ndarray.html b/docs/api/python/ndarray.html
index d7a98bb..a25fa66 100644
--- a/docs/api/python/ndarray.html
+++ b/docs/api/python/ndarray.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2 current"><a class="current reference internal" href="#">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
diff --git a/docs/api/python/relay/analysis.html b/docs/api/python/relay/analysis.html
index 5d55772..cb82f4e 100644
--- a/docs/api/python/relay/analysis.html
+++ b/docs/api/python/relay/analysis.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="../ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
diff --git a/docs/api/python/relay/backend.html b/docs/api/python/relay/backend.html
index a8e7572..51bdcb8 100644
--- a/docs/api/python/relay/backend.html
+++ b/docs/api/python/relay/backend.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="../ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
diff --git a/docs/api/python/relay/frontend.html b/docs/api/python/relay/frontend.html
index 0c694d3..3bf8dd4 100644
--- a/docs/api/python/relay/frontend.html
+++ b/docs/api/python/relay/frontend.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="../ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
diff --git a/docs/api/python/relay/image.html b/docs/api/python/relay/image.html
index 8e78ce2..e63db9f 100644
--- a/docs/api/python/relay/image.html
+++ b/docs/api/python/relay/image.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="../ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
diff --git a/docs/api/python/relay/index.html b/docs/api/python/relay/index.html
index 60d2eec..fc548c7 100644
--- a/docs/api/python/relay/index.html
+++ b/docs/api/python/relay/index.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="../ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
@@ -471,205 +472,208 @@ compiler stack.</p>
 <tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.isinf" title="tvm.relay.isinf"><code class="xref py py-obj docutils literal notranslate"><span class="pre">isinf</span></code></a>(data)</p></td>
 <td><p>Compute element-wise infiniteness of data.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.layout_transform" title="tvm.relay.layout_transform"><code class="xref py py-obj docutils literal notranslate"><span class="pre">layout_transform</span></code></a>(data, src_layout, dst_layout)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.isnan" title="tvm.relay.isnan"><code class="xref py py-obj docutils literal notranslate"><span class="pre">isnan</span></code></a>(data)</p></td>
+<td><p>Check nan in input data element-wise.</p></td>
+</tr>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.layout_transform" title="tvm.relay.layout_transform"><code class="xref py py-obj docutils literal notranslate"><span class="pre">layout_transform</span></code></a>(data, src_layout, dst_layout)</p></td>
 <td><p>Transform the layout of a tensor</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.left_shift" title="tvm.relay.left_shift"><code class="xref py py-obj docutils literal notranslate"><span class="pre">left_shift</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.left_shift" title="tvm.relay.left_shift"><code class="xref py py-obj docutils literal notranslate"><span class="pre">left_shift</span></code></a>(lhs, rhs)</p></td>
 <td><p>Left shift with numpy-style broadcasting.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.less" title="tvm.relay.less"><code class="xref py py-obj docutils literal notranslate"><span class="pre">less</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.less" title="tvm.relay.less"><code class="xref py py-obj docutils literal notranslate"><span class="pre">less</span></code></a>(lhs, rhs)</p></td>
 <td><p>Broadcasted elementwise test for (lhs &lt; rhs).</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.less_equal" title="tvm.relay.less_equal"><code class="xref py py-obj docutils literal notranslate"><span class="pre">less_equal</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.less_equal" title="tvm.relay.less_equal"><code class="xref py py-obj docutils literal notranslate"><span class="pre">less_equal</span></code></a>(lhs, rhs)</p></td>
 <td><p>Broadcasted elementwise test for (lhs &lt;= rhs).</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.load_param_dict" title="tvm.relay.load_param_dict"><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_param_dict</span></code></a>(param_bytes)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.load_param_dict" title="tvm.relay.load_param_dict"><code class="xref py py-obj docutils literal notranslate"><span class="pre">load_param_dict</span></code></a>(param_bytes)</p></td>
 <td><p>Load parameter dictionary to binary bytes.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.log" title="tvm.relay.log"><code class="xref py py-obj docutils literal notranslate"><span class="pre">log</span></code></a>(data)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.log" title="tvm.relay.log"><code class="xref py py-obj docutils literal notranslate"><span class="pre">log</span></code></a>(data)</p></td>
 <td><p>Compute elementwise log of data.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.logical_and" title="tvm.relay.logical_and"><code class="xref py py-obj docutils literal notranslate"><span class="pre">logical_and</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.logical_and" title="tvm.relay.logical_and"><code class="xref py py-obj docutils literal notranslate"><span class="pre">logical_and</span></code></a>(lhs, rhs)</p></td>
 <td><p>logical AND with numpy-style broadcasting.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.logical_not" title="tvm.relay.logical_not"><code class="xref py py-obj docutils literal notranslate"><span class="pre">logical_not</span></code></a>(data)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.logical_not" title="tvm.relay.logical_not"><code class="xref py py-obj docutils literal notranslate"><span class="pre">logical_not</span></code></a>(data)</p></td>
 <td><p>Compute element-wise logical not of data.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.logical_or" title="tvm.relay.logical_or"><code class="xref py py-obj docutils literal notranslate"><span class="pre">logical_or</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.logical_or" title="tvm.relay.logical_or"><code class="xref py py-obj docutils literal notranslate"><span class="pre">logical_or</span></code></a>(lhs, rhs)</p></td>
 <td><p>logical OR with numpy-style broadcasting.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.max" title="tvm.relay.max"><code class="xref py py-obj docutils literal notranslate"><span class="pre">max</span></code></a>(data[, axis, keepdims, exclude])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.max" title="tvm.relay.max"><code class="xref py py-obj docutils literal notranslate"><span class="pre">max</span></code></a>(data[, axis, keepdims, exclude])</p></td>
 <td><p>Computes the max of array elements over given axes.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.maximum" title="tvm.relay.maximum"><code class="xref py py-obj docutils literal notranslate"><span class="pre">maximum</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.maximum" title="tvm.relay.maximum"><code class="xref py py-obj docutils literal notranslate"><span class="pre">maximum</span></code></a>(lhs, rhs)</p></td>
 <td><p>Maximum with numpy-style broadcasting.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.mean" title="tvm.relay.mean"><code class="xref py py-obj docutils literal notranslate"><span class="pre">mean</span></code></a>(data[, axis, keepdims, exclude])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.mean" title="tvm.relay.mean"><code class="xref py py-obj docutils literal notranslate"><span class="pre">mean</span></code></a>(data[, axis, keepdims, exclude])</p></td>
 <td><p>Computes the mean of array elements over given axes.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.mean_std" title="tvm.relay.mean_std"><code class="xref py py-obj docutils literal notranslate"><span class="pre">mean_std</span></code></a>(data[, axis, keepdims, exclude])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.mean_std" title="tvm.relay.mean_std"><code class="xref py py-obj docutils literal notranslate"><span class="pre">mean_std</span></code></a>(data[, axis, keepdims, exclude])</p></td>
 <td><p>Computes the mean and standard deviation of data over given axes.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.mean_variance" title="tvm.relay.mean_variance"><code class="xref py py-obj docutils literal notranslate"><span class="pre">mean_variance</span></code></a>(data[, axis, keepdims, exclude])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.mean_variance" title="tvm.relay.mean_variance"><code class="xref py py-obj docutils literal notranslate"><span class="pre">mean_variance</span></code></a>(data[, axis, keepdims, exclude])</p></td>
 <td><p>Computes the mean and variance of data over given axes.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.min" title="tvm.relay.min"><code class="xref py py-obj docutils literal notranslate"><span class="pre">min</span></code></a>(data[, axis, keepdims, exclude])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.min" title="tvm.relay.min"><code class="xref py py-obj docutils literal notranslate"><span class="pre">min</span></code></a>(data[, axis, keepdims, exclude])</p></td>
 <td><p>Computes the min of array elements over given axes.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.minimum" title="tvm.relay.minimum"><code class="xref py py-obj docutils literal notranslate"><span class="pre">minimum</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.minimum" title="tvm.relay.minimum"><code class="xref py py-obj docutils literal notranslate"><span class="pre">minimum</span></code></a>(lhs, rhs)</p></td>
 <td><p>Minimum with numpy-style broadcasting.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.mod" title="tvm.relay.mod"><code class="xref py py-obj docutils literal notranslate"><span class="pre">mod</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.mod" title="tvm.relay.mod"><code class="xref py py-obj docutils literal notranslate"><span class="pre">mod</span></code></a>(lhs, rhs)</p></td>
 <td><p>Mod with numpy-style broadcasting.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.multiply" title="tvm.relay.multiply"><code class="xref py py-obj docutils literal notranslate"><span class="pre">multiply</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.multiply" title="tvm.relay.multiply"><code class="xref py py-obj docutils literal notranslate"><span class="pre">multiply</span></code></a>(lhs, rhs)</p></td>
 <td><p>Multiplication with numpy-style broadcasting.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.ndarray_size" title="tvm.relay.ndarray_size"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ndarray_size</span></code></a>(data[, dtype])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.ndarray_size" title="tvm.relay.ndarray_size"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ndarray_size</span></code></a>(data[, dtype])</p></td>
 <td><p>Get number of elements of input tensor.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.negative" title="tvm.relay.negative"><code class="xref py py-obj docutils literal notranslate"><span class="pre">negative</span></code></a>(data)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.negative" title="tvm.relay.negative"><code class="xref py py-obj docutils literal notranslate"><span class="pre">negative</span></code></a>(data)</p></td>
 <td><p>Compute element-wise negative of data.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.not_equal" title="tvm.relay.not_equal"><code class="xref py py-obj docutils literal notranslate"><span class="pre">not_equal</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.not_equal" title="tvm.relay.not_equal"><code class="xref py py-obj docutils literal notranslate"><span class="pre">not_equal</span></code></a>(lhs, rhs)</p></td>
 <td><p>Broadcasted elementwise test for (lhs != rhs).</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.one_hot" title="tvm.relay.one_hot"><code class="xref py py-obj docutils literal notranslate"><span class="pre">one_hot</span></code></a>(indices, on_value, off_value, depth, …)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.one_hot" title="tvm.relay.one_hot"><code class="xref py py-obj docutils literal notranslate"><span class="pre">one_hot</span></code></a>(indices, on_value, off_value, depth, …)</p></td>
 <td><p>Returns a one-hot tensor where the locations repsented by indices take value on_value, other locations take value off_value.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.ones" title="tvm.relay.ones"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ones</span></code></a>(shape, dtype)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.ones" title="tvm.relay.ones"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ones</span></code></a>(shape, dtype)</p></td>
 <td><p>Fill array with ones.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.ones_like" title="tvm.relay.ones_like"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ones_like</span></code></a>(data)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.ones_like" title="tvm.relay.ones_like"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ones_like</span></code></a>(data)</p></td>
 <td><p>Returns an array of ones, with same type and shape as the input.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.optimize" title="tvm.relay.optimize"><code class="xref py py-obj docutils literal notranslate"><span class="pre">optimize</span></code></a>(mod[, target, params])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.optimize" title="tvm.relay.optimize"><code class="xref py py-obj docutils literal notranslate"><span class="pre">optimize</span></code></a>(mod[, target, params])</p></td>
 <td><p>Helper function that optimizes a Relay module.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.power" title="tvm.relay.power"><code class="xref py py-obj docutils literal notranslate"><span class="pre">power</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.power" title="tvm.relay.power"><code class="xref py py-obj docutils literal notranslate"><span class="pre">power</span></code></a>(lhs, rhs)</p></td>
 <td><p>Power with numpy-style broadcasting.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.prod" title="tvm.relay.prod"><code class="xref py py-obj docutils literal notranslate"><span class="pre">prod</span></code></a>(data[, axis, keepdims, exclude])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.prod" title="tvm.relay.prod"><code class="xref py py-obj docutils literal notranslate"><span class="pre">prod</span></code></a>(data[, axis, keepdims, exclude])</p></td>
 <td><p>Computes the products of array elements over given axes.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.reinterpret" title="tvm.relay.reinterpret"><code class="xref py py-obj docutils literal notranslate"><span class="pre">reinterpret</span></code></a>(data, dtype)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.reinterpret" title="tvm.relay.reinterpret"><code class="xref py py-obj docutils literal notranslate"><span class="pre">reinterpret</span></code></a>(data, dtype)</p></td>
 <td><p>Reinterpret input tensor to data type.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.repeat" title="tvm.relay.repeat"><code class="xref py py-obj docutils literal notranslate"><span class="pre">repeat</span></code></a>(data, repeats, axis)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.repeat" title="tvm.relay.repeat"><code class="xref py py-obj docutils literal notranslate"><span class="pre">repeat</span></code></a>(data, repeats, axis)</p></td>
 <td><p>Repeats elements of an array.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.reshape" title="tvm.relay.reshape"><code class="xref py py-obj docutils literal notranslate"><span class="pre">reshape</span></code></a>(data, newshape)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.reshape" title="tvm.relay.reshape"><code class="xref py py-obj docutils literal notranslate"><span class="pre">reshape</span></code></a>(data, newshape)</p></td>
 <td><p>Reshape the input array.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.reshape_like" title="tvm.relay.reshape_like"><code class="xref py py-obj docutils literal notranslate"><span class="pre">reshape_like</span></code></a>(data, shape_like)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.reshape_like" title="tvm.relay.reshape_like"><code class="xref py py-obj docutils literal notranslate"><span class="pre">reshape_like</span></code></a>(data, shape_like)</p></td>
 <td><p>Reshapes the input array by the size of another array.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.reverse" title="tvm.relay.reverse"><code class="xref py py-obj docutils literal notranslate"><span class="pre">reverse</span></code></a>(data, axis)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.reverse" title="tvm.relay.reverse"><code class="xref py py-obj docutils literal notranslate"><span class="pre">reverse</span></code></a>(data, axis)</p></td>
 <td><p>Reverses the order of elements along given axis while preserving array shape.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.reverse_reshape" title="tvm.relay.reverse_reshape"><code class="xref py py-obj docutils literal notranslate"><span class="pre">reverse_reshape</span></code></a>(data, newshape)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.reverse_reshape" title="tvm.relay.reverse_reshape"><code class="xref py py-obj docutils literal notranslate"><span class="pre">reverse_reshape</span></code></a>(data, newshape)</p></td>
 <td><p>Reshapes the input array where the special values are inferred from right to left.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.right_shift" title="tvm.relay.right_shift"><code class="xref py py-obj docutils literal notranslate"><span class="pre">right_shift</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.right_shift" title="tvm.relay.right_shift"><code class="xref py py-obj docutils literal notranslate"><span class="pre">right_shift</span></code></a>(lhs, rhs)</p></td>
 <td><p>Right shift with numpy-style broadcasting.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.round" title="tvm.relay.round"><code class="xref py py-obj docutils literal notranslate"><span class="pre">round</span></code></a>(data)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.round" title="tvm.relay.round"><code class="xref py py-obj docutils literal notranslate"><span class="pre">round</span></code></a>(data)</p></td>
 <td><p>Compute element-wise round of data.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.rsqrt" title="tvm.relay.rsqrt"><code class="xref py py-obj docutils literal notranslate"><span class="pre">rsqrt</span></code></a>(data)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.rsqrt" title="tvm.relay.rsqrt"><code class="xref py py-obj docutils literal notranslate"><span class="pre">rsqrt</span></code></a>(data)</p></td>
 <td><p>Compute elementwise rsqrt of data.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.save_param_dict" title="tvm.relay.save_param_dict"><code class="xref py py-obj docutils literal notranslate"><span class="pre">save_param_dict</span></code></a>(params)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.save_param_dict" title="tvm.relay.save_param_dict"><code class="xref py py-obj docutils literal notranslate"><span class="pre">save_param_dict</span></code></a>(params)</p></td>
 <td><p>Save parameter dictionary to binary bytes.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.scalar_type" title="tvm.relay.scalar_type"><code class="xref py py-obj docutils literal notranslate"><span class="pre">scalar_type</span></code></a>(dtype)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.scalar_type" title="tvm.relay.scalar_type"><code class="xref py py-obj docutils literal notranslate"><span class="pre">scalar_type</span></code></a>(dtype)</p></td>
 <td><p>Creates a scalar type.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.sequence_mask" title="tvm.relay.sequence_mask"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sequence_mask</span></code></a>(data, valid_length[, …])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.sequence_mask" title="tvm.relay.sequence_mask"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sequence_mask</span></code></a>(data, valid_length[, …])</p></td>
 <td><p>Sets all elements outside the expected length of the sequence to a constant value.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.setrecursionlimit" title="tvm.relay.setrecursionlimit"><code class="xref py py-obj docutils literal notranslate"><span class="pre">setrecursionlimit</span></code></a>(n)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.setrecursionlimit" title="tvm.relay.setrecursionlimit"><code class="xref py py-obj docutils literal notranslate"><span class="pre">setrecursionlimit</span></code></a>(n)</p></td>
 <td><p>Set the maximum depth of the Python interpreter stack to n.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.shape_of" title="tvm.relay.shape_of"><code class="xref py py-obj docutils literal notranslate"><span class="pre">shape_of</span></code></a>(data[, dtype])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.shape_of" title="tvm.relay.shape_of"><code class="xref py py-obj docutils literal notranslate"><span class="pre">shape_of</span></code></a>(data[, dtype])</p></td>
 <td><p>Get shape of a tensor.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.sigmoid" title="tvm.relay.sigmoid"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sigmoid</span></code></a>(data)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.sigmoid" title="tvm.relay.sigmoid"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sigmoid</span></code></a>(data)</p></td>
 <td><p>Compute elementwise sigmoid of data.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.sign" title="tvm.relay.sign"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sign</span></code></a>(data)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.sign" title="tvm.relay.sign"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sign</span></code></a>(data)</p></td>
 <td><p>Compute element-wise absolute of data.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.sin" title="tvm.relay.sin"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sin</span></code></a>(data)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.sin" title="tvm.relay.sin"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sin</span></code></a>(data)</p></td>
 <td><p>Compute elementwise sin of data.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.slice_like" title="tvm.relay.slice_like"><code class="xref py py-obj docutils literal notranslate"><span class="pre">slice_like</span></code></a>(data, shape_like[, axes])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.slice_like" title="tvm.relay.slice_like"><code class="xref py py-obj docutils literal notranslate"><span class="pre">slice_like</span></code></a>(data, shape_like[, axes])</p></td>
 <td><p>Slice the first input with respect to the second input.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.split" title="tvm.relay.split"><code class="xref py py-obj docutils literal notranslate"><span class="pre">split</span></code></a>(data, indices_or_sections[, axis])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.split" title="tvm.relay.split"><code class="xref py py-obj docutils literal notranslate"><span class="pre">split</span></code></a>(data, indices_or_sections[, axis])</p></td>
 <td><p>Split input tensor along axis by sections or indices.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.sqrt" title="tvm.relay.sqrt"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sqrt</span></code></a>(data)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.sqrt" title="tvm.relay.sqrt"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sqrt</span></code></a>(data)</p></td>
 <td><p>Compute elementwise sqrt of data.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.squeeze" title="tvm.relay.squeeze"><code class="xref py py-obj docutils literal notranslate"><span class="pre">squeeze</span></code></a>(data[, axis])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.squeeze" title="tvm.relay.squeeze"><code class="xref py py-obj docutils literal notranslate"><span class="pre">squeeze</span></code></a>(data[, axis])</p></td>
 <td><p>Squeeze axes in the array.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.stack" title="tvm.relay.stack"><code class="xref py py-obj docutils literal notranslate"><span class="pre">stack</span></code></a>(data, axis)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.stack" title="tvm.relay.stack"><code class="xref py py-obj docutils literal notranslate"><span class="pre">stack</span></code></a>(data, axis)</p></td>
 <td><p>Join a sequence of arrays along a new axis.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.std" title="tvm.relay.std"><code class="xref py py-obj docutils literal notranslate"><span class="pre">std</span></code></a>(data[, axis, keepdims, exclude])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.std" title="tvm.relay.std"><code class="xref py py-obj docutils literal notranslate"><span class="pre">std</span></code></a>(data[, axis, keepdims, exclude])</p></td>
 <td><p>Computes the standard deviation of data over given axes.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.strided_set" title="tvm.relay.strided_set"><code class="xref py py-obj docutils literal notranslate"><span class="pre">strided_set</span></code></a>(data, v, begin, end[, strides])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.strided_set" title="tvm.relay.strided_set"><code class="xref py py-obj docutils literal notranslate"><span class="pre">strided_set</span></code></a>(data, v, begin, end[, strides])</p></td>
 <td><p>Strided set of an array.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.strided_slice" title="tvm.relay.strided_slice"><code class="xref py py-obj docutils literal notranslate"><span class="pre">strided_slice</span></code></a>(data, begin, end[, strides])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.strided_slice" title="tvm.relay.strided_slice"><code class="xref py py-obj docutils literal notranslate"><span class="pre">strided_slice</span></code></a>(data, begin, end[, strides])</p></td>
 <td><p>Strided slice of an array.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.subtract" title="tvm.relay.subtract"><code class="xref py py-obj docutils literal notranslate"><span class="pre">subtract</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.subtract" title="tvm.relay.subtract"><code class="xref py py-obj docutils literal notranslate"><span class="pre">subtract</span></code></a>(lhs, rhs)</p></td>
 <td><p>Subtraction with numpy-style broadcasting.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.sum" title="tvm.relay.sum"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sum</span></code></a>(data[, axis, keepdims, exclude])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.sum" title="tvm.relay.sum"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sum</span></code></a>(data[, axis, keepdims, exclude])</p></td>
 <td><p>Computes the sum of array elements over given axes.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.take" title="tvm.relay.take"><code class="xref py py-obj docutils literal notranslate"><span class="pre">take</span></code></a>(data, indices[, axis, mode])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.take" title="tvm.relay.take"><code class="xref py py-obj docutils literal notranslate"><span class="pre">take</span></code></a>(data, indices[, axis, mode])</p></td>
 <td><p>Take elements from an array along an axis.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.tan" title="tvm.relay.tan"><code class="xref py py-obj docutils literal notranslate"><span class="pre">tan</span></code></a>(data)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.tan" title="tvm.relay.tan"><code class="xref py py-obj docutils literal notranslate"><span class="pre">tan</span></code></a>(data)</p></td>
 <td><p>Compute elementwise tan of data.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.tanh" title="tvm.relay.tanh"><code class="xref py py-obj docutils literal notranslate"><span class="pre">tanh</span></code></a>(data)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.tanh" title="tvm.relay.tanh"><code class="xref py py-obj docutils literal notranslate"><span class="pre">tanh</span></code></a>(data)</p></td>
 <td><p>Compute element-wise tanh of data.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.tile" title="tvm.relay.tile"><code class="xref py py-obj docutils literal notranslate"><span class="pre">tile</span></code></a>(data, reps)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.tile" title="tvm.relay.tile"><code class="xref py py-obj docutils literal notranslate"><span class="pre">tile</span></code></a>(data, reps)</p></td>
 <td><p>Repeats the whole array multiple times.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.topk" title="tvm.relay.topk"><code class="xref py py-obj docutils literal notranslate"><span class="pre">topk</span></code></a>(data[, k, axis, ret_type, is_ascend, dtype])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.topk" title="tvm.relay.topk"><code class="xref py py-obj docutils literal notranslate"><span class="pre">topk</span></code></a>(data[, k, axis, ret_type, is_ascend, dtype])</p></td>
 <td><p>Get the top k elements in an input tensor along the given axis.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.transpose" title="tvm.relay.transpose"><code class="xref py py-obj docutils literal notranslate"><span class="pre">transpose</span></code></a>(data[, axes])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.transpose" title="tvm.relay.transpose"><code class="xref py py-obj docutils literal notranslate"><span class="pre">transpose</span></code></a>(data[, axes])</p></td>
 <td><p>Permutes the dimensions of an array.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.trunc" title="tvm.relay.trunc"><code class="xref py py-obj docutils literal notranslate"><span class="pre">trunc</span></code></a>(data)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.trunc" title="tvm.relay.trunc"><code class="xref py py-obj docutils literal notranslate"><span class="pre">trunc</span></code></a>(data)</p></td>
 <td><p>Compute element-wise trunc of data.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.unravel_index" title="tvm.relay.unravel_index"><code class="xref py py-obj docutils literal notranslate"><span class="pre">unravel_index</span></code></a>(indices, shape)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.unravel_index" title="tvm.relay.unravel_index"><code class="xref py py-obj docutils literal notranslate"><span class="pre">unravel_index</span></code></a>(indices, shape)</p></td>
 <td><p>Convert a flat index or array of flat indices into a tuple of coordinate arrays.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.var" title="tvm.relay.var"><code class="xref py py-obj docutils literal notranslate"><span class="pre">var</span></code></a>(name_hint[, type_annotation, shape, dtype])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.var" title="tvm.relay.var"><code class="xref py py-obj docutils literal notranslate"><span class="pre">var</span></code></a>(name_hint[, type_annotation, shape, dtype])</p></td>
 <td><p>Create a new tvm.relay.Var.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.variance" title="tvm.relay.variance"><code class="xref py py-obj docutils literal notranslate"><span class="pre">variance</span></code></a>(data[, axis, keepdims, exclude])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.variance" title="tvm.relay.variance"><code class="xref py py-obj docutils literal notranslate"><span class="pre">variance</span></code></a>(data[, axis, keepdims, exclude])</p></td>
 <td><p>Computes the variance of data over given axes.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.where" title="tvm.relay.where"><code class="xref py py-obj docutils literal notranslate"><span class="pre">where</span></code></a>(condition, x, y)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.where" title="tvm.relay.where"><code class="xref py py-obj docutils literal notranslate"><span class="pre">where</span></code></a>(condition, x, y)</p></td>
 <td><p>Selecting elements from either x or y depending on the value of the condition.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.zeros" title="tvm.relay.zeros"><code class="xref py py-obj docutils literal notranslate"><span class="pre">zeros</span></code></a>(shape, dtype)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.zeros" title="tvm.relay.zeros"><code class="xref py py-obj docutils literal notranslate"><span class="pre">zeros</span></code></a>(shape, dtype)</p></td>
 <td><p>Fill array with zeros.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.zeros_like" title="tvm.relay.zeros_like"><code class="xref py py-obj docutils literal notranslate"><span class="pre">zeros_like</span></code></a>(data)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.zeros_like" title="tvm.relay.zeros_like"><code class="xref py py-obj docutils literal notranslate"><span class="pre">zeros_like</span></code></a>(data)</p></td>
 <td><p>Returns an array of zeros, with same type and shape as the input.</p></td>
 </tr>
 </tbody>
@@ -787,14 +791,14 @@ following:</p>
 operators without specified device during heterogeneous execution.</p></li>
 <li><p><strong>required_pass</strong> (<em>set of str</em><em>, </em><em>optional</em>) – Optimization passes that are required regardless of optimization level.</p></li>
 <li><p><strong>disabled_pass</strong> (<em>set of str</em><em>, </em><em>optional</em>) – Optimization passes to be disabled during optimization.</p></li>
-<li><p><strong>trace</strong> (<em>Callable</em><em>[</em><em>[</em><a class="reference internal" href="../ir.html#tvm.ir.IRModule" title="tvm.ir.IRModule"><em>IRModule</em></a><em>, </em><a class="reference internal" href="transform.html#tvm.relay.transform.PassInfo" title="tvm.relay.transform.PassInfo"><em>PassInfo</em></a><em>, </em><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)"><em>bool</em></a><em>]</em><em>, </em> [...]
+<li><p><strong>trace</strong> (<em>Callable</em><em>[</em><em>[</em><a class="reference internal" href="../ir.html#tvm.ir.IRModule" title="tvm.ir.IRModule"><em>IRModule</em></a><em>, </em><a class="reference internal" href="../ir.html#tvm.transform.PassInfo" title="tvm.transform.PassInfo"><em>PassInfo</em></a><em>, </em><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)"><em>bool</em></a><em>]</em><em>, </em><a class="refere [...]
 </ul>
 </dd>
 <dt class="field-even">Returns</dt>
 <dd class="field-even"><p><strong>pass_context</strong> – The pass context for optimizations.</p>
 </dd>
 <dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><a class="reference internal" href="transform.html#tvm.relay.transform.PassContext" title="tvm.relay.transform.PassContext">PassContext</a></p>
+<dd class="field-odd"><p><a class="reference internal" href="../ir.html#tvm.transform.PassContext" title="tvm.transform.PassContext">PassContext</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -1458,53 +1462,6 @@ scope(let, if) expression easily.</p>
 
 </dd></dl>
 
-<dl class="function">
-<dt id="tvm.relay.save_param_dict">
-<code class="sig-prename descclassname">tvm.relay.</code><code class="sig-name descname">save_param_dict</code><span class="sig-paren">(</span><em class="sig-param">params</em><span class="sig-paren">)</span><a class="headerlink" href="#tvm.relay.save_param_dict" title="Permalink to this definition">¶</a></dt>
-<dd><p>Save parameter dictionary to binary bytes.</p>
-<p>The result binary bytes can be loaded by the
-GraphModule with API “load_params”.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>params</strong> (<em>dict of str to NDArray</em>) – The parameter dictionary.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>param_bytes</strong> – Serialized parameters.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#bytearray" title="(in Python v3.8)">bytearray</a></p>
-</dd>
-</dl>
-<p class="rubric">Examples</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span class="c1"># compile and save the modules to file.</span>
-<span class="n">graph</span><span class="p">,</span> <span class="n">lib</span><span class="p">,</span> <span class="n">params</span> <span class="o">=</span> <span class="n">tvm</span><span class="o">.</span><span class="n">relay</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="n">target</span><span class="p">,</span> <span class="n">para [...]
-<span class="n">module</span> <span class="o">=</span> <span class="n">graph_runtime</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="n">lib</span><span class="p">,</span> <span class="n">tvm</span><span class="o">.</span><span class="n">gpu</span><span class="p">(</span><span class="mi">0</span><span class="p">))</span>
-<span class="c1"># save the parameters as byte array</span>
-<span class="n">param_bytes</span> <span class="o">=</span> <span class="n">tvm</span><span class="o">.</span><span class="n">relay</span><span class="o">.</span><span class="n">save_param_dict</span><span class="p">(</span><span class="n">params</span><span class="p">)</span>
-<span class="c1"># We can serialize the param_bytes and load it back later.</span>
-<span class="c1"># Pass in byte array to module to directly set parameters</span>
-<span class="n">module</span><span class="o">.</span><span class="n">load_params</span><span class="p">(</span><span class="n">param_bytes</span><span class="p">)</span>
-</pre></div>
-</div>
-</dd></dl>
-
-<dl class="function">
-<dt id="tvm.relay.load_param_dict">
-<code class="sig-prename descclassname">tvm.relay.</code><code class="sig-name descname">load_param_dict</code><span class="sig-paren">(</span><em class="sig-param">param_bytes</em><span class="sig-paren">)</span><a class="headerlink" href="#tvm.relay.load_param_dict" title="Permalink to this definition">¶</a></dt>
-<dd><p>Load parameter dictionary to binary bytes.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>param_bytes</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#bytearray" title="(in Python v3.8)"><em>bytearray</em></a>) – Serialized parameters.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>params</strong> – The parameter dictionary.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>dict of str to NDArray</p>
-</dd>
-</dl>
-</dd></dl>
-
 <dl class="class">
 <dt id="tvm.relay.TupleWrapper">
 <em class="property">class </em><code class="sig-prename descclassname">tvm.relay.</code><code class="sig-name descname">TupleWrapper</code><span class="sig-paren">(</span><em class="sig-param">tuple_value</em>, <em class="sig-param">size</em><span class="sig-paren">)</span><a class="headerlink" href="#tvm.relay.TupleWrapper" title="Permalink to this definition">¶</a></dt>
@@ -2445,6 +2402,23 @@ defined by indices.</p>
 </dd></dl>
 
 <dl class="function">
+<dt id="tvm.relay.isnan">
+<code class="sig-prename descclassname">tvm.relay.</code><code class="sig-name descname">isnan</code><span class="sig-paren">(</span><em class="sig-param">data</em><span class="sig-paren">)</span><a class="headerlink" href="#tvm.relay.isnan" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check nan in input data element-wise.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>data</strong> (<em>relay.Expr</em>) – The input data</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><strong>result</strong> – The computed result.</p>
+</dd>
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>relay.Expr</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="function">
 <dt id="tvm.relay.layout_transform">
 <code class="sig-prename descclassname">tvm.relay.</code><code class="sig-name descname">layout_transform</code><span class="sig-paren">(</span><em class="sig-param">data</em>, <em class="sig-param">src_layout</em>, <em class="sig-param">dst_layout</em><span class="sig-paren">)</span><a class="headerlink" href="#tvm.relay.layout_transform" title="Permalink to this definition">¶</a></dt>
 <dd><p>Transform the layout of a tensor</p>
@@ -3871,6 +3845,53 @@ element from <cite>x</cite> will be picked.</p></li>
 </dl>
 </dd></dl>
 
+<dl class="function">
+<dt id="tvm.relay.save_param_dict">
+<code class="sig-prename descclassname">tvm.relay.</code><code class="sig-name descname">save_param_dict</code><span class="sig-paren">(</span><em class="sig-param">params</em><span class="sig-paren">)</span><a class="headerlink" href="#tvm.relay.save_param_dict" title="Permalink to this definition">¶</a></dt>
+<dd><p>Save parameter dictionary to binary bytes.</p>
+<p>The result binary bytes can be loaded by the
+GraphModule with API “load_params”.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>params</strong> (<em>dict of str to NDArray</em>) – The parameter dictionary.</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><strong>param_bytes</strong> – Serialized parameters.</p>
+</dd>
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#bytearray" title="(in Python v3.8)">bytearray</a></p>
+</dd>
+</dl>
+<p class="rubric">Examples</p>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span class="c1"># compile and save the modules to file.</span>
+<span class="n">graph</span><span class="p">,</span> <span class="n">lib</span><span class="p">,</span> <span class="n">params</span> <span class="o">=</span> <span class="n">tvm</span><span class="o">.</span><span class="n">relay</span><span class="o">.</span><span class="n">build</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="n">target</span><span class="p">,</span> <span class="n">para [...]
+<span class="n">module</span> <span class="o">=</span> <span class="n">graph_runtime</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">graph</span><span class="p">,</span> <span class="n">lib</span><span class="p">,</span> <span class="n">tvm</span><span class="o">.</span><span class="n">gpu</span><span class="p">(</span><span class="mi">0</span><span class="p">))</span>
+<span class="c1"># save the parameters as byte array</span>
+<span class="n">param_bytes</span> <span class="o">=</span> <span class="n">tvm</span><span class="o">.</span><span class="n">relay</span><span class="o">.</span><span class="n">save_param_dict</span><span class="p">(</span><span class="n">params</span><span class="p">)</span>
+<span class="c1"># We can serialize the param_bytes and load it back later.</span>
+<span class="c1"># Pass in byte array to module to directly set parameters</span>
+<span class="n">module</span><span class="o">.</span><span class="n">load_params</span><span class="p">(</span><span class="n">param_bytes</span><span class="p">)</span>
+</pre></div>
+</div>
+</dd></dl>
+
+<dl class="function">
+<dt id="tvm.relay.load_param_dict">
+<code class="sig-prename descclassname">tvm.relay.</code><code class="sig-name descname">load_param_dict</code><span class="sig-paren">(</span><em class="sig-param">param_bytes</em><span class="sig-paren">)</span><a class="headerlink" href="#tvm.relay.load_param_dict" title="Permalink to this definition">¶</a></dt>
+<dd><p>Load parameter dictionary to binary bytes.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>param_bytes</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#bytearray" title="(in Python v3.8)"><em>bytearray</em></a>) – Serialized parameters.</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><strong>params</strong> – The parameter dictionary.</p>
+</dd>
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>dict of str to NDArray</p>
+</dd>
+</dl>
+</dd></dl>
+
 </div>
 
 
diff --git a/docs/api/python/relay/nn.html b/docs/api/python/relay/nn.html
index a4c3764..0e53ab0 100644
--- a/docs/api/python/relay/nn.html
+++ b/docs/api/python/relay/nn.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="../ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
diff --git a/docs/api/python/relay/op.html b/docs/api/python/relay/op.html
index 8c433e3..3899986 100644
--- a/docs/api/python/relay/op.html
+++ b/docs/api/python/relay/op.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="../ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
@@ -369,208 +370,211 @@
 <tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.isinf" title="tvm.relay.op.isinf"><code class="xref py py-obj docutils literal notranslate"><span class="pre">isinf</span></code></a>(data)</p></td>
 <td><p>Compute element-wise infiniteness of data.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.layout_transform" title="tvm.relay.op.layout_transform"><code class="xref py py-obj docutils literal notranslate"><span class="pre">layout_transform</span></code></a>(data, src_layout, dst_layout)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.isnan" title="tvm.relay.op.isnan"><code class="xref py py-obj docutils literal notranslate"><span class="pre">isnan</span></code></a>(data)</p></td>
+<td><p>Check nan in input data element-wise.</p></td>
+</tr>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.layout_transform" title="tvm.relay.op.layout_transform"><code class="xref py py-obj docutils literal notranslate"><span class="pre">layout_transform</span></code></a>(data, src_layout, dst_layout)</p></td>
 <td><p>Transform the layout of a tensor</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.left_shift" title="tvm.relay.op.left_shift"><code class="xref py py-obj docutils literal notranslate"><span class="pre">left_shift</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.left_shift" title="tvm.relay.op.left_shift"><code class="xref py py-obj docutils literal notranslate"><span class="pre">left_shift</span></code></a>(lhs, rhs)</p></td>
 <td><p>Left shift with numpy-style broadcasting.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.less" title="tvm.relay.op.less"><code class="xref py py-obj docutils literal notranslate"><span class="pre">less</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.less" title="tvm.relay.op.less"><code class="xref py py-obj docutils literal notranslate"><span class="pre">less</span></code></a>(lhs, rhs)</p></td>
 <td><p>Broadcasted elementwise test for (lhs &lt; rhs).</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.less_equal" title="tvm.relay.op.less_equal"><code class="xref py py-obj docutils literal notranslate"><span class="pre">less_equal</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.less_equal" title="tvm.relay.op.less_equal"><code class="xref py py-obj docutils literal notranslate"><span class="pre">less_equal</span></code></a>(lhs, rhs)</p></td>
 <td><p>Broadcasted elementwise test for (lhs &lt;= rhs).</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.log" title="tvm.relay.op.log"><code class="xref py py-obj docutils literal notranslate"><span class="pre">log</span></code></a>(data)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.log" title="tvm.relay.op.log"><code class="xref py py-obj docutils literal notranslate"><span class="pre">log</span></code></a>(data)</p></td>
 <td><p>Compute elementwise log of data.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.logical_and" title="tvm.relay.op.logical_and"><code class="xref py py-obj docutils literal notranslate"><span class="pre">logical_and</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.logical_and" title="tvm.relay.op.logical_and"><code class="xref py py-obj docutils literal notranslate"><span class="pre">logical_and</span></code></a>(lhs, rhs)</p></td>
 <td><p>logical AND with numpy-style broadcasting.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.logical_not" title="tvm.relay.op.logical_not"><code class="xref py py-obj docutils literal notranslate"><span class="pre">logical_not</span></code></a>(data)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.logical_not" title="tvm.relay.op.logical_not"><code class="xref py py-obj docutils literal notranslate"><span class="pre">logical_not</span></code></a>(data)</p></td>
 <td><p>Compute element-wise logical not of data.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.logical_or" title="tvm.relay.op.logical_or"><code class="xref py py-obj docutils literal notranslate"><span class="pre">logical_or</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.logical_or" title="tvm.relay.op.logical_or"><code class="xref py py-obj docutils literal notranslate"><span class="pre">logical_or</span></code></a>(lhs, rhs)</p></td>
 <td><p>logical OR with numpy-style broadcasting.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.max" title="tvm.relay.op.max"><code class="xref py py-obj docutils literal notranslate"><span class="pre">max</span></code></a>(data[, axis, keepdims, exclude])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.max" title="tvm.relay.op.max"><code class="xref py py-obj docutils literal notranslate"><span class="pre">max</span></code></a>(data[, axis, keepdims, exclude])</p></td>
 <td><p>Computes the max of array elements over given axes.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.maximum" title="tvm.relay.op.maximum"><code class="xref py py-obj docutils literal notranslate"><span class="pre">maximum</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.maximum" title="tvm.relay.op.maximum"><code class="xref py py-obj docutils literal notranslate"><span class="pre">maximum</span></code></a>(lhs, rhs)</p></td>
 <td><p>Maximum with numpy-style broadcasting.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.mean" title="tvm.relay.op.mean"><code class="xref py py-obj docutils literal notranslate"><span class="pre">mean</span></code></a>(data[, axis, keepdims, exclude])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.mean" title="tvm.relay.op.mean"><code class="xref py py-obj docutils literal notranslate"><span class="pre">mean</span></code></a>(data[, axis, keepdims, exclude])</p></td>
 <td><p>Computes the mean of array elements over given axes.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.mean_std" title="tvm.relay.op.mean_std"><code class="xref py py-obj docutils literal notranslate"><span class="pre">mean_std</span></code></a>(data[, axis, keepdims, exclude])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.mean_std" title="tvm.relay.op.mean_std"><code class="xref py py-obj docutils literal notranslate"><span class="pre">mean_std</span></code></a>(data[, axis, keepdims, exclude])</p></td>
 <td><p>Computes the mean and standard deviation of data over given axes.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.mean_variance" title="tvm.relay.op.mean_variance"><code class="xref py py-obj docutils literal notranslate"><span class="pre">mean_variance</span></code></a>(data[, axis, keepdims, exclude])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.mean_variance" title="tvm.relay.op.mean_variance"><code class="xref py py-obj docutils literal notranslate"><span class="pre">mean_variance</span></code></a>(data[, axis, keepdims, exclude])</p></td>
 <td><p>Computes the mean and variance of data over given axes.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.min" title="tvm.relay.op.min"><code class="xref py py-obj docutils literal notranslate"><span class="pre">min</span></code></a>(data[, axis, keepdims, exclude])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.min" title="tvm.relay.op.min"><code class="xref py py-obj docutils literal notranslate"><span class="pre">min</span></code></a>(data[, axis, keepdims, exclude])</p></td>
 <td><p>Computes the min of array elements over given axes.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.minimum" title="tvm.relay.op.minimum"><code class="xref py py-obj docutils literal notranslate"><span class="pre">minimum</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.minimum" title="tvm.relay.op.minimum"><code class="xref py py-obj docutils literal notranslate"><span class="pre">minimum</span></code></a>(lhs, rhs)</p></td>
 <td><p>Minimum with numpy-style broadcasting.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.mod" title="tvm.relay.op.mod"><code class="xref py py-obj docutils literal notranslate"><span class="pre">mod</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.mod" title="tvm.relay.op.mod"><code class="xref py py-obj docutils literal notranslate"><span class="pre">mod</span></code></a>(lhs, rhs)</p></td>
 <td><p>Mod with numpy-style broadcasting.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.multiply" title="tvm.relay.op.multiply"><code class="xref py py-obj docutils literal notranslate"><span class="pre">multiply</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.multiply" title="tvm.relay.op.multiply"><code class="xref py py-obj docutils literal notranslate"><span class="pre">multiply</span></code></a>(lhs, rhs)</p></td>
 <td><p>Multiplication with numpy-style broadcasting.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.ndarray_size" title="tvm.relay.op.ndarray_size"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ndarray_size</span></code></a>(data[, dtype])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.ndarray_size" title="tvm.relay.op.ndarray_size"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ndarray_size</span></code></a>(data[, dtype])</p></td>
 <td><p>Get number of elements of input tensor.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.negative" title="tvm.relay.op.negative"><code class="xref py py-obj docutils literal notranslate"><span class="pre">negative</span></code></a>(data)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.negative" title="tvm.relay.op.negative"><code class="xref py py-obj docutils literal notranslate"><span class="pre">negative</span></code></a>(data)</p></td>
 <td><p>Compute element-wise negative of data.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.not_equal" title="tvm.relay.op.not_equal"><code class="xref py py-obj docutils literal notranslate"><span class="pre">not_equal</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.not_equal" title="tvm.relay.op.not_equal"><code class="xref py py-obj docutils literal notranslate"><span class="pre">not_equal</span></code></a>(lhs, rhs)</p></td>
 <td><p>Broadcasted elementwise test for (lhs != rhs).</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.one_hot" title="tvm.relay.op.one_hot"><code class="xref py py-obj docutils literal notranslate"><span class="pre">one_hot</span></code></a>(indices, on_value, off_value, depth, …)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.one_hot" title="tvm.relay.op.one_hot"><code class="xref py py-obj docutils literal notranslate"><span class="pre">one_hot</span></code></a>(indices, on_value, off_value, depth, …)</p></td>
 <td><p>Returns a one-hot tensor where the locations repsented by indices take value on_value, other locations take value off_value.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.ones" title="tvm.relay.op.ones"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ones</span></code></a>(shape, dtype)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.ones" title="tvm.relay.op.ones"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ones</span></code></a>(shape, dtype)</p></td>
 <td><p>Fill array with ones.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.ones_like" title="tvm.relay.op.ones_like"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ones_like</span></code></a>(data)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.ones_like" title="tvm.relay.op.ones_like"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ones_like</span></code></a>(data)</p></td>
 <td><p>Returns an array of ones, with same type and shape as the input.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.power" title="tvm.relay.op.power"><code class="xref py py-obj docutils literal notranslate"><span class="pre">power</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.power" title="tvm.relay.op.power"><code class="xref py py-obj docutils literal notranslate"><span class="pre">power</span></code></a>(lhs, rhs)</p></td>
 <td><p>Power with numpy-style broadcasting.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.prod" title="tvm.relay.op.prod"><code class="xref py py-obj docutils literal notranslate"><span class="pre">prod</span></code></a>(data[, axis, keepdims, exclude])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.prod" title="tvm.relay.op.prod"><code class="xref py py-obj docutils literal notranslate"><span class="pre">prod</span></code></a>(data[, axis, keepdims, exclude])</p></td>
 <td><p>Computes the products of array elements over given axes.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.register" title="tvm.relay.op.register"><code class="xref py py-obj docutils literal notranslate"><span class="pre">register</span></code></a>(op_name, attr_key[, value, level])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.register" title="tvm.relay.op.register"><code class="xref py py-obj docutils literal notranslate"><span class="pre">register</span></code></a>(op_name, attr_key[, value, level])</p></td>
 <td><p>Register an operator property of an operator.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.register_alter_op_layout" title="tvm.relay.op.register_alter_op_layout"><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_alter_op_layout</span></code></a>(op_name[, …])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.register_alter_op_layout" title="tvm.relay.op.register_alter_op_layout"><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_alter_op_layout</span></code></a>(op_name[, …])</p></td>
 <td><p>Register alter op layout function for an op</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.register_compute" title="tvm.relay.op.register_compute"><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_compute</span></code></a>(op_name[, compute, level])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.register_compute" title="tvm.relay.op.register_compute"><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_compute</span></code></a>(op_name[, compute, level])</p></td>
 <td><p>Register compute function for an op.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.register_external_compiler" title="tvm.relay.op.register_external_compiler"><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_external_compiler</span></code></a>(op_name[, …])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.register_external_compiler" title="tvm.relay.op.register_external_compiler"><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_external_compiler</span></code></a>(op_name[, …])</p></td>
 <td><p>Register the external compiler for an op.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.register_gradient" title="tvm.relay.op.register_gradient"><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_gradient</span></code></a>(op_name[, fgradient, level])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.register_gradient" title="tvm.relay.op.register_gradient"><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_gradient</span></code></a>(op_name[, fgradient, level])</p></td>
 <td><p>Register operator pattern for an op.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.register_legalize" title="tvm.relay.op.register_legalize"><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_legalize</span></code></a>(op_name[, legal_op, level])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.register_legalize" title="tvm.relay.op.register_legalize"><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_legalize</span></code></a>(op_name[, legal_op, level])</p></td>
 <td><p>Register legal transformation function for an op</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.register_pattern" title="tvm.relay.op.register_pattern"><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_pattern</span></code></a>(op_name, pattern[, level])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.register_pattern" title="tvm.relay.op.register_pattern"><code class="xref py py-obj docutils literal notranslate"><span class="pre">register_pattern</span></code></a>(op_name, pattern[, level])</p></td>
 <td><p>Register operator pattern for an op.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.reinterpret" title="tvm.relay.op.reinterpret"><code class="xref py py-obj docutils literal notranslate"><span class="pre">reinterpret</span></code></a>(data, dtype)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.reinterpret" title="tvm.relay.op.reinterpret"><code class="xref py py-obj docutils literal notranslate"><span class="pre">reinterpret</span></code></a>(data, dtype)</p></td>
 <td><p>Reinterpret input tensor to data type.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.repeat" title="tvm.relay.op.repeat"><code class="xref py py-obj docutils literal notranslate"><span class="pre">repeat</span></code></a>(data, repeats, axis)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.repeat" title="tvm.relay.op.repeat"><code class="xref py py-obj docutils literal notranslate"><span class="pre">repeat</span></code></a>(data, repeats, axis)</p></td>
 <td><p>Repeats elements of an array.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.reshape" title="tvm.relay.op.reshape"><code class="xref py py-obj docutils literal notranslate"><span class="pre">reshape</span></code></a>(data, newshape)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.reshape" title="tvm.relay.op.reshape"><code class="xref py py-obj docutils literal notranslate"><span class="pre">reshape</span></code></a>(data, newshape)</p></td>
 <td><p>Reshape the input array.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.reshape_like" title="tvm.relay.op.reshape_like"><code class="xref py py-obj docutils literal notranslate"><span class="pre">reshape_like</span></code></a>(data, shape_like)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.reshape_like" title="tvm.relay.op.reshape_like"><code class="xref py py-obj docutils literal notranslate"><span class="pre">reshape_like</span></code></a>(data, shape_like)</p></td>
 <td><p>Reshapes the input array by the size of another array.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.reverse" title="tvm.relay.op.reverse"><code class="xref py py-obj docutils literal notranslate"><span class="pre">reverse</span></code></a>(data, axis)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.reverse" title="tvm.relay.op.reverse"><code class="xref py py-obj docutils literal notranslate"><span class="pre">reverse</span></code></a>(data, axis)</p></td>
 <td><p>Reverses the order of elements along given axis while preserving array shape.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.reverse_reshape" title="tvm.relay.op.reverse_reshape"><code class="xref py py-obj docutils literal notranslate"><span class="pre">reverse_reshape</span></code></a>(data, newshape)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.reverse_reshape" title="tvm.relay.op.reverse_reshape"><code class="xref py py-obj docutils literal notranslate"><span class="pre">reverse_reshape</span></code></a>(data, newshape)</p></td>
 <td><p>Reshapes the input array where the special values are inferred from right to left.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.right_shift" title="tvm.relay.op.right_shift"><code class="xref py py-obj docutils literal notranslate"><span class="pre">right_shift</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.right_shift" title="tvm.relay.op.right_shift"><code class="xref py py-obj docutils literal notranslate"><span class="pre">right_shift</span></code></a>(lhs, rhs)</p></td>
 <td><p>Right shift with numpy-style broadcasting.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.round" title="tvm.relay.op.round"><code class="xref py py-obj docutils literal notranslate"><span class="pre">round</span></code></a>(data)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.round" title="tvm.relay.op.round"><code class="xref py py-obj docutils literal notranslate"><span class="pre">round</span></code></a>(data)</p></td>
 <td><p>Compute element-wise round of data.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.rsqrt" title="tvm.relay.op.rsqrt"><code class="xref py py-obj docutils literal notranslate"><span class="pre">rsqrt</span></code></a>(data)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.rsqrt" title="tvm.relay.op.rsqrt"><code class="xref py py-obj docutils literal notranslate"><span class="pre">rsqrt</span></code></a>(data)</p></td>
 <td><p>Compute elementwise rsqrt of data.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.sequence_mask" title="tvm.relay.op.sequence_mask"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sequence_mask</span></code></a>(data, valid_length[, …])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.sequence_mask" title="tvm.relay.op.sequence_mask"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sequence_mask</span></code></a>(data, valid_length[, …])</p></td>
 <td><p>Sets all elements outside the expected length of the sequence to a constant value.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.shape_of" title="tvm.relay.op.shape_of"><code class="xref py py-obj docutils literal notranslate"><span class="pre">shape_of</span></code></a>(data[, dtype])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.shape_of" title="tvm.relay.op.shape_of"><code class="xref py py-obj docutils literal notranslate"><span class="pre">shape_of</span></code></a>(data[, dtype])</p></td>
 <td><p>Get shape of a tensor.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.sigmoid" title="tvm.relay.op.sigmoid"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sigmoid</span></code></a>(data)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.sigmoid" title="tvm.relay.op.sigmoid"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sigmoid</span></code></a>(data)</p></td>
 <td><p>Compute elementwise sigmoid of data.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.sign" title="tvm.relay.op.sign"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sign</span></code></a>(data)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.sign" title="tvm.relay.op.sign"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sign</span></code></a>(data)</p></td>
 <td><p>Compute element-wise absolute of data.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.sin" title="tvm.relay.op.sin"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sin</span></code></a>(data)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.sin" title="tvm.relay.op.sin"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sin</span></code></a>(data)</p></td>
 <td><p>Compute elementwise sin of data.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.slice_like" title="tvm.relay.op.slice_like"><code class="xref py py-obj docutils literal notranslate"><span class="pre">slice_like</span></code></a>(data, shape_like[, axes])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.slice_like" title="tvm.relay.op.slice_like"><code class="xref py py-obj docutils literal notranslate"><span class="pre">slice_like</span></code></a>(data, shape_like[, axes])</p></td>
 <td><p>Slice the first input with respect to the second input.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.split" title="tvm.relay.op.split"><code class="xref py py-obj docutils literal notranslate"><span class="pre">split</span></code></a>(data, indices_or_sections[, axis])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.split" title="tvm.relay.op.split"><code class="xref py py-obj docutils literal notranslate"><span class="pre">split</span></code></a>(data, indices_or_sections[, axis])</p></td>
 <td><p>Split input tensor along axis by sections or indices.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.sqrt" title="tvm.relay.op.sqrt"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sqrt</span></code></a>(data)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.sqrt" title="tvm.relay.op.sqrt"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sqrt</span></code></a>(data)</p></td>
 <td><p>Compute elementwise sqrt of data.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.squeeze" title="tvm.relay.op.squeeze"><code class="xref py py-obj docutils literal notranslate"><span class="pre">squeeze</span></code></a>(data[, axis])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.squeeze" title="tvm.relay.op.squeeze"><code class="xref py py-obj docutils literal notranslate"><span class="pre">squeeze</span></code></a>(data[, axis])</p></td>
 <td><p>Squeeze axes in the array.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.stack" title="tvm.relay.op.stack"><code class="xref py py-obj docutils literal notranslate"><span class="pre">stack</span></code></a>(data, axis)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.stack" title="tvm.relay.op.stack"><code class="xref py py-obj docutils literal notranslate"><span class="pre">stack</span></code></a>(data, axis)</p></td>
 <td><p>Join a sequence of arrays along a new axis.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.std" title="tvm.relay.op.std"><code class="xref py py-obj docutils literal notranslate"><span class="pre">std</span></code></a>(data[, axis, keepdims, exclude])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.std" title="tvm.relay.op.std"><code class="xref py py-obj docutils literal notranslate"><span class="pre">std</span></code></a>(data[, axis, keepdims, exclude])</p></td>
 <td><p>Computes the standard deviation of data over given axes.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.strided_set" title="tvm.relay.op.strided_set"><code class="xref py py-obj docutils literal notranslate"><span class="pre">strided_set</span></code></a>(data, v, begin, end[, strides])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.strided_set" title="tvm.relay.op.strided_set"><code class="xref py py-obj docutils literal notranslate"><span class="pre">strided_set</span></code></a>(data, v, begin, end[, strides])</p></td>
 <td><p>Strided set of an array.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.strided_slice" title="tvm.relay.op.strided_slice"><code class="xref py py-obj docutils literal notranslate"><span class="pre">strided_slice</span></code></a>(data, begin, end[, strides])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.strided_slice" title="tvm.relay.op.strided_slice"><code class="xref py py-obj docutils literal notranslate"><span class="pre">strided_slice</span></code></a>(data, begin, end[, strides])</p></td>
 <td><p>Strided slice of an array.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.subtract" title="tvm.relay.op.subtract"><code class="xref py py-obj docutils literal notranslate"><span class="pre">subtract</span></code></a>(lhs, rhs)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.subtract" title="tvm.relay.op.subtract"><code class="xref py py-obj docutils literal notranslate"><span class="pre">subtract</span></code></a>(lhs, rhs)</p></td>
 <td><p>Subtraction with numpy-style broadcasting.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.sum" title="tvm.relay.op.sum"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sum</span></code></a>(data[, axis, keepdims, exclude])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.sum" title="tvm.relay.op.sum"><code class="xref py py-obj docutils literal notranslate"><span class="pre">sum</span></code></a>(data[, axis, keepdims, exclude])</p></td>
 <td><p>Computes the sum of array elements over given axes.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.take" title="tvm.relay.op.take"><code class="xref py py-obj docutils literal notranslate"><span class="pre">take</span></code></a>(data, indices[, axis, mode])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.take" title="tvm.relay.op.take"><code class="xref py py-obj docutils literal notranslate"><span class="pre">take</span></code></a>(data, indices[, axis, mode])</p></td>
 <td><p>Take elements from an array along an axis.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.tan" title="tvm.relay.op.tan"><code class="xref py py-obj docutils literal notranslate"><span class="pre">tan</span></code></a>(data)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.tan" title="tvm.relay.op.tan"><code class="xref py py-obj docutils literal notranslate"><span class="pre">tan</span></code></a>(data)</p></td>
 <td><p>Compute elementwise tan of data.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.tanh" title="tvm.relay.op.tanh"><code class="xref py py-obj docutils literal notranslate"><span class="pre">tanh</span></code></a>(data)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.tanh" title="tvm.relay.op.tanh"><code class="xref py py-obj docutils literal notranslate"><span class="pre">tanh</span></code></a>(data)</p></td>
 <td><p>Compute element-wise tanh of data.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.tile" title="tvm.relay.op.tile"><code class="xref py py-obj docutils literal notranslate"><span class="pre">tile</span></code></a>(data, reps)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.tile" title="tvm.relay.op.tile"><code class="xref py py-obj docutils literal notranslate"><span class="pre">tile</span></code></a>(data, reps)</p></td>
 <td><p>Repeats the whole array multiple times.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.topk" title="tvm.relay.op.topk"><code class="xref py py-obj docutils literal notranslate"><span class="pre">topk</span></code></a>(data[, k, axis, ret_type, is_ascend, dtype])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.topk" title="tvm.relay.op.topk"><code class="xref py py-obj docutils literal notranslate"><span class="pre">topk</span></code></a>(data[, k, axis, ret_type, is_ascend, dtype])</p></td>
 <td><p>Get the top k elements in an input tensor along the given axis.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.transpose" title="tvm.relay.op.transpose"><code class="xref py py-obj docutils literal notranslate"><span class="pre">transpose</span></code></a>(data[, axes])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.transpose" title="tvm.relay.op.transpose"><code class="xref py py-obj docutils literal notranslate"><span class="pre">transpose</span></code></a>(data[, axes])</p></td>
 <td><p>Permutes the dimensions of an array.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.trunc" title="tvm.relay.op.trunc"><code class="xref py py-obj docutils literal notranslate"><span class="pre">trunc</span></code></a>(data)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.trunc" title="tvm.relay.op.trunc"><code class="xref py py-obj docutils literal notranslate"><span class="pre">trunc</span></code></a>(data)</p></td>
 <td><p>Compute element-wise trunc of data.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.unravel_index" title="tvm.relay.op.unravel_index"><code class="xref py py-obj docutils literal notranslate"><span class="pre">unravel_index</span></code></a>(indices, shape)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.unravel_index" title="tvm.relay.op.unravel_index"><code class="xref py py-obj docutils literal notranslate"><span class="pre">unravel_index</span></code></a>(indices, shape)</p></td>
 <td><p>Convert a flat index or array of flat indices into a tuple of coordinate arrays.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.variance" title="tvm.relay.op.variance"><code class="xref py py-obj docutils literal notranslate"><span class="pre">variance</span></code></a>(data[, axis, keepdims, exclude])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.variance" title="tvm.relay.op.variance"><code class="xref py py-obj docutils literal notranslate"><span class="pre">variance</span></code></a>(data[, axis, keepdims, exclude])</p></td>
 <td><p>Computes the variance of data over given axes.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.where" title="tvm.relay.op.where"><code class="xref py py-obj docutils literal notranslate"><span class="pre">where</span></code></a>(condition, x, y)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.where" title="tvm.relay.op.where"><code class="xref py py-obj docutils literal notranslate"><span class="pre">where</span></code></a>(condition, x, y)</p></td>
 <td><p>Selecting elements from either x or y depending on the value of the condition.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.zeros" title="tvm.relay.op.zeros"><code class="xref py py-obj docutils literal notranslate"><span class="pre">zeros</span></code></a>(shape, dtype)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.zeros" title="tvm.relay.op.zeros"><code class="xref py py-obj docutils literal notranslate"><span class="pre">zeros</span></code></a>(shape, dtype)</p></td>
 <td><p>Fill array with zeros.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.op.zeros_like" title="tvm.relay.op.zeros_like"><code class="xref py py-obj docutils literal notranslate"><span class="pre">zeros_like</span></code></a>(data)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.op.zeros_like" title="tvm.relay.op.zeros_like"><code class="xref py py-obj docutils literal notranslate"><span class="pre">zeros_like</span></code></a>(data)</p></td>
 <td><p>Returns an array of zeros, with same type and shape as the input.</p></td>
 </tr>
 </tbody>
@@ -1739,6 +1743,23 @@ defined by indices.</p>
 </dd></dl>
 
 <dl class="function">
+<dt id="tvm.relay.op.isnan">
+<code class="sig-prename descclassname">tvm.relay.op.</code><code class="sig-name descname">isnan</code><span class="sig-paren">(</span><em class="sig-param">data</em><span class="sig-paren">)</span><a class="headerlink" href="#tvm.relay.op.isnan" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check nan in input data element-wise.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>data</strong> (<em>relay.Expr</em>) – The input data</p>
+</dd>
+<dt class="field-even">Returns</dt>
+<dd class="field-even"><p><strong>result</strong> – The computed result.</p>
+</dd>
+<dt class="field-odd">Return type</dt>
+<dd class="field-odd"><p>relay.Expr</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="function">
 <dt id="tvm.relay.op.layout_transform">
 <code class="sig-prename descclassname">tvm.relay.op.</code><code class="sig-name descname">layout_transform</code><span class="sig-paren">(</span><em class="sig-param">data</em>, <em class="sig-param">src_layout</em>, <em class="sig-param">dst_layout</em><span class="sig-paren">)</span><a class="headerlink" href="#tvm.relay.op.layout_transform" title="Permalink to this definition">¶</a></dt>
 <dd><p>Transform the layout of a tensor</p>
diff --git a/docs/api/python/relay/testing.html b/docs/api/python/relay/testing.html
index 01c56c1..da0eec3 100644
--- a/docs/api/python/relay/testing.html
+++ b/docs/api/python/relay/testing.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="../ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
diff --git a/docs/api/python/relay/transform.html b/docs/api/python/relay/transform.html
index 4047586..a3f05f8 100644
--- a/docs/api/python/relay/transform.html
+++ b/docs/api/python/relay/transform.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="../ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
@@ -297,39 +298,33 @@
 <tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.transform.PartitionGraph" title="tvm.relay.transform.PartitionGraph"><code class="xref py py-obj docutils literal notranslate"><span class="pre">PartitionGraph</span></code></a>()</p></td>
 <td><p>Partition a Relay program into regions that can be executed on different backends.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.transform.PrintIR" title="tvm.relay.transform.PrintIR"><code class="xref py py-obj docutils literal notranslate"><span class="pre">PrintIR</span></code></a>([show_meta_data])</p></td>
-<td><p>Print the IR for a module to help debugging.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.transform.RemoveUnusedFunctions" title="tvm.relay.transform.RemoveUnusedFunctions"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RemoveUnusedFunctions</span></code></a>([entry_functions])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.transform.RemoveUnusedFunctions" title="tvm.relay.transform.RemoveUnusedFunctions"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RemoveUnusedFunctions</span></code></a>([entry_functions])</p></td>
 <td><p>Remove unused global relay functions in a relay module.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.transform.RewriteAnnotatedOps" title="tvm.relay.transform.RewriteAnnotatedOps"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RewriteAnnotatedOps</span></code></a>(fallback_device)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.transform.RewriteAnnotatedOps" title="tvm.relay.transform.RewriteAnnotatedOps"><code class="xref py py-obj docutils literal notranslate"><span class="pre">RewriteAnnotatedOps</span></code></a>(fallback_device)</p></td>
 <td><p>Rewrite the annotated program where annotation operators, e.g.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.transform.SimplifyInference" title="tvm.relay.transform.SimplifyInference"><code class="xref py py-obj docutils literal notranslate"><span class="pre">SimplifyInference</span></code></a>()</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.transform.SimplifyInference" title="tvm.relay.transform.SimplifyInference"><code class="xref py py-obj docutils literal notranslate"><span class="pre">SimplifyInference</span></code></a>()</p></td>
 <td><p>Simplify the data-flow graph for inference phase.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.transform.ToANormalForm" title="tvm.relay.transform.ToANormalForm"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ToANormalForm</span></code></a>()</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.transform.ToANormalForm" title="tvm.relay.transform.ToANormalForm"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ToANormalForm</span></code></a>()</p></td>
 <td><p>Turn Graph Normal Form expression into A Normal Form Expression.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.transform.ToCPS" title="tvm.relay.transform.ToCPS"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ToCPS</span></code></a>(expr[, mod])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.transform.ToCPS" title="tvm.relay.transform.ToCPS"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ToCPS</span></code></a>(expr[, mod])</p></td>
 <td><p>Turn expression into continuation passing style(CPS).</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.transform.ToGraphNormalForm" title="tvm.relay.transform.ToGraphNormalForm"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ToGraphNormalForm</span></code></a>()</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.transform.ToGraphNormalForm" title="tvm.relay.transform.ToGraphNormalForm"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ToGraphNormalForm</span></code></a>()</p></td>
 <td><p>Turn a Relay program in A Normal Form into Graph Normal Form</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.transform.build_config" title="tvm.relay.transform.build_config"><code class="xref py py-obj docutils literal notranslate"><span class="pre">build_config</span></code></a>([opt_level, fallback_device, …])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.transform.build_config" title="tvm.relay.transform.build_config"><code class="xref py py-obj docutils literal notranslate"><span class="pre">build_config</span></code></a>([opt_level, fallback_device, …])</p></td>
 <td><p>Configure the build behavior by setting config variables.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.transform.function_pass" title="tvm.relay.transform.function_pass"><code class="xref py py-obj docutils literal notranslate"><span class="pre">function_pass</span></code></a>([pass_func, opt_level, name, …])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.transform.function_pass" title="tvm.relay.transform.function_pass"><code class="xref py py-obj docutils literal notranslate"><span class="pre">function_pass</span></code></a>([pass_func, opt_level, name, …])</p></td>
 <td><p>Decorate a function pass.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.transform.gradient" title="tvm.relay.transform.gradient"><code class="xref py py-obj docutils literal notranslate"><span class="pre">gradient</span></code></a>(expr[, mod, mode])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.transform.gradient" title="tvm.relay.transform.gradient"><code class="xref py py-obj docutils literal notranslate"><span class="pre">gradient</span></code></a>(expr[, mod, mode])</p></td>
 <td><p>Transform the input function, returning a function that calculate the original result, paired with gradient of the input.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.transform.module_pass" title="tvm.relay.transform.module_pass"><code class="xref py py-obj docutils literal notranslate"><span class="pre">module_pass</span></code></a>([pass_func, opt_level, name, …])</p></td>
-<td><p>Decorate a module pass.</p></td>
-</tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.transform.to_cps" title="tvm.relay.transform.to_cps"><code class="xref py py-obj docutils literal notranslate"><span class="pre">to_cps</span></code></a>(func[, mod])</p></td>
 <td><p>Turn expression into CPS expression.</p></td>
 </tr>
@@ -351,21 +346,6 @@
 <tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.transform.FunctionPass" title="tvm.relay.transform.FunctionPass"><code class="xref py py-obj docutils literal notranslate"><span class="pre">FunctionPass</span></code></a></p></td>
 <td><p>A pass that works on each tvm.relay.Function in a module.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.transform.ModulePass" title="tvm.relay.transform.ModulePass"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ModulePass</span></code></a></p></td>
-<td><p>A pass that works on tvm.IRModule.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.transform.Pass" title="tvm.relay.transform.Pass"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Pass</span></code></a></p></td>
-<td><p>The base class of all passes.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.transform.PassContext" title="tvm.relay.transform.PassContext"><code class="xref py py-obj docutils literal notranslate"><span class="pre">PassContext</span></code></a>([opt_level, fallback_device, …])</p></td>
-<td><p>The basis where a Relay optimization/analysis runs on.</p></td>
-</tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.relay.transform.PassInfo" title="tvm.relay.transform.PassInfo"><code class="xref py py-obj docutils literal notranslate"><span class="pre">PassInfo</span></code></a>(opt_level, name[, required])</p></td>
-<td><p>The class contains the meta data required by a pass.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.transform.Sequential" title="tvm.relay.transform.Sequential"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Sequential</span></code></a>([passes, opt_level, name, required])</p></td>
-<td><p>A pass that works on a sequence of pass objects.</p></td>
-</tr>
 </tbody>
 </table>
 <dl class="function">
@@ -380,7 +360,7 @@ other general weight pre-transformation.</p>
 <dd class="field-odd"><p><strong>ret</strong> – The registered pass that alters the layout of operators.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.relay.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -399,7 +379,7 @@ use it for codegen.</p>
 subgraph_end.</p>
 </dd>
 <dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>tvm.relay.Pass</p>
+<dd class="field-odd"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -413,7 +393,7 @@ subgraph_end.</p>
 <dd class="field-odd"><p><strong>ret</strong> – The registered pass to backward fold expressions.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.relay.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 <div class="admonition note">
@@ -433,7 +413,7 @@ conv-&gt;bn pattern.</p>
 <dd class="field-odd"><p><strong>ret</strong> – The registered pass that canonicalizes cast expression.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.relay.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -449,7 +429,7 @@ expand_dims and broadcast_add.</p>
 <dd class="field-odd"><p><strong>ret</strong> – The registered pass performing the canonicalization.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.relay.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -488,7 +468,7 @@ optimization.</p>
 <dd class="field-even"><p><strong>ret</strong> – The registered pass that combines parallel conv2d operators.</p>
 </dd>
 <dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>tvm.relay.Pass</p>
+<dd class="field-odd"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -507,7 +487,7 @@ optimization.</p>
 <dd class="field-even"><p><strong>ret</strong> – The registered pass that combines parallel dense operators.</p>
 </dd>
 <dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>tvm.relay.Pass</p>
+<dd class="field-odd"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -550,7 +530,7 @@ layout using the InferCorrectLayout infrastructure.</p>
 <dd class="field-even"><p><strong>ret</strong> – The registered pass that eliminates the dead code in a Relay program.</p>
 </dd>
 <dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>tvm.relay.Pass</p>
+<dd class="field-odd"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -568,7 +548,7 @@ skipped.</p>
 <dd class="field-even"><p><strong>ret</strong> – The registered pass that eliminates common subexpressions.</p>
 </dd>
 <dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>tvm.relay.Pass</p>
+<dd class="field-odd"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -588,7 +568,7 @@ skipped.</p>
 <dd class="field-even"><p><strong>ret</strong> – The registered pass that eta expands an expression.</p>
 </dd>
 <dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>tvm.relay.Pass</p>
+<dd class="field-odd"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -602,7 +582,7 @@ skipped.</p>
 <dd class="field-odd"><p><strong>ret</strong> – The registered pass to perform fast math operations.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.relay.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -616,7 +596,7 @@ skipped.</p>
 <dd class="field-odd"><p><strong>ret</strong> – The registered pass for constant folding.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.relay.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -631,7 +611,7 @@ invoke both forward and backward scale folding.</p>
 <dd class="field-odd"><p><strong>ret</strong> – The registered pass to fold expressions.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.relay.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 <div class="admonition note">
@@ -651,7 +631,7 @@ pattern.</p>
 <dd class="field-odd"><p><strong>ret</strong> – The registered pass to forward fold expressions.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.relay.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 <div class="admonition note">
@@ -682,7 +662,7 @@ inferred from pass context.</p>
 <dd class="field-even"><p><strong>ret</strong> – The registered pass for operator fusion.</p>
 </dd>
 <dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>tvm.relay.Pass</p>
+<dd class="field-odd"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -696,7 +676,7 @@ inferred from pass context.</p>
 <dd class="field-odd"><p><strong>ret</strong> – The registered type inference pass.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.relay.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -712,7 +692,7 @@ needed in the future to decide if it is profitable to inline the function.</p>
 <dd class="field-odd"><p><strong>ret</strong> – The registered pass that performs inlining for a Relay IR module.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.relay.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -726,7 +706,7 @@ needed in the future to decide if it is profitable to inline the function.</p>
 <dd class="field-odd"><p><strong>ret</strong> – The registered pass that lifts the lambda function.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.relay.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -741,7 +721,7 @@ needed in the future to decide if it is profitable to inline the function.</p>
 by lazily allocating 0 or one filled tensors.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.relay.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -762,7 +742,7 @@ can be used to legalize the expr in a target-dependent manner.</p>
 <dd class="field-even"><p><strong>ret</strong> – The registered pass that rewrites an expr.</p>
 </dd>
 <dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>tvm.relay.Pass</p>
+<dd class="field-odd"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -776,7 +756,7 @@ can be used to legalize the expr in a target-dependent manner.</p>
 <dd class="field-odd"><p><strong>ret</strong> – The registered pass that merges compiler regions.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.relay.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -799,22 +779,11 @@ always return True.</p>
 relay function.</p>
 </dd>
 <dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>tvm.relay.Pass</p>
+<dd class="field-odd"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
 
-<dl class="class">
-<dt id="tvm.relay.transform.ModulePass">
-<em class="property">class </em><code class="sig-prename descclassname">tvm.relay.transform.</code><code class="sig-name descname">ModulePass</code><a class="headerlink" href="#tvm.relay.transform.ModulePass" title="Permalink to this definition">¶</a></dt>
-<dd><p>A pass that works on tvm.IRModule. Users don’t need to interact with
-this class directly. Instead, a module pass should be created through
-<cite>module_pass</cite>, because the design of the <cite>module_pass</cite> API is flexible
-enough to handle the creation of a module pass in different manners. In
-addition, all members of a module pass can be accessed from the base class.
-The same rule applies to FunctionPass as well.</p>
-</dd></dl>
-
 <dl class="function">
 <dt id="tvm.relay.transform.PartialEvaluate">
 <code class="sig-prename descclassname">tvm.relay.transform.</code><code class="sig-name descname">PartialEvaluate</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#tvm.relay.transform.PartialEvaluate" title="Permalink to this definition">¶</a></dt>
@@ -831,7 +800,7 @@ carry out transformation.</p>
 <dd class="field-odd"><p><strong>ret</strong> – The registered pass that performs partial evaluation on an expression.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.relay.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -846,106 +815,7 @@ backends.</p>
 <dd class="field-odd"><p><strong>ret</strong> – The registered pass that partitions the Relay program.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.relay.Pass</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="class">
-<dt id="tvm.relay.transform.Pass">
-<em class="property">class </em><code class="sig-prename descclassname">tvm.relay.transform.</code><code class="sig-name descname">Pass</code><a class="headerlink" href="#tvm.relay.transform.Pass" title="Permalink to this definition">¶</a></dt>
-<dd><p>The base class of all passes. All methods here are just simple wrappers
-that are implemented in the backend. They are defined for users to
-conveniently interact with the base class.</p>
-<p><strong>Attributes</strong></p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.transform.Pass.info" title="tvm.relay.transform.Pass.info"><code class="xref py py-obj docutils literal notranslate"><span class="pre">info</span></code></a></p></td>
-<td><p>Get the pass meta.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="method">
-<dt id="tvm.relay.transform.Pass.info">
-<em class="property">property </em><code class="sig-name descname">info</code><a class="headerlink" href="#tvm.relay.transform.Pass.info" title="Permalink to this definition">¶</a></dt>
-<dd><p>Get the pass meta.</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="tvm.relay.transform.PassContext">
-<em class="property">class </em><code class="sig-prename descclassname">tvm.relay.transform.</code><code class="sig-name descname">PassContext</code><span class="sig-paren">(</span><em class="sig-param">opt_level=2</em>, <em class="sig-param">fallback_device=cpu(0)</em>, <em class="sig-param">required_pass=None</em>, <em class="sig-param">disabled_pass=None</em>, <em class="sig-param">trace=None</em><span class="sig-paren">)</span><a class="headerlink" href="#tvm.relay.transform.PassCont [...]
-<dd><p>The basis where a Relay optimization/analysis runs on.
-Each pass context contains a number of auxiliary information that is used
-to help an optimization pass. Such information includes the error reporter
-to record the errors of during the optimization, etc.</p>
-<dl class="simple">
-<dt>opt_level<span class="classifier">Optional[int]</span></dt><dd><p>The optimization level of this pass.</p>
-</dd>
-<dt>fallback_device<span class="classifier">Optional[Union[int, str, TVMContext]]</span></dt><dd><p>The fallback device type. It is also used as the default device for
-operators that are not annotated during heterogeneous execution.</p>
-</dd>
-<dt>required_pass<span class="classifier">Optional[Union[List[str], Set[str], Tuple[str]]]</span></dt><dd><p>The list of passes that are required by a certain pass.</p>
-</dd>
-<dt>disabled_pass<span class="classifier">Optional[Union[List[str], Set[str], Tuple[str]]]</span></dt><dd><p>The list of passes that are disabled.</p>
-</dd>
-</dl>
-<p><strong>Methods</strong></p>
-<table class="longtable docutils align-default">
-<colgroup>
-<col style="width: 10%" />
-<col style="width: 90%" />
-</colgroup>
-<tbody>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.relay.transform.PassContext.current" title="tvm.relay.transform.PassContext.current"><code class="xref py py-obj docutils literal notranslate"><span class="pre">current</span></code></a>()</p></td>
-<td><p>Return the current pass context.</p></td>
-</tr>
-</tbody>
-</table>
-<dl class="method">
-<dt id="tvm.relay.transform.PassContext.current">
-<em class="property">static </em><code class="sig-name descname">current</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#tvm.relay.transform.PassContext.current" title="Permalink to this definition">¶</a></dt>
-<dd><p>Return the current pass context.</p>
-</dd></dl>
-
-</dd></dl>
-
-<dl class="class">
-<dt id="tvm.relay.transform.PassInfo">
-<em class="property">class </em><code class="sig-prename descclassname">tvm.relay.transform.</code><code class="sig-name descname">PassInfo</code><span class="sig-paren">(</span><em class="sig-param">opt_level</em>, <em class="sig-param">name</em>, <em class="sig-param">required=None</em><span class="sig-paren">)</span><a class="headerlink" href="#tvm.relay.transform.PassInfo" title="Permalink to this definition">¶</a></dt>
-<dd><p>The class contains the meta data required by a pass. It is the
-container of information needed by running an optimization or analysis.
-This class can be extended by adding new members when more meta data is
-needed.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>opt_level</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.8)"><em>int</em></a>) – The optimization level of this pass.</p></li>
-<li><p><strong>name</strong> (<a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)"><em>str</em></a>) – The pass name.</p></li>
-<li><p><strong>required</strong> (<em>List</em><em>[</em><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)"><em>str</em></a><em>]</em>) – The list of passes that are required by a certain pass.</p></li>
-</ul>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="function">
-<dt id="tvm.relay.transform.PrintIR">
-<code class="sig-prename descclassname">tvm.relay.transform.</code><code class="sig-name descname">PrintIR</code><span class="sig-paren">(</span><em class="sig-param">show_meta_data=True</em><span class="sig-paren">)</span><a class="headerlink" href="#tvm.relay.transform.PrintIR" title="Permalink to this definition">¶</a></dt>
-<dd><p>Print the IR for a module to help debugging.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><p><strong>show_meta_data</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)"><em>bool</em></a>) – A boolean flag to indicate if meta data should be printed.</p>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>ret</strong> – The registered pass that prints the module IR.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>tvm.relay.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -962,7 +832,7 @@ needed.</p>
 <dd class="field-even"><p><strong>ret</strong> – The registered pass to remove unused functions.</p>
 </dd>
 <dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>tvm.relay.Pass</p>
+<dd class="field-odd"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -984,31 +854,7 @@ operators with no annotated device.</p>
 <cite>on_device</cite> operators.</p>
 </dd>
 <dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>tvm.relay.Pass</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="class">
-<dt id="tvm.relay.transform.Sequential">
-<em class="property">class </em><code class="sig-prename descclassname">tvm.relay.transform.</code><code class="sig-name descname">Sequential</code><span class="sig-paren">(</span><em class="sig-param">passes=None</em>, <em class="sig-param">opt_level=2</em>, <em class="sig-param">name='sequential'</em>, <em class="sig-param">required=None</em><span class="sig-paren">)</span><a class="headerlink" href="#tvm.relay.transform.Sequential" title="Permalink to this definition">¶</a></dt>
-<dd><p>A pass that works on a sequence of pass objects. Multiple passes can be
-executed sequentially using this class.</p>
-<p>Some typical usage of the sequential pass are:
-1. Users provide a list of passes for optimization.
-2. Only an optimization level is provided so that the backend system has
-to glob all passes at this level and below to perform the optimizations.</p>
-<p>Note that users can also provide a series of passes that they don’t want to
-apply when running a sequential pass. Pass dependency will be resolved in
-the backend as well.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>passes</strong> (<em>Optional</em><em>[</em><em>List</em><em>[</em><a class="reference internal" href="#tvm.relay.transform.Pass" title="tvm.relay.transform.Pass"><em>Pass</em></a><em>]</em><em>]</em>) – A sequence of passes candidate for optimization.</p></li>
-<li><p><strong>opt_level</strong> (<em>Optional</em><em>[</em><a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.8)"><em>int</em></a><em>]</em>) – The optimization level of this sequential pass.</p></li>
-<li><p><strong>name</strong> (<em>Optional</em><em>[</em><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)"><em>str</em></a><em>]</em>) – The name of the sequential pass.</p></li>
-<li><p><strong>required</strong> (<em>Optional</em><em>[</em><em>List</em><em>[</em><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)"><em>str</em></a><em>]</em><em>]</em>) – The list of passes that the sequential pass is dependent on.</p></li>
-</ul>
+<dd class="field-odd"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -1023,7 +869,7 @@ which is semantically equal to the input expression will be returned.</p>
 <dd class="field-odd"><p><strong>ret</strong> – The registered pass to perform operator simplification.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.relay.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -1040,7 +886,7 @@ Values are ordered by post-DFS order in each scope.</p>
 <dd class="field-odd"><p><strong>ret</strong> – The registered pass that transforms an expression into A Normal Form.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>Union[tvm.relay.Pass, tvm.relay.Expr]</p>
+<dd class="field-even"><p>Union[<a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a>, tvm.relay.Expr]</p>
 </dd>
 </dl>
 </dd></dl>
@@ -1055,7 +901,7 @@ Values are ordered by post-DFS order in each scope.</p>
 <dd class="field-odd"><p><strong>result</strong> – The registered pass that transforms an expression into CPS.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.relay.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -1069,7 +915,7 @@ Values are ordered by post-DFS order in each scope.</p>
 <dd class="field-odd"><p><strong>ret</strong> – The registered pass that transforms an expression into Graph Normal Form.</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.relay.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="../ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -1103,14 +949,14 @@ following:</p>
 operators without specified device during heterogeneous execution.</p></li>
 <li><p><strong>required_pass</strong> (<em>set of str</em><em>, </em><em>optional</em>) – Optimization passes that are required regardless of optimization level.</p></li>
 <li><p><strong>disabled_pass</strong> (<em>set of str</em><em>, </em><em>optional</em>) – Optimization passes to be disabled during optimization.</p></li>
-<li><p><strong>trace</strong> (<em>Callable</em><em>[</em><em>[</em><a class="reference internal" href="../ir.html#tvm.ir.IRModule" title="tvm.ir.IRModule"><em>IRModule</em></a><em>, </em><a class="reference internal" href="#tvm.relay.transform.PassInfo" title="tvm.relay.transform.PassInfo"><em>PassInfo</em></a><em>, </em><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)"><em>bool</em></a><em>]</em><em>, </em><a class="refe [...]
+<li><p><strong>trace</strong> (<em>Callable</em><em>[</em><em>[</em><a class="reference internal" href="../ir.html#tvm.ir.IRModule" title="tvm.ir.IRModule"><em>IRModule</em></a><em>, </em><a class="reference internal" href="../ir.html#tvm.transform.PassInfo" title="tvm.transform.PassInfo"><em>PassInfo</em></a><em>, </em><a class="reference external" href="https://docs.python.org/3/library/functions.html#bool" title="(in Python v3.8)"><em>bool</em></a><em>]</em><em>, </em><a class="refere [...]
 </ul>
 </dd>
 <dt class="field-even">Returns</dt>
 <dd class="field-even"><p><strong>pass_context</strong> – The pass context for optimizations.</p>
 </dd>
 <dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p><a class="reference internal" href="#tvm.relay.transform.PassContext" title="tvm.relay.transform.PassContext">PassContext</a></p>
+<dd class="field-odd"><p><a class="reference internal" href="../ir.html#tvm.transform.PassContext" title="tvm.transform.PassContext">PassContext</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -1125,7 +971,7 @@ given optimization function.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>
 <dd class="field-odd"><ul class="simple">
-<li><p><strong>pass_func</strong> (<em>Optional</em><em>[</em><em>Callable</em><em>[</em><em>(</em><a class="reference internal" href="index.html#tvm.relay.Function" title="tvm.relay.Function"><em>Function</em></a><em>, </em><a class="reference internal" href="../runtime.html#tvm.runtime.Module" title="tvm.runtime.Module"><em>Module</em></a><em>, </em><a class="reference internal" href="#tvm.relay.transform.PassContext" title="tvm.relay.transform.PassContext"><em>PassContext</em></a><em> [...]
+<li><p><strong>pass_func</strong> (<em>Optional</em><em>[</em><em>Callable</em><em>[</em><em>(</em><a class="reference internal" href="index.html#tvm.relay.Function" title="tvm.relay.Function"><em>Function</em></a><em>, </em><a class="reference internal" href="../runtime.html#tvm.runtime.Module" title="tvm.runtime.Module"><em>Module</em></a><em>, </em><a class="reference internal" href="../ir.html#tvm.transform.PassContext" title="tvm.transform.PassContext"><em>PassContext</em></a><em>)  [...]
 <li><p><strong>opt_level</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.8)"><em>int</em></a>) – The optimization level of this module pass.</p></li>
 <li><p><strong>name</strong> (<em>Optional</em><em>[</em><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)"><em>str</em></a><em>]</em>) – The name of the function pass. The name could be empty. In this case, the
 name of the optimization function will be used as the pass name.</p></li>
@@ -1211,81 +1057,6 @@ reference nor closure.
 </dd></dl>
 
 <dl class="function">
-<dt id="tvm.relay.transform.module_pass">
-<code class="sig-prename descclassname">tvm.relay.transform.</code><code class="sig-name descname">module_pass</code><span class="sig-paren">(</span><em class="sig-param">pass_func=None</em>, <em class="sig-param">opt_level=None</em>, <em class="sig-param">name=None</em>, <em class="sig-param">required=None</em><span class="sig-paren">)</span><a class="headerlink" href="#tvm.relay.transform.module_pass" title="Permalink to this definition">¶</a></dt>
-<dd><p>Decorate a module pass.</p>
-<p>This function returns a callback when pass_func is provided.
-Otherwise, it serves a decorator function.</p>
-<p>pass_func can also be a class type with a method transform_module.
-This function will create a decorated ModulePass using transform_module
-as the pass function.</p>
-<dl class="field-list simple">
-<dt class="field-odd">Parameters</dt>
-<dd class="field-odd"><ul class="simple">
-<li><p><strong>pass_func</strong> (<em>Optional</em><em>[</em><em>Callable</em><em>[</em><em>(</em><a class="reference internal" href="../runtime.html#tvm.runtime.Module" title="tvm.runtime.Module"><em>Module</em></a><em>, </em><a class="reference internal" href="#tvm.relay.transform.PassContext" title="tvm.relay.transform.PassContext"><em>PassContext</em></a><em>) </em><em>-&gt;Module</em><em>]</em><em>]</em>) – The transformation function or class.</p></li>
-<li><p><strong>opt_level</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.8)"><em>int</em></a>) – The optimization level of this module pass.</p></li>
-<li><p><strong>name</strong> (<em>Optional</em><em>[</em><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)"><em>str</em></a><em>]</em>) – The name of the module pass. The name could be empty. In this case, the
-name of the optimization function will be used as the pass name.</p></li>
-<li><p><strong>required</strong> (<em>Optional</em><em>[</em><em>List</em><em>[</em><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)"><em>str</em></a><em>]</em><em>]</em>) – The list of passes that the module pass is dependent on.</p></li>
-</ul>
-</dd>
-<dt class="field-even">Returns</dt>
-<dd class="field-even"><p><strong>create_module_pass</strong> – A decorator will be returned if pass_func is not provided,
-otherwise return the decorated result.
-The returned decorator has two behaviors depending on the input:
-A new ModulePass will be returned when we decorate a pass function.
-A new ModulePass class will be returned when we decorate a class type.</p>
-</dd>
-<dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>Union[Callable, <a class="reference internal" href="#tvm.relay.transform.ModulePass" title="tvm.relay.transform.ModulePass">ModulePass</a>]</p>
-</dd>
-</dl>
-<p class="rubric">Examples</p>
-<p>The following code block decorates a module pass class.</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span class="nd">@relay.transform.module_pass</span>
-<span class="k">class</span> <span class="nc">CustomPipeline</span><span class="p">:</span>
-    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">enable_fold</span><span class="p">):</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">enable_fold</span> <span class="o">=</span> <span class="n">enable_fold</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">cse</span> <span class="o">=</span> <span class="n">relay</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">EliminateCommonSubexpr</span><span class="p">()</span>
-        <span class="bp">self</span><span class="o">.</span><span class="n">const_fold</span> <span class="o">=</span> <span class="n">relay</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">FoldConstant</span><span class="p">()</span>
-
-    <span class="k">def</span> <span class="nf">transform_module</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mod</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
-        <span class="n">mod</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cse</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="n">ctx</span><span class="p">)</span>
-        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">enable_fold</span><span class="p">:</span>
-            <span class="n">mod</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">const_fold</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="n">ctx</span><span class="p">)</span>
-        <span class="k">return</span> <span class="n">mod</span>
-
-<span class="c1"># create an instance of customized pipeline</span>
-<span class="n">pipeline</span> <span class="o">=</span> <span class="n">CustomPipeline</span><span class="p">(</span><span class="n">enable_fold</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
-<span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">pipeline</span><span class="p">,</span> <span class="n">transform</span><span class="o">.</span><span class="n">ModulePass</span><span class="p">)</span>
-<span class="c1"># run the pipeline.</span>
-<span class="n">output_module</span> <span class="o">=</span> <span class="n">pipeline</span><span class="p">(</span><span class="n">input_module</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>The following code creates a module pass by decorating
-a user defined transform function.</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span class="nd">@relay.transform.module_pass</span><span class="p">(</span><span class="n">opt_level</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
-<span class="k">def</span> <span class="nf">transform</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="n">ctx</span><span class="p">):</span>
-    <span class="n">tp</span> <span class="o">=</span> <span class="n">relay</span><span class="o">.</span><span class="n">TensorType</span><span class="p">((</span><span class="mi">10</span><span class="p">,),</span> <span class="s2">&quot;float32&quot;</span><span class="p">)</span>
-    <span class="n">x</span> <span class="o">=</span> <span class="n">relay</span><span class="o">.</span><span class="n">var</span><span class="p">(</span><span class="s2">&quot;x&quot;</span><span class="p">,</span> <span class="n">tp</span><span class="p">)</span>
-    <span class="n">gv</span> <span class="o">=</span> <span class="n">relay</span><span class="o">.</span><span class="n">GlobalVar</span><span class="p">(</span><span class="s2">&quot;var&quot;</span><span class="p">)</span>
-    <span class="n">func</span> <span class="o">=</span> <span class="n">relay</span><span class="o">.</span><span class="n">Function</span><span class="p">([</span><span class="n">x</span><span class="p">],</span> <span class="n">relay</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
-    <span class="n">new_mod</span> <span class="o">=</span> <span class="n">tvm</span><span class="o">.</span><span class="n">IRModule</span><span class="p">({</span><span class="n">gv</span><span class="p">:</span> <span class="n">func</span><span class="p">})</span>
-    <span class="n">new_mod</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">mod</span><span class="p">)</span>
-    <span class="k">return</span> <span class="n">new_mod</span>
-
-<span class="n">module_pass</span> <span class="o">=</span> <span class="n">transform</span>
-<span class="k">assert</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">module_pass</span><span class="p">,</span> <span class="n">transform</span><span class="o">.</span><span class="n">ModulePass</span><span class="p">)</span>
-<span class="k">assert</span> <span class="n">module_pass</span><span class="o">.</span><span class="n">info</span><span class="o">.</span><span class="n">opt_level</span> <span class="o">==</span> <span class="mi">2</span>
-
-<span class="c1"># Given a module m, the optimization could be invoked as the follwoing:</span>
-<span class="n">updated_mod</span> <span class="o">=</span> <span class="n">module_pass</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
-<span class="c1"># Now a function abs should be added to the module m.</span>
-</pre></div>
-</div>
-</dd></dl>
-
-<dl class="function">
 <dt id="tvm.relay.transform.to_cps">
 <code class="sig-prename descclassname">tvm.relay.transform.</code><code class="sig-name descname">to_cps</code><span class="sig-paren">(</span><em class="sig-param">func</em>, <em class="sig-param">mod=None</em><span class="sig-paren">)</span><a class="headerlink" href="#tvm.relay.transform.to_cps" title="Permalink to this definition">¶</a></dt>
 <dd><p>Turn expression into CPS expression.</p>
diff --git a/docs/api/python/relay/vision.html b/docs/api/python/relay/vision.html
index c19698e..4b7dabe 100644
--- a/docs/api/python/relay/vision.html
+++ b/docs/api/python/relay/vision.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="../ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
diff --git a/docs/api/python/rpc.html b/docs/api/python/rpc.html
index f231e64..350b780 100644
--- a/docs/api/python/rpc.html
+++ b/docs/api/python/rpc.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
diff --git a/docs/api/python/runtime.html b/docs/api/python/runtime.html
index 3693721..7eb8a19 100644
--- a/docs/api/python/runtime.html
+++ b/docs/api/python/runtime.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
diff --git a/docs/api/python/target.html b/docs/api/python/target.html
index cc3994d..6f7af39 100644
--- a/docs/api/python/target.html
+++ b/docs/api/python/target.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2 current"><a class="current reference internal" href="#">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
diff --git a/docs/api/python/te.html b/docs/api/python/te.html
index 42050e5..db2013e 100644
--- a/docs/api/python/te.html
+++ b/docs/api/python/te.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
diff --git a/docs/api/python/tir.html b/docs/api/python/tir.html
index 35b8b7b..b9a44d1 100644
--- a/docs/api/python/tir.html
+++ b/docs/api/python/tir.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="target.html">tvm.target</a></li>
 <li class="toctree-l2 current"><a class="current reference internal" href="#">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#module-tvm.tir.transform">tvm.tir.transform</a></li>
@@ -3020,52 +3021,49 @@ specified axis;</p></li>
 <tr class="row-odd"><td><p><a class="reference internal" href="#tvm.tir.transform.Apply" title="tvm.tir.transform.Apply"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Apply</span></code></a>(ftransform)</p></td>
 <td><p>Apply ftransform to each function in the Module.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.tir.transform.BindDeviceType" title="tvm.tir.transform.BindDeviceType"><code class="xref py py-obj docutils literal notranslate"><span class="pre">BindDeviceType</span></code></a>()</p></td>
-<td><p>Bind the device type of the function to be    the device_type specified in the target attribute.</p></td>
-</tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.tir.transform.CombineContextCall" title="tvm.tir.transform.CombineContextCall"><code class="xref py py-obj docutils literal notranslate"><span class="pre">CombineContextCall</span></code></a>()</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.tir.transform.CombineContextCall" title="tvm.tir.transform.CombineContextCall"><code class="xref py py-obj docutils literal notranslate"><span class="pre">CombineContextCall</span></code></a>()</p></td>
 <td><p>Combine context calls in the host function.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.tir.transform.Filter" title="tvm.tir.transform.Filter"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Filter</span></code></a>(fcond)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.tir.transform.Filter" title="tvm.tir.transform.Filter"><code class="xref py py-obj docutils literal notranslate"><span class="pre">Filter</span></code></a>(fcond)</p></td>
 <td><p>Filter functions by the calling convention attribute.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.tir.transform.InferFragment" title="tvm.tir.transform.InferFragment"><code class="xref py py-obj docutils literal notranslate"><span class="pre">InferFragment</span></code></a>()</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.tir.transform.InferFragment" title="tvm.tir.transform.InferFragment"><code class="xref py py-obj docutils literal notranslate"><span class="pre">InferFragment</span></code></a>()</p></td>
 <td><p>Infer the TensorCore fragment infomation using tensor intrinsics.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.tir.transform.LowerCustomDatatypes" title="tvm.tir.transform.LowerCustomDatatypes"><code class="xref py py-obj docutils literal notranslate"><span class="pre">LowerCustomDatatypes</span></code></a>()</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.tir.transform.LowerCustomDatatypes" title="tvm.tir.transform.LowerCustomDatatypes"><code class="xref py py-obj docutils literal notranslate"><span class="pre">LowerCustomDatatypes</span></code></a>()</p></td>
 <td><p>Lower custom datatypes.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.tir.transform.LowerDeviceStorageAccessInfo" title="tvm.tir.transform.LowerDeviceStorageAccessInfo"><code class="xref py py-obj docutils literal notranslate"><span class="pre">LowerDeviceStorageAccessInfo</span></code></a>()</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.tir.transform.LowerDeviceStorageAccessInfo" title="tvm.tir.transform.LowerDeviceStorageAccessInfo"><code class="xref py py-obj docutils literal notranslate"><span class="pre">LowerDeviceStorageAccessInfo</span></code></a>()</p></td>
 <td><p>Lower attached storage access information on device.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.tir.transform.LowerIntrin" title="tvm.tir.transform.LowerIntrin"><code class="xref py py-obj docutils literal notranslate"><span class="pre">LowerIntrin</span></code></a>()</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.tir.transform.LowerIntrin" title="tvm.tir.transform.LowerIntrin"><code class="xref py py-obj docutils literal notranslate"><span class="pre">LowerIntrin</span></code></a>()</p></td>
 <td><p>Lower target specific intrinsic calls.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.tir.transform.LowerTVMBuiltin" title="tvm.tir.transform.LowerTVMBuiltin"><code class="xref py py-obj docutils literal notranslate"><span class="pre">LowerTVMBuiltin</span></code></a>()</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.tir.transform.LowerTVMBuiltin" title="tvm.tir.transform.LowerTVMBuiltin"><code class="xref py py-obj docutils literal notranslate"><span class="pre">LowerTVMBuiltin</span></code></a>()</p></td>
 <td><p>Lower tvm builtin intrinsics.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.tir.transform.LowerThreadAllreduce" title="tvm.tir.transform.LowerThreadAllreduce"><code class="xref py py-obj docutils literal notranslate"><span class="pre">LowerThreadAllreduce</span></code></a>()</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.tir.transform.LowerThreadAllreduce" title="tvm.tir.transform.LowerThreadAllreduce"><code class="xref py py-obj docutils literal notranslate"><span class="pre">LowerThreadAllreduce</span></code></a>()</p></td>
 <td><p>Lower cross thread alleduce.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.tir.transform.LowerWarpMemory" title="tvm.tir.transform.LowerWarpMemory"><code class="xref py py-obj docutils literal notranslate"><span class="pre">LowerWarpMemory</span></code></a>()</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.tir.transform.LowerWarpMemory" title="tvm.tir.transform.LowerWarpMemory"><code class="xref py py-obj docutils literal notranslate"><span class="pre">LowerWarpMemory</span></code></a>()</p></td>
 <td><p>Lower warp memory access to low-level device related function calls.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.tir.transform.MakePackedAPI" title="tvm.tir.transform.MakePackedAPI"><code class="xref py py-obj docutils literal notranslate"><span class="pre">MakePackedAPI</span></code></a>([num_unpacked_params])</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.tir.transform.MakePackedAPI" title="tvm.tir.transform.MakePackedAPI"><code class="xref py py-obj docutils literal notranslate"><span class="pre">MakePackedAPI</span></code></a>([num_unpacked_params])</p></td>
 <td><p>Transform the PrimFuncs in the module to a packed func API.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.tir.transform.NarrowDataType" title="tvm.tir.transform.NarrowDataType"><code class="xref py py-obj docutils literal notranslate"><span class="pre">NarrowDataType</span></code></a>(target_bits)</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.tir.transform.NarrowDataType" title="tvm.tir.transform.NarrowDataType"><code class="xref py py-obj docutils literal notranslate"><span class="pre">NarrowDataType</span></code></a>(target_bits)</p></td>
 <td><p>Narrow down PrimExpr datatype in stmt to target_bits.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.tir.transform.SkipAssert" title="tvm.tir.transform.SkipAssert"><code class="xref py py-obj docutils literal notranslate"><span class="pre">SkipAssert</span></code></a>()</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.tir.transform.SkipAssert" title="tvm.tir.transform.SkipAssert"><code class="xref py py-obj docutils literal notranslate"><span class="pre">SkipAssert</span></code></a>()</p></td>
 <td><p>Skip assert stmt.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.tir.transform.SplitHostDevice" title="tvm.tir.transform.SplitHostDevice"><code class="xref py py-obj docutils literal notranslate"><span class="pre">SplitHostDevice</span></code></a>()</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.tir.transform.SplitHostDevice" title="tvm.tir.transform.SplitHostDevice"><code class="xref py py-obj docutils literal notranslate"><span class="pre">SplitHostDevice</span></code></a>()</p></td>
 <td><p>Split the function into a host function and device functions.</p></td>
 </tr>
-<tr class="row-even"><td><p><a class="reference internal" href="#tvm.tir.transform.ThreadSync" title="tvm.tir.transform.ThreadSync"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ThreadSync</span></code></a>(storage_scope)</p></td>
+<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.tir.transform.ThreadSync" title="tvm.tir.transform.ThreadSync"><code class="xref py py-obj docutils literal notranslate"><span class="pre">ThreadSync</span></code></a>(storage_scope)</p></td>
 <td><p>Insert sync between parallel read/write of shared buffers.</p></td>
 </tr>
-<tr class="row-odd"><td><p><a class="reference internal" href="#tvm.tir.transform.prim_func_pass" title="tvm.tir.transform.prim_func_pass"><code class="xref py py-obj docutils literal notranslate"><span class="pre">prim_func_pass</span></code></a>([pass_func, opt_level, name, …])</p></td>
+<tr class="row-even"><td><p><a class="reference internal" href="#tvm.tir.transform.prim_func_pass" title="tvm.tir.transform.prim_func_pass"><code class="xref py py-obj docutils literal notranslate"><span class="pre">prim_func_pass</span></code></a>([pass_func, opt_level, name, …])</p></td>
 <td><p>Decorate a function pass.</p></td>
 </tr>
 </tbody>
@@ -3092,7 +3090,7 @@ given optimization function.</p>
 <dl class="field-list simple">
 <dt class="field-odd">Parameters</dt>
 <dd class="field-odd"><ul class="simple">
-<li><p><strong>pass_func</strong> (<em>Optional</em><em>[</em><em>Callable</em><em>[</em><em>(</em><a class="reference internal" href="#tvm.tir.PrimFunc" title="tvm.tir.PrimFunc"><em>PrimFunc</em></a><em>, </em><a class="reference internal" href="ir.html#tvm.ir.IRModule" title="tvm.ir.IRModule"><em>IRModule</em></a><em>, </em><a class="reference internal" href="relay/transform.html#tvm.relay.transform.PassContext" title="tvm.relay.transform.PassContext"><em>PassContext</em></a><em>) </em [...]
+<li><p><strong>pass_func</strong> (<em>Optional</em><em>[</em><em>Callable</em><em>[</em><em>(</em><a class="reference internal" href="#tvm.tir.PrimFunc" title="tvm.tir.PrimFunc"><em>PrimFunc</em></a><em>, </em><a class="reference internal" href="ir.html#tvm.ir.IRModule" title="tvm.ir.IRModule"><em>IRModule</em></a><em>, </em><a class="reference internal" href="ir.html#tvm.transform.PassContext" title="tvm.transform.PassContext"><em>PassContext</em></a><em>) </em><em>-&gt; PrimFunc</em>< [...]
 <li><p><strong>opt_level</strong> (<a class="reference external" href="https://docs.python.org/3/library/functions.html#int" title="(in Python v3.8)"><em>int</em></a>) – The optimization level of this module pass.</p></li>
 <li><p><strong>name</strong> (<em>Optional</em><em>[</em><a class="reference external" href="https://docs.python.org/3/library/stdtypes.html#str" title="(in Python v3.8)"><em>str</em></a><em>]</em>) – The name of the function pass. The name could be empty. In this case, the
 name of the optimization function will be used as the pass name.</p></li>
@@ -3162,24 +3160,7 @@ pass class should be created through py:func:<cite>tvm.tir.transform.function_pa
 <dd class="field-even"><p><strong>fpass</strong> – The result pass</p>
 </dd>
 <dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>tvm.ir.transform.Pass</p>
-</dd>
-</dl>
-</dd></dl>
-
-<dl class="function">
-<dt id="tvm.tir.transform.BindDeviceType">
-<code class="sig-prename descclassname">tvm.tir.transform.</code><code class="sig-name descname">BindDeviceType</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#tvm.tir.transform.BindDeviceType" title="Permalink to this definition">¶</a></dt>
-<dd><dl class="simple">
-<dt>Bind the device type of the function to be</dt><dd><p>the device_type specified in the target attribute.</p>
-</dd>
-</dl>
-<dl class="field-list simple">
-<dt class="field-odd">Returns</dt>
-<dd class="field-odd"><p><strong>fpass</strong> – The result pass</p>
-</dd>
-<dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.ir.transform.Pass</p>
+<dd class="field-odd"><p><a class="reference internal" href="ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -3193,7 +3174,7 @@ pass class should be created through py:func:<cite>tvm.tir.transform.function_pa
 <dd class="field-odd"><p><strong>fpass</strong> – The result pass</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.ir.transform.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -3210,7 +3191,7 @@ pass class should be created through py:func:<cite>tvm.tir.transform.function_pa
 <dd class="field-even"><p><strong>fpass</strong> – The result pass</p>
 </dd>
 <dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>tvm.ir.transform.Pass</p>
+<dd class="field-odd"><p><a class="reference internal" href="ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -3224,7 +3205,7 @@ pass class should be created through py:func:<cite>tvm.tir.transform.function_pa
 <dd class="field-odd"><p><strong>fpass</strong> – The result pass</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.ir.transform.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -3239,7 +3220,7 @@ pass class should be created through py:func:<cite>tvm.tir.transform.function_pa
 <dd class="field-odd"><p><strong>fpass</strong> – The result pass</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.ir.transform.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -3253,7 +3234,7 @@ pass class should be created through py:func:<cite>tvm.tir.transform.function_pa
 <dd class="field-odd"><p><strong>fpass</strong> – The result pass</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.ir.transform.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 <div class="admonition note">
@@ -3271,7 +3252,7 @@ pass class should be created through py:func:<cite>tvm.tir.transform.function_pa
 <dd class="field-odd"><p><strong>fpass</strong> – The result pass</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.ir.transform.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -3285,7 +3266,7 @@ pass class should be created through py:func:<cite>tvm.tir.transform.function_pa
 <dd class="field-odd"><p><strong>fpass</strong> – The result pass</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.ir.transform.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -3299,7 +3280,7 @@ pass class should be created through py:func:<cite>tvm.tir.transform.function_pa
 <dd class="field-odd"><p><strong>fpass</strong> – The result pass</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.ir.transform.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -3313,7 +3294,7 @@ pass class should be created through py:func:<cite>tvm.tir.transform.function_pa
 <dd class="field-odd"><p><strong>fpass</strong> – The result pass</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.ir.transform.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -3331,7 +3312,7 @@ following the PackedFunc input signature.</p>
 <dd class="field-even"><p><strong>fpass</strong> – The result pass</p>
 </dd>
 <dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>tvm.ir.transform.Pass</p>
+<dd class="field-odd"><p><a class="reference internal" href="ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -3348,7 +3329,7 @@ following the PackedFunc input signature.</p>
 <dd class="field-even"><p><strong>fpass</strong> – The result pass</p>
 </dd>
 <dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>tvm.ir.transform.Pass</p>
+<dd class="field-odd"><p><a class="reference internal" href="ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 <div class="admonition note">
@@ -3366,7 +3347,7 @@ following the PackedFunc input signature.</p>
 <dd class="field-odd"><p><strong>fpass</strong> – The result pass</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.ir.transform.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -3380,7 +3361,7 @@ following the PackedFunc input signature.</p>
 <dd class="field-odd"><p><strong>fpass</strong> – The result pass</p>
 </dd>
 <dt class="field-even">Return type</dt>
-<dd class="field-even"><p>tvm.ir.transform.Pass</p>
+<dd class="field-even"><p><a class="reference internal" href="ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
@@ -3397,7 +3378,7 @@ following the PackedFunc input signature.</p>
 <dd class="field-even"><p><strong>fpass</strong> – The result pass</p>
 </dd>
 <dt class="field-odd">Return type</dt>
-<dd class="field-odd"><p>tvm.ir.transform.Pass</p>
+<dd class="field-odd"><p><a class="reference internal" href="ir.html#tvm.transform.Pass" title="tvm.transform.Pass">tvm.transform.Pass</a></p>
 </dd>
 </dl>
 </dd></dl>
diff --git a/docs/api/python/topi.html b/docs/api/python/topi.html
index a09f3f9..09fb1f3 100644
--- a/docs/api/python/topi.html
+++ b/docs/api/python/topi.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
diff --git a/docs/api/python/vta/index.html b/docs/api/python/vta/index.html
index 3df1ec7..6e0068a 100644
--- a/docs/api/python/vta/index.html
+++ b/docs/api/python/vta/index.html
@@ -107,6 +107,7 @@
 <li class="toctree-l2"><a class="reference internal" href="../ndarray.html">tvm.runtime.ndarray</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../error.html">tvm.error</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../ir.html">tvm.ir</a></li>
+<li class="toctree-l2"><a class="reference internal" href="../ir.html#module-tvm.transform">tvm.transform</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../target.html">tvm.target</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../tir.html">tvm.tir</a></li>
 <li class="toctree-l2"><a class="reference internal" href="../tir.html#module-tvm.tir.transform">tvm.tir.transform</a></li>
diff --git a/docs/dev/convert_layout.html b/docs/dev/convert_layout.html
index ffe9fac..ab5266c 100644
--- a/docs/dev/convert_layout.html
+++ b/docs/dev/convert_layout.html
@@ -386,7 +386,7 @@
 
 <span class="c1"># Convert the layout to NCHW</span>
 <span class="c1"># RemoveUnunsedFunctions is used to clean up the graph.</span>
-<span class="n">seq</span> <span class="o">=</span> <span class="n">relay</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">Sequential</span><span class="p">([</span><span class="n">relay</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">RemoveUnusedFunctions</span><span class="p">(),</span>
+<span class="n">seq</span> <span class="o">=</span> <span class="n">tvm</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">Sequential</span><span class="p">([</span><span class="n">relay</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">RemoveUnusedFunctions</span><span class="p">(),</span>
                                   <span class="n">relay</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">ConvertLayout</span><span class="p">(</span><span class="s1">&#39;NCHW&#39;</span><span class="p">)])</span>
 <span class="k">with</span> <span class="n">relay</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">PassContext</span><span class="p">(</span><span class="n">opt_level</span><span class="o">=</span><span class="mi">3</span><span class="p">):</span>
     <span class="n">mod</span> <span class="o">=</span> <span class="n">seq</span><span class="p">(</span><span class="n">mod</span><span class="p">)</span>
diff --git a/docs/dev/relay_pass_infra.html b/docs/dev/relay_pass_infra.html
index 52ba3ba..de03027 100644
--- a/docs/dev/relay_pass_infra.html
+++ b/docs/dev/relay_pass_infra.html
@@ -701,7 +701,7 @@ using <code class="docutils literal notranslate"><span class="pre">Sequential</s
 <span class="n">func</span> <span class="o">=</span> <span class="n">relay</span><span class="o">.</span><span class="n">Function</span><span class="p">([</span><span class="n">x</span><span class="p">],</span> <span class="n">z2</span><span class="p">)</span>
 
 <span class="c1"># Customize the optimization pipeline.</span>
-<span class="n">seq</span> <span class="o">=</span> <span class="n">_transform</span><span class="o">.</span><span class="n">Sequential</span><span class="p">([</span>
+<span class="n">seq</span> <span class="o">=</span> <span class="n">tvm</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">Sequential</span><span class="p">([</span>
     <span class="n">relay</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">InferType</span><span class="p">(),</span>
     <span class="n">relay</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">FoldConstant</span><span class="p">(),</span>
     <span class="n">relay</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">EliminateCommonSubexpr</span><span class="p">(),</span>
@@ -727,7 +727,7 @@ using <code class="docutils literal notranslate"><span class="pre">Sequential</s
 whole module after applying a certain pass. A slightly modified version of the
 sequential pass example could be like the following to enable IR dumping for
 <code class="docutils literal notranslate"><span class="pre">FoldConstant</span></code> optimization.</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span class="n">seq</span> <span class="o">=</span> <span class="n">_transform</span><span class="o">.</span><span class="n">Sequential</span><span class="p">([</span>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span class="n">seq</span> <span class="o">=</span> <span class="n">tvm</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">Sequential</span><span class="p">([</span>
     <span class="n">relay</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">InferType</span><span class="p">(),</span>
     <span class="n">relay</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">FoldConstant</span><span class="p">(),</span>
     <span class="n">relay</span><span class="o">.</span><span class="n">transform</span><span class="o">.</span><span class="n">PrintIR</span><span class="p">(),</span>
diff --git a/docs/doxygen/algorithm_8h_source.html b/docs/doxygen/algorithm_8h_source.html
index df14181..ebb8a78 100644
--- a/docs/doxygen/algorithm_8h_source.html
+++ b/docs/doxygen/algorithm_8h_source.html
@@ -99,11 +99,11 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="ttc" id="structtvm_1_1relay_1_1TopKAttrs_html_a7513e738a33caefe6978de6416f57a1f"><div class="ttname"><a href="structtvm_1_1relay_1_1TopKAttrs.html#a7513e738a33caefe6978de6416f57a1f">tvm::relay::TopKAttrs::axis</a></div><div class="ttdeci">int axis</div><div class="ttdef"><b>Definition:</b> algorithm.h:54</div></div>
 <div class="ttc" id="structtvm_1_1relay_1_1TopKAttrs_html_ae2ccec6187706f54757242e1839bb2d1"><div class="ttname"><a href="structtvm_1_1relay_1_1TopKAttrs.html#ae2ccec6187706f54757242e1839bb2d1">tvm::relay::TopKAttrs::is_ascend</a></div><div class="ttdeci">bool is_ascend</div><div class="ttdef"><b>Definition:</b> algorithm.h:55</div></div>
 <div class="ttc" id="ir_2attrs_8h_html_a578da113eb199bad72e26c03ad24832f"><div class="ttname"><a href="ir_2attrs_8h.html#a578da113eb199bad72e26c03ad24832f">TVM_ATTR_FIELD</a></div><div class="ttdeci">#define TVM_ATTR_FIELD(FieldName)</div><div class="ttdoc">Declare an attribute field. </div><div class="ttdef"><b>Definition:</b> attrs.h:77</div></div>
-<div class="ttc" id="namespacetvm_html_a28c693333c2b15702b1a9a57dec0fbf5"><div class="ttname"><a href="namespacetvm.html#a28c693333c2b15702b1a9a57dec0fbf5">tvm::NullValue&lt; DataType &gt;</a></div><div class="ttdeci">DataType NullValue&lt; DataType &gt;()</div><div class="ttdef"><b>Definition:</b> attrs.h:92</div></div>
+<div class="ttc" id="namespacetvm_html_a28c693333c2b15702b1a9a57dec0fbf5"><div class="ttname"><a href="namespacetvm.html#a28c693333c2b15702b1a9a57dec0fbf5">tvm::NullValue&lt; DataType &gt;</a></div><div class="ttdeci">DataType NullValue&lt; DataType &gt;()</div><div class="ttdef"><b>Definition:</b> attrs.h:94</div></div>
 <div class="ttc" id="structtvm_1_1relay_1_1TopKAttrs_html_a2d9b93c511148c070e7d5974d2620c6e"><div class="ttname"><a href="structtvm_1_1relay_1_1TopKAttrs.html#a2d9b93c511148c070e7d5974d2620c6e">tvm::relay::TopKAttrs::TVM_DECLARE_ATTRS</a></div><div class="ttdeci">TVM_DECLARE_ATTRS(TopKAttrs,&quot;relay.attrs.TopkAttrs&quot;)</div><div class="ttdef"><b>Definition:</b> algorithm.h:59</div></div>
 <div class="ttc" id="base_8h_html"><div class="ttname"><a href="base_8h.html">base.h</a></div><div class="ttdoc">Base classes for the Relay IR. </div></div>
 <div class="ttc" id="structtvm_1_1relay_1_1ArgsortAttrs_html_a867e4a526a4b5e2512e658839d6c1a9e"><div class="ttname"><a href="structtvm_1_1relay_1_1ArgsortAttrs.html#a867e4a526a4b5e2512e658839d6c1a9e">tvm::relay::ArgsortAttrs::TVM_DECLARE_ATTRS</a></div><div class="ttdeci">TVM_DECLARE_ATTRS(ArgsortAttrs,&quot;relay.attrs.ArgsortAttrs&quot;)</div><div class="ttdef"><b>Definition:</b> algorithm.h:40</div></div>
-<div class="ttc" id="classtvm_1_1AttrsNode_html"><div class="ttname"><a href="classtvm_1_1AttrsNode.html">tvm::AttrsNode</a></div><div class="ttdoc">The base class of the all the Use &quot;curiously recurring template pattern&quot;. </div><div class="ttdef"><b>Definition:</b> attrs.h:657</div></div>
+<div class="ttc" id="classtvm_1_1AttrsNode_html"><div class="ttname"><a href="classtvm_1_1AttrsNode.html">tvm::AttrsNode</a></div><div class="ttdoc">The base class of the all the Use &quot;curiously recurring template pattern&quot;. </div><div class="ttdef"><b>Definition:</b> attrs.h:659</div></div>
 <div class="ttc" id="structtvm_1_1relay_1_1TopKAttrs_html_a5717dfe7edcd2817fc35b2e84dc2305d"><div class="ttname"><a href="structtvm_1_1relay_1_1TopKAttrs.html#a5717dfe7edcd2817fc35b2e84dc2305d">tvm::relay::TopKAttrs::ret_type</a></div><div class="ttdeci">std::string ret_type</div><div class="ttdef"><b>Definition:</b> algorithm.h:56</div></div>
 <div class="ttc" id="structtvm_1_1relay_1_1TopKAttrs_html"><div class="ttname"><a href="structtvm_1_1relay_1_1TopKAttrs.html">tvm::relay::TopKAttrs</a></div><div class="ttdef"><b>Definition:</b> algorithm.h:52</div></div>
 <div class="ttc" id="structtvm_1_1relay_1_1ArgsortAttrs_html_a533842c9351d0ec7f8e2673e94987957"><div class="ttname"><a href="structtvm_1_1relay_1_1ArgsortAttrs.html#a533842c9351d0ec7f8e2673e94987957">tvm::relay::ArgsortAttrs::dtype</a></div><div class="ttdeci">DataType dtype</div><div class="ttdef"><b>Definition:</b> algorithm.h:38</div></div>
diff --git a/docs/doxygen/analyzer_8h_source.html b/docs/doxygen/analyzer_8h_source.html
index 9842e9e..610af65 100644
--- a/docs/doxygen/analyzer_8h_source.html
+++ b/docs/doxygen/analyzer_8h_source.html
@@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="ttc" id="classtvm_1_1tir_1_1Var_html"><div class="ttname"><a href="classtvm_1_1tir_1_1Var.html">tvm::tir::Var</a></div><div class="ttdoc">a named variable in TVM </div><div class="ttdef"><b>Definition:</b> var.h:85</div></div>
 <div class="ttc" id="classtvm_1_1arith_1_1ConstIntBoundNode_html_a0d39b4e097e1e0e4fffd85d3d2b22459"><div class="ttname"><a href="classtvm_1_1arith_1_1ConstIntBoundNode.html#a0d39b4e097e1e0e4fffd85d3d2b22459">tvm::arith::ConstIntBoundNode::SEqualReduce</a></div><div class="ttdeci">bool SEqualReduce(const ConstIntBoundNode *other, SEqualReducer equal) const </div><div class="ttdef"><b>Definition:</b> analyzer.h:71</div></div>
 <div class="ttc" id="classtvm_1_1AttrVisitor_html"><div class="ttname"><a href="classtvm_1_1AttrVisitor.html">tvm::AttrVisitor</a></div><div class="ttdoc">Visitor class for to get the attributesof a AST/IR node. The content is going to be called for each f...</div><div class="ttdef"><b>Definition:</b> reflection.h:52</div></div>
-<div class="ttc" id="classtvm_1_1Range_html"><div class="ttname"><a href="classtvm_1_1Range.html">tvm::Range</a></div><div class="ttdoc">Range constainer. </div><div class="ttdef"><b>Definition:</b> expr.h:399</div></div>
+<div class="ttc" id="classtvm_1_1Range_html"><div class="ttname"><a href="classtvm_1_1Range.html">tvm::Range</a></div><div class="ttdoc">Range constainer. </div><div class="ttdef"><b>Definition:</b> expr.h:458</div></div>
 <div class="ttc" id="classtvm_1_1arith_1_1ModularSet_html"><div class="ttname"><a href="classtvm_1_1arith_1_1ModularSet.html">tvm::arith::ModularSet</a></div><div class="ttdoc">reference of ModularSetNode </div><div class="ttdef"><b>Definition:</b> analyzer.h:198</div></div>
 <div class="ttc" id="classtvm_1_1arith_1_1Analyzer_html_a0d054ea2ea5b7e99f0883c00672ec831"><div class="ttname"><a href="classtvm_1_1arith_1_1Analyzer.html#a0d054ea2ea5b7e99f0883c00672ec831">tvm::arith::Analyzer::int_set</a></div><div class="ttdeci">IntSetAnalyzer int_set</div><div class="ttdoc">sub-analyzer: int set </div><div class="ttdef"><b>Definition:</b> analyzer.h:403</div></div>
 <div class="ttc" id="classtvm_1_1arith_1_1ConstIntBoundAnalyzer_html"><div class="ttname"><a href="classtvm_1_1arith_1_1ConstIntBoundAnalyzer.html">tvm::arith::ConstIntBoundAnalyzer</a></div><div class="ttdoc">Analyzer to get constant integer bound over expression. </div><div class="ttdef"><b>Definition:</b> analyzer.h:108</div></div>
@@ -115,7 +115,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="ttc" id="classtvm_1_1arith_1_1ModularSetAnalyzer_html"><div class="ttname"><a href="classtvm_1_1arith_1_1ModularSetAnalyzer.html">tvm::arith::ModularSetAnalyzer</a></div><div class="ttdoc">Analyzer to get modular information over expression. </div><div class="ttdef"><b>Definition:</b> analyzer.h:208</div></div>
 <div class="ttc" id="classtvm_1_1arith_1_1ModularSetNode_html_afe63e5586712774be5935e86121431ad"><div class="ttname"><a href="classtvm_1_1arith_1_1ModularSetNode.html#afe63e5586712774be5935e86121431ad">tvm::arith::ModularSetNode::base</a></div><div class="ttdeci">int64_t base</div><div class="ttdoc">The base. </div><div class="ttdef"><b>Definition:</b> analyzer.h:179</div></div>
 <div class="ttc" id="classtvm_1_1arith_1_1ConstIntBoundNode_html_a0d8f5f54f4f380f664016f466f100b3a"><div class="ttname"><a href="classtvm_1_1arith_1_1ConstIntBoundNode.html#a0d8f5f54f4f380f664016f466f100b3a">tvm::arith::ConstIntBoundNode::kNegInf</a></div><div class="ttdeci">static const constexpr int64_t kNegInf</div><div class="ttdoc">Number to represent -inf. </div><div class="ttdef"><b>Definition:</b> analyzer.h:81</div></div>
-<div class="ttc" id="object_8h_html_ac6e7295a4999e2c8e4a2c990beca887a"><div class="ttname"><a href="object_8h.html#ac6e7295a4999e2c8e4a2c990beca887a">TVM_DEFINE_OBJECT_REF_METHODS</a></div><div class="ttdeci">#define TVM_DEFINE_OBJECT_REF_METHODS(TypeName, ParentType, ObjectName)</div><div class="ttdef"><b>Definition:</b> object.h:729</div></div>
+<div class="ttc" id="object_8h_html_ac6e7295a4999e2c8e4a2c990beca887a"><div class="ttname"><a href="object_8h.html#ac6e7295a4999e2c8e4a2c990beca887a">TVM_DEFINE_OBJECT_REF_METHODS</a></div><div class="ttdeci">#define TVM_DEFINE_OBJECT_REF_METHODS(TypeName, ParentType, ObjectName)</div><div class="ttdef"><b>Definition:</b> object.h:744</div></div>
 <div class="ttc" id="classtvm_1_1arith_1_1ModularSetNode_html_a04a38e5207637fda175b031e3b569349"><div class="ttname"><a href="classtvm_1_1arith_1_1ModularSetNode.html#a04a38e5207637fda175b031e3b569349">tvm::arith::ModularSetNode::SEqualReduce</a></div><div class="ttdeci">bool SEqualReduce(const ModularSetNode *other, SEqualReducer equal) const </div><div class="ttdef"><b>Definition:</b> analyzer.h:186</div></div>
 <div class="ttc" id="classtvm_1_1With_html"><div class="ttname"><a href="classtvm_1_1With.html">tvm::With</a></div><div class="ttdoc">RAII wrapper function to enter and exit a context object similar to python&amp;#39;s with syntax...</div><div class="ttdef"><b>Definition:</b> with.h:56</div></div>
 <div class="ttc" id="namespacetvm_html_ab49bad0808ba033343e72ba37b39af2e"><div class="ttname"><a href="namespacetvm.html#ab49bad0808ba033343e72ba37b39af2e">tvm::max</a></div><div class="ttdeci">PrimExpr max(PrimExpr a, PrimExpr b)</div><div class="ttdoc">take maximum of two values </div></div>
diff --git a/docs/doxygen/annotated.html b/docs/doxygen/annotated.html
index 4055091..a0fc595 100644
--- a/docs/doxygen/annotated.html
+++ b/docs/doxygen/annotated.html
@@ -333,26 +333,28 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <tr id="row_2_3_16_" 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_1runtime_1_1ObjectTypeChecker.html" target="_self">ObjectTypeChecker</a></td><td class="desc"><a class="el" href="classtvm_1_1Type.html" title="Managed reference to TypeNode. ">Type</a> traits for runtime type check during FFI conversion </td></tr>
 <tr id="row_2_3_17_" 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_1runtime_1_1ObjectTypeChecker_3_01Array_3_01T_01_4_01_4.html" target="_self">ObjectTypeChecker&lt; Array&lt; T &gt; &gt;</a></td><td class="desc"></td></tr>
 <tr id="row_2_3_18_" 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_1runtime_1_1ObjectTypeChecker_3_01Map_3_01K_00_01V_01_4_01_4.html" target="_self">ObjectTypeChecker&lt; Map&lt; K, V &gt; &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_2_3_19_" 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_1runtime_1_1PackedFunc.html" target="_self">PackedFunc</a></td><td class="desc">Packed function is a type-erased function. The arguments are passed by packed format </td></tr>
-<tr id="row_2_3_20_" 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_1runtime_1_1PackedFuncValueConverter.html" target="_self">PackedFuncValueConverter</a></td><td class="desc"><a class="el" href="classtvm_1_1Type.html" title="Managed reference to TypeNode. ">Type</a> trait to specify special value conversion rules from <a class="el" href="classtvm_1_1 [...]
-<tr id="row_2_3_21_" 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_1runtime_1_1PackedFuncValueConverter_3_01PrimExpr_01_4.html" target="_self">PackedFuncValueConverter&lt; PrimExpr &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_2_3_22_" 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_1runtime_1_1PackedFuncValueConverter_3_01tvm_1_1Integer_01_4.html" target="_self">PackedFuncValueConverter&lt; tvm::Integer &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_2_3_23_" 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_1runtime_1_1PackedFuncValueConverter_3_1_1tvm_1_1runtime_1_1String_01_4.html" target="_self">PackedFuncValueConverter&lt;::tvm::runtime::String &gt;</a></td><td class="desc"></td></tr>
-<tr id="row_2_3_24_" 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_1runtime_1_1Registry.html" target="_self">Registry</a></td><td class="desc"><a class="el" href="classtvm_1_1runtime_1_1Registry.html" title="Registry for global function. ">Registry</a> for global function </td></tr>
-<tr id="row_2_3_25_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_2_3_25_" class="arrow" onclick="toggleFolder('2_3_25_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1runtime_1_1SimpleObjAllocator.html" target="_self">SimpleObjAllocator</a></td><td class="desc"></td></tr>
-<tr id="row_2_3_25_0_" 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="classtvm_1_1runtime_1_1SimpleObjAllocator_1_1ArrayHandler.html" target="_self">ArrayHandler</a></td><td class="desc"></td></tr>
-<tr id="row_2_3_25_1_" 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="classtvm_1_1runtime_1_1SimpleObjAllocator_1_1Handler.html" target="_self">Handler</a></td><td class="desc"></td></tr>
-<tr id="row_2_3_26_" 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_1runtime_1_1String.html" target="_self">String</a></td><td class="desc">Reference to string objects </td></tr>
-<tr id="row_2_3_27_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_2_3_27_" class="arrow" onclick="toggleFolder('2_3_27_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1runtime_1_1StringObj.html" target="_self">StringObj</a></td><td class="desc">An object representing string. It's POD type </td></tr>
-<tr id="row_2_3_27_0_" 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="classtvm_1_1runtime_1_1StringObj_1_1FromStd.html" target="_self">FromStd</a></td><td class="desc">An object representing string moved from std::string </td></tr>
-<tr id="row_2_3_28_" 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_1runtime_1_1TVMArgs.html" target="_self">TVMArgs</a></td><td class="desc">Arguments into TVM functions </td></tr>
-<tr id="row_2_3_29_" 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_1runtime_1_1TVMArgsSetter.html" target="_self">TVMArgsSetter</a></td><td class="desc"></td></tr>
-<tr id="row_2_3_30_" 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_1runtime_1_1TVMArgValue.html" target="_self">TVMArgValue</a></td><td class="desc">A single argument value to <a class="el" href="classtvm_1_1runtime_1_1PackedFunc.html" title="Packed function is a type-erased function. The arguments are passed by packed format. ">PackedFunc</a>. Contai [...]
-<tr id="row_2_3_31_" 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_1runtime_1_1TVMMovableArgValue__.html" target="_self">TVMMovableArgValue_</a></td><td class="desc">Internal auxiliary struct for <a class="el" href="classtvm_1_1runtime_1_1TypedPackedFunc.html" title="Please refer to TypedPackedFunc&lt;R(Args..)&gt;. ">TypedPackedFunc</a> to indicate a [...]
-<tr id="row_2_3_32_" 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_1runtime_1_1TVMPODValue__.html" target="_self">TVMPODValue_</a></td><td class="desc">Internal base class to handle conversion to POD values </td></tr>
-<tr id="row_2_3_33_" 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_1runtime_1_1TVMRetValue.html" target="_self">TVMRetValue</a></td><td class="desc">Return Value container, Unlike <a class="el" href="classtvm_1_1runtime_1_1TVMArgValue.html" title="A single argument value to PackedFunc. Containing both type_code and TVMValue. ">TVMArgValue</a>, which o [...]
-<tr id="row_2_3_34_" 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_1runtime_1_1TypedPackedFunc.html" target="_self">TypedPackedFunc</a></td><td class="desc">Please refer to <a class="el" href="classtvm_1_1runtime_1_1TypedPackedFunc_3_01R_07Args_8_8_8_08_4.html#TypedPackedFuncAnchor">TypedPackedFunc&lt;R(Args..)&gt;</a> </td></tr>
-<tr id="row_2_3_35_" 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_1runtime_1_1TypedPackedFunc_3_01R_07Args_8_8_8_08_4.html" target="_self">TypedPackedFunc&lt; R(Args...)&gt;</a></td><td class="desc">A <a class="el" href="classtvm_1_1runtime_1_1PackedFunc.html" title="Packed function is a type-erased function. The arguments are passed by packed format [...]
+<tr id="row_2_3_19_" 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_1runtime_1_1Optional.html" target="_self">Optional</a></td><td class="desc"><a class="el" href="classtvm_1_1runtime_1_1Optional.html" title="Optional container that to represent to a Nullable variant of T. ">Optional</a> container that to represent to a Nullable variant of T </td></tr>
+<tr id="row_2_3_20_" 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_1runtime_1_1PackedFunc.html" target="_self">PackedFunc</a></td><td class="desc">Packed function is a type-erased function. The arguments are passed by packed format </td></tr>
+<tr id="row_2_3_21_" 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_1runtime_1_1PackedFuncValueConverter.html" target="_self">PackedFuncValueConverter</a></td><td class="desc"><a class="el" href="classtvm_1_1Type.html" title="Managed reference to TypeNode. ">Type</a> trait to specify special value conversion rules from <a class="el" href="classtvm_1_1 [...]
+<tr id="row_2_3_22_" 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_1runtime_1_1PackedFuncValueConverter_3_01Optional_3_01T_01_4_01_4.html" target="_self">PackedFuncValueConverter&lt; Optional&lt; T &gt; &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_2_3_23_" 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_1runtime_1_1PackedFuncValueConverter_3_01PrimExpr_01_4.html" target="_self">PackedFuncValueConverter&lt; PrimExpr &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_2_3_24_" 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_1runtime_1_1PackedFuncValueConverter_3_01tvm_1_1Integer_01_4.html" target="_self">PackedFuncValueConverter&lt; tvm::Integer &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_2_3_25_" 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_1runtime_1_1PackedFuncValueConverter_3_1_1tvm_1_1runtime_1_1String_01_4.html" target="_self">PackedFuncValueConverter&lt;::tvm::runtime::String &gt;</a></td><td class="desc"></td></tr>
+<tr id="row_2_3_26_" 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_1runtime_1_1Registry.html" target="_self">Registry</a></td><td class="desc"><a class="el" href="classtvm_1_1runtime_1_1Registry.html" title="Registry for global function. ">Registry</a> for global function </td></tr>
+<tr id="row_2_3_27_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_2_3_27_" class="arrow" onclick="toggleFolder('2_3_27_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1runtime_1_1SimpleObjAllocator.html" target="_self">SimpleObjAllocator</a></td><td class="desc"></td></tr>
+<tr id="row_2_3_27_0_" 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="classtvm_1_1runtime_1_1SimpleObjAllocator_1_1ArrayHandler.html" target="_self">ArrayHandler</a></td><td class="desc"></td></tr>
+<tr id="row_2_3_27_1_" 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="classtvm_1_1runtime_1_1SimpleObjAllocator_1_1Handler.html" target="_self">Handler</a></td><td class="desc"></td></tr>
+<tr id="row_2_3_28_" 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_1runtime_1_1String.html" target="_self">String</a></td><td class="desc">Reference to string objects </td></tr>
+<tr id="row_2_3_29_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_2_3_29_" class="arrow" onclick="toggleFolder('2_3_29_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1runtime_1_1StringObj.html" target="_self">StringObj</a></td><td class="desc">An object representing string. It's POD type </td></tr>
+<tr id="row_2_3_29_0_" 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="classtvm_1_1runtime_1_1StringObj_1_1FromStd.html" target="_self">FromStd</a></td><td class="desc">An object representing string moved from std::string </td></tr>
+<tr id="row_2_3_30_" 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_1runtime_1_1TVMArgs.html" target="_self">TVMArgs</a></td><td class="desc">Arguments into TVM functions </td></tr>
+<tr id="row_2_3_31_" 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_1runtime_1_1TVMArgsSetter.html" target="_self">TVMArgsSetter</a></td><td class="desc"></td></tr>
+<tr id="row_2_3_32_" 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_1runtime_1_1TVMArgValue.html" target="_self">TVMArgValue</a></td><td class="desc">A single argument value to <a class="el" href="classtvm_1_1runtime_1_1PackedFunc.html" title="Packed function is a type-erased function. The arguments are passed by packed format. ">PackedFunc</a>. Contai [...]
+<tr id="row_2_3_33_" 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_1runtime_1_1TVMMovableArgValue__.html" target="_self">TVMMovableArgValue_</a></td><td class="desc">Internal auxiliary struct for <a class="el" href="classtvm_1_1runtime_1_1TypedPackedFunc.html" title="Please refer to TypedPackedFunc&lt;R(Args..)&gt;. ">TypedPackedFunc</a> to indicate a [...]
+<tr id="row_2_3_34_" 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_1runtime_1_1TVMPODValue__.html" target="_self">TVMPODValue_</a></td><td class="desc">Internal base class to handle conversion to POD values </td></tr>
+<tr id="row_2_3_35_" 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_1runtime_1_1TVMRetValue.html" target="_self">TVMRetValue</a></td><td class="desc">Return Value container, Unlike <a class="el" href="classtvm_1_1runtime_1_1TVMArgValue.html" title="A single argument value to PackedFunc. Containing both type_code and TVMValue. ">TVMArgValue</a>, which o [...]
+<tr id="row_2_3_36_" 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_1runtime_1_1TypedPackedFunc.html" target="_self">TypedPackedFunc</a></td><td class="desc">Please refer to <a class="el" href="classtvm_1_1runtime_1_1TypedPackedFunc_3_01R_07Args_8_8_8_08_4.html#TypedPackedFuncAnchor">TypedPackedFunc&lt;R(Args..)&gt;</a> </td></tr>
+<tr id="row_2_3_37_" 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_1runtime_1_1TypedPackedFunc_3_01R_07Args_8_8_8_08_4.html" target="_self">TypedPackedFunc&lt; R(Args...)&gt;</a></td><td class="desc">A <a class="el" href="classtvm_1_1runtime_1_1PackedFunc.html" title="Packed function is a type-erased function. The arguments are passed by packed format [...]
 <tr id="row_2_4_" style="display:none;"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_2_4_" class="arrow" onclick="toggleFolder('2_4_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacetvm_1_1te.html" target="_self">te</a></td><td class="desc"><a class="el" href="classtvm_1_1te_1_1Tensor.html" title="Tensor structure representing a possible input, or intermediate computation result. ">Tensor</a [...]
 <tr id="row_2_4_0_" 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_1te_1_1BaseComputeOpNode.html" target="_self">BaseComputeOpNode</a></td><td class="desc">A Compute op that compute a tensor on certain domain. This is the base class for ComputeOp (operating on a scalar at a time) and TensorComputeOp (operating on a TensorSlice at a time) </td></tr>
 <tr id="row_2_4_1_" 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_1te_1_1ComputeOpNode.html" target="_self">ComputeOpNode</a></td><td class="desc">A Compute op that compute a tensor on certain domain </td></tr>
@@ -506,100 +508,101 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <tr id="row_2_21_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1BaseTensorTypeNode.html" target="_self">BaseTensorTypeNode</a></td><td class="desc">Base of all Tensor types This container can hold <a class="el" href="classtvm_1_1TensorType.html" title="Managed reference to TensorTypeNode. ">TensorType</a> or GenericTensorType </td></tr>
 <tr id="row_2_22_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1BaseValueEqual.html" target="_self">BaseValueEqual</a></td><td class="desc">Equality definition of base value class </td></tr>
 <tr id="row_2_23_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1BaseValueHash.html" target="_self">BaseValueHash</a></td><td class="desc">Hash definition of base value classes </td></tr>
-<tr id="row_2_24_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1BuildConfig.html" target="_self">BuildConfig</a></td><td class="desc">Build configuration for compilations </td></tr>
-<tr id="row_2_25_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1BuildConfigNode.html" target="_self">BuildConfigNode</a></td><td class="desc">Container for build configuration options </td></tr>
-<tr id="row_2_26_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1Constructor.html" target="_self">Constructor</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1ConstructorNode.html" title="ADT constructor. Constructors compare by pointer equality. ">ConstructorNode</a> </td></tr>
-<tr id="row_2_27_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1ConstructorNode.html" target="_self">ConstructorNode</a></td><td class="desc">ADT constructor. Constructors compare by pointer equality </td></tr>
-<tr id="row_2_28_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1DictAttrs.html" target="_self">DictAttrs</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1DictAttrsNode.html" title="Specialized attribute type that is backed by a map. The DictAttrsNode implements the Attrs behavior...">DictAttrsNode</a> </td></tr>
-<tr id="row_2_29_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1DictAttrsNode.html" target="_self">DictAttrsNode</a></td><td class="desc">Specialized attribute type that is backed by a map. The <a class="el" href="classtvm_1_1DictAttrsNode.html" title="Specialized attribute type that is backed by a map. The DictAttrsNode implements the Attrs behavio [...]
-<tr id="row_2_30_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1EnvFunc.html" target="_self">EnvFunc</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1EnvFuncNode.html" title="A serializable function backed by TVM&#39;s global environment. ">EnvFuncNode</a> </td></tr>
-<tr id="row_2_31_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1EnvFuncNode.html" target="_self">EnvFuncNode</a></td><td class="desc">A serializable function backed by TVM's global environment </td></tr>
-<tr id="row_2_32_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1Error.html" target="_self">Error</a></td><td class="desc">Custom <a class="el" href="classtvm_1_1Error.html" title="Custom Error class to be thrown during compilation. ">Error</a> class to be thrown during compilation </td></tr>
-<tr id="row_2_33_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structtvm_1_1ErrorBuilder.html" target="_self">ErrorBuilder</a></td><td class="desc">A wrapper around std::stringstream to build error </td></tr>
-<tr id="row_2_34_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1ErrorReporter.html" target="_self">ErrorReporter</a></td><td class="desc">An abstraction around how errors are stored and reported. Designed to be opaque to users, so we can support a robust and simpler error reporting mode, as well as a more complex mode </td></tr>
-<tr id="row_2_35_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1FloatImm.html" target="_self">FloatImm</a></td><td class="desc">Managed reference class to <a class="el" href="classtvm_1_1FloatImmNode.html" title="Constant floating point literals in the program. ">FloatImmNode</a> </td></tr>
-<tr id="row_2_36_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1FloatImmNode.html" target="_self">FloatImmNode</a></td><td class="desc">Constant floating point literals in the program </td></tr>
-<tr id="row_2_37_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1FuncType.html" target="_self">FuncType</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1FuncTypeNode.html" title="Function type. ">FuncTypeNode</a> </td></tr>
-<tr id="row_2_38_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1FuncTypeNode.html" target="_self">FuncTypeNode</a></td><td class="desc">Function type </td></tr>
-<tr id="row_2_39_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1GenericFunc.html" target="_self">GenericFunc</a></td><td class="desc">Generic function that can be specialized on a per-target basis </td></tr>
-<tr id="row_2_40_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1GenericFuncNode.html" target="_self">GenericFuncNode</a></td><td class="desc">Represents a generic function that can be specialized on a per-target basis </td></tr>
-<tr id="row_2_41_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1GenericOpMap.html" target="_self">GenericOpMap</a></td><td class="desc">Generic map to store additional information of <a class="el" href="classtvm_1_1Op.html" title="Managed reference class to OpNode. ">Op</a> </td></tr>
-<tr id="row_2_42_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1GlobalTypeVar.html" target="_self">GlobalTypeVar</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1GlobalTypeVarNode.html" title="A global type variable that is used for defining new types or type aliases. ">GlobalTypeVarNode</a> </td></tr>
-<tr id="row_2_43_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1GlobalTypeVarNode.html" target="_self">GlobalTypeVarNode</a></td><td class="desc">A global type variable that is used for defining new types or type aliases </td></tr>
-<tr id="row_2_44_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1GlobalVar.html" target="_self">GlobalVar</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1GlobalVarNode.html" title="Global variable that lives in the top-level module. ">GlobalVarNode</a> </td></tr>
-<tr id="row_2_45_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1GlobalVarNode.html" target="_self">GlobalVarNode</a></td><td class="desc">Global variable that lives in the top-level module </td></tr>
-<tr id="row_2_46_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1IncompleteType.html" target="_self">IncompleteType</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1IncompleteTypeNode.html" title="Intermediate values that is used to indicate incomplete type during type inference. ">IncompleteTypeNode</a> </td></tr>
-<tr id="row_2_47_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1IncompleteTypeNode.html" target="_self">IncompleteTypeNode</a></td><td class="desc">Intermediate values that is used to indicate incomplete type during type inference </td></tr>
-<tr id="row_2_48_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1Integer.html" target="_self">Integer</a></td><td class="desc">Container of constant int that adds more constructors </td></tr>
-<tr id="row_2_49_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1IntImm.html" target="_self">IntImm</a></td><td class="desc">Managed reference class to <a class="el" href="classtvm_1_1IntImmNode.html" title="Constant integer literals in the program. ">IntImmNode</a> </td></tr>
-<tr id="row_2_50_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1IntImmNode.html" target="_self">IntImmNode</a></td><td class="desc">Constant integer literals in the program </td></tr>
-<tr id="row_2_51_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1IRModule.html" target="_self">IRModule</a></td><td class="desc">Managed reference class to <a class="el" href="classtvm_1_1IRModuleNode.html" title="IRModule that holds functions and type definitions. ">IRModuleNode</a> </td></tr>
-<tr id="row_2_52_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1IRModuleNode.html" target="_self">IRModuleNode</a></td><td class="desc"><a class="el" href="classtvm_1_1IRModule.html" title="Managed reference class to IRModuleNode. ">IRModule</a> that holds functions and type definitions </td></tr>
-<tr id="row_2_53_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1IterAdapter.html" target="_self">IterAdapter</a></td><td class="desc">Iterator adapter that adapts TIter to return another type </td></tr>
-<tr id="row_2_54_" style="display:none;"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_2_54_" class="arrow" onclick="toggleFolder('2_54_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1Map.html" target="_self">Map</a></td><td class="desc"><a class="el" href="classtvm_1_1Map.html" title="Map container of NodeRef-&gt;NodeRef in DSL graph. Map implements copy on write semantics, which means  [...]
-<tr id="row_2_54_0_" 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_1Map_1_1ValueConverter.html" target="_self">ValueConverter</a></td><td class="desc"></td></tr>
-<tr id="row_2_55_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1MapNode.html" target="_self">MapNode</a></td><td class="desc"><a class="el" href="classtvm_1_1Map.html" title="Map container of NodeRef-&gt;NodeRef in DSL graph. Map implements copy on write semantics, which means map is mutable but copy will happen when array is referenced in more than [...]
-<tr id="row_2_56_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1MemoryInfo.html" target="_self">MemoryInfo</a></td><td class="desc">Defines memory info </td></tr>
-<tr id="row_2_57_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1MemoryInfoNode.html" target="_self">MemoryInfoNode</a></td><td class="desc">Memory information of special memory region. Use <a class="el" href="classtvm_1_1MemoryInfo.html" title="Defines memory info. ">MemoryInfo</a> as its container type </td></tr>
-<tr id="row_2_58_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1NodeFunctor.html" target="_self">NodeFunctor</a></td><td class="desc">A dynamically dispatched functor on the type of the first argument </td></tr>
-<tr id="row_2_59_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1NodeFunctor_3_01R_07const_01ObjectRef_01_6n_00_01Args_8_8_8_08_4.html" target="_self">NodeFunctor&lt; R(const ObjectRef &amp;n, Args...)&gt;</a></td><td class="desc"></td></tr>
-<tr id="row_2_60_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1Op.html" target="_self">Op</a></td><td class="desc">Managed reference class to <a class="el" href="classtvm_1_1OpNode.html" title="Primitive Op(builtin intrinsics) ">OpNode</a> </td></tr>
-<tr id="row_2_61_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1OpMap.html" target="_self">OpMap</a></td><td class="desc">Map&lt;Op,ValueType&gt; used to store meta-information about <a class="el" href="classtvm_1_1Op.html" title="Managed reference class to OpNode. ">Op</a> </td></tr>
-<tr id="row_2_62_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1OpNode.html" target="_self">OpNode</a></td><td class="desc">Primitive Op(builtin intrinsics) </td></tr>
-<tr id="row_2_63_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1OpRegistry.html" target="_self">OpRegistry</a></td><td class="desc">Helper structure to register operators </td></tr>
-<tr id="row_2_64_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1PointerType.html" target="_self">PointerType</a></td><td class="desc"></td></tr>
-<tr id="row_2_65_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1PointerTypeNode.html" target="_self">PointerTypeNode</a></td><td class="desc">Low-level raw pointer type </td></tr>
-<tr id="row_2_66_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1PrimExpr.html" target="_self">PrimExpr</a></td><td class="desc">Reference to <a class="el" href="classtvm_1_1PrimExprNode.html" title="Base node of all primitive expressions. ">PrimExprNode</a> </td></tr>
-<tr id="row_2_67_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1PrimExprNode.html" target="_self">PrimExprNode</a></td><td class="desc">Base node of all primitive expressions </td></tr>
-<tr id="row_2_68_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1PrimType.html" target="_self">PrimType</a></td><td class="desc"></td></tr>
-<tr id="row_2_69_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1PrimTypeNode.html" target="_self">PrimTypeNode</a></td><td class="desc">Primitive data types used in the low-level IR </td></tr>
-<tr id="row_2_70_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1Range.html" target="_self">Range</a></td><td class="desc"><a class="el" href="classtvm_1_1Range.html" title="Range constainer. ">Range</a> constainer </td></tr>
-<tr id="row_2_71_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1RangeNode.html" target="_self">RangeNode</a></td><td class="desc"><a class="el" href="classtvm_1_1Range.html" title="Range constainer. ">Range</a> over one dimension </td></tr>
-<tr id="row_2_72_" style="display:none;"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_2_72_" class="arrow" onclick="toggleFolder('2_72_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1ReflectionVTable.html" target="_self">ReflectionVTable</a></td><td class="desc">Virtual function table to support IR/AST node reflection </td></tr>
-<tr id="row_2_72_0_" 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_1ReflectionVTable_1_1Registry.html" target="_self">Registry</a></td><td class="desc"><a class="el" href="classtvm_1_1ReflectionVTable_1_1Registry.html" title="Registry of a reflection table. ">Registry</a> of a reflection table </td></tr>
-<tr id="row_2_73_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1RelayExpr.html" target="_self">RelayExpr</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1RelayExprNode.html" title="Base node of all non-primitive expressions. ">RelayExprNode</a> </td></tr>
-<tr id="row_2_74_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1RelayExprNode.html" target="_self">RelayExprNode</a></td><td class="desc">Base node of all non-primitive expressions </td></tr>
-<tr id="row_2_75_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1RelayRefType.html" target="_self">RelayRefType</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1RelayRefTypeNode.html" title="Reference Type High-level Relay IR. ">RelayRefTypeNode</a> </td></tr>
-<tr id="row_2_76_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1RelayRefTypeNode.html" target="_self">RelayRefTypeNode</a></td><td class="desc">Reference <a class="el" href="classtvm_1_1Type.html" title="Managed reference to TypeNode. ">Type</a> High-level Relay IR </td></tr>
-<tr id="row_2_77_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1ReprPrinter.html" target="_self">ReprPrinter</a></td><td class="desc">A printer class to print the AST/IR nodes </td></tr>
-<tr id="row_2_78_" style="display:none;"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_2_78_" class="arrow" onclick="toggleFolder('2_78_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1SEqualReducer.html" target="_self">SEqualReducer</a></td><td class="desc">A Reducer class to reduce the structural equality result of two objects </td></tr>
-<tr id="row_2_78_0_" 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_1SEqualReducer_1_1Handler.html" target="_self">Handler</a></td><td class="desc">Internal handler that defines custom behaviors. </td></tr>
-<tr id="row_2_79_" style="display:none;"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_2_79_" class="arrow" onclick="toggleFolder('2_79_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1SHashReducer.html" target="_self">SHashReducer</a></td><td class="desc">A Reducer class to reduce the structural hash value </td></tr>
-<tr id="row_2_79_0_" 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_1SHashReducer_1_1Handler.html" target="_self">Handler</a></td><td class="desc">Internal handler that defines custom behaviors </td></tr>
-<tr id="row_2_80_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1SourceName.html" target="_self">SourceName</a></td><td class="desc">The source name of a file span </td></tr>
-<tr id="row_2_81_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1SourceNameNode.html" target="_self">SourceNameNode</a></td><td class="desc">The name of a source fragment </td></tr>
-<tr id="row_2_82_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1Span.html" target="_self">Span</a></td><td class="desc"></td></tr>
-<tr id="row_2_83_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1SpanNode.html" target="_self">SpanNode</a></td><td class="desc">Stores locations in frontend source that generated a node </td></tr>
-<tr id="row_2_84_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1StrMapNode.html" target="_self">StrMapNode</a></td><td class="desc">Specialized map node with string as key </td></tr>
-<tr id="row_2_85_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1StructuralEqual.html" target="_self">StructuralEqual</a></td><td class="desc">Content-aware structural equality comparator for objects </td></tr>
-<tr id="row_2_86_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1StructuralHash.html" target="_self">StructuralHash</a></td><td class="desc">Content-aware structural hasing </td></tr>
-<tr id="row_2_87_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1Target.html" target="_self">Target</a></td><td class="desc">Managed reference class to <a class="el" href="classtvm_1_1TargetNode.html" title="Compilation target. ">TargetNode</a> </td></tr>
-<tr id="row_2_88_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TargetNode.html" target="_self">TargetNode</a></td><td class="desc">Compilation target </td></tr>
-<tr id="row_2_89_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TensorType.html" target="_self">TensorType</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1TensorTypeNode.html" title="This is the most commonly used type in relay. TensorType have a fixed dimension, data type...">TensorTypeNode</a> </td></tr>
-<tr id="row_2_90_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TensorTypeNode.html" target="_self">TensorTypeNode</a></td><td class="desc">This is the most commonly used type in relay. <a class="el" href="classtvm_1_1TensorType.html" title="Managed reference to TensorTypeNode. ">TensorType</a> have a fixed dimension, data type </td></tr>
-<tr id="row_2_91_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TupleType.html" target="_self">TupleType</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1TupleTypeNode.html" title="The type of tuple values. ">TupleTypeNode</a> </td></tr>
-<tr id="row_2_92_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TupleTypeNode.html" target="_self">TupleTypeNode</a></td><td class="desc">The type of tuple values </td></tr>
-<tr id="row_2_93_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1Type.html" target="_self">Type</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1TypeNode.html" title="Type is the base type of all types. ">TypeNode</a> </td></tr>
-<tr id="row_2_94_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeCall.html" target="_self">TypeCall</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1TypeCallNode.html" title="Type function application. ">TypeCallNode</a> </td></tr>
-<tr id="row_2_95_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeCallNode.html" target="_self">TypeCallNode</a></td><td class="desc"><a class="el" href="classtvm_1_1Type.html" title="Managed reference to TypeNode. ">Type</a> function application </td></tr>
-<tr id="row_2_96_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeConstraint.html" target="_self">TypeConstraint</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1TypeConstraintNode.html" title="Potential Constraints in a function. ">TypeConstraintNode</a> </td></tr>
-<tr id="row_2_97_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeConstraintNode.html" target="_self">TypeConstraintNode</a></td><td class="desc">Potential Constraints in a function </td></tr>
-<tr id="row_2_98_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeData.html" target="_self">TypeData</a></td><td class="desc">Stores all data for an Algebraic Data <a class="el" href="classtvm_1_1Type.html" title="Managed reference to TypeNode. ">Type</a> (ADT) </td></tr>
-<tr id="row_2_99_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeDataNode.html" target="_self">TypeDataNode</a></td><td class="desc"><a class="el" href="classtvm_1_1TypeData.html" title="Stores all data for an Algebraic Data Type (ADT). ">TypeData</a> container node </td></tr>
-<tr id="row_2_100_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypedEnvFunc.html" target="_self">TypedEnvFunc</a></td><td class="desc">Please refer to <a class="el" href="classtvm_1_1TypedEnvFunc_3_01R_07Args_8_8_8_08_4.html#TypedEnvFuncAnchor">TypedEnvFunc&lt;R(Args..)&gt;</a> </td></tr>
-<tr id="row_2_101_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypedEnvFunc_3_01R_07Args_8_8_8_08_4.html" target="_self">TypedEnvFunc&lt; R(Args...)&gt;</a></td><td class="desc">A typed version of <a class="el" href="classtvm_1_1EnvFunc.html" title="Managed reference to EnvFuncNode. ">EnvFunc</a>. It is backed by a GlobalFuncNode internally </td></tr>
-<tr id="row_2_102_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeFunctor.html" target="_self">TypeFunctor</a></td><td class="desc"></td></tr>
-<tr id="row_2_103_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeFunctor_3_01R_07const_01Type_01_6n_00_01Args_8_8_8_08_4.html" target="_self">TypeFunctor&lt; R(const Type &amp;n, Args...)&gt;</a></td><td class="desc"></td></tr>
-<tr id="row_2_104_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeMutator.html" target="_self">TypeMutator</a></td><td class="desc"><a class="el" href="classtvm_1_1TypeMutator.html" title="TypeMutator that mutates expressions. ">TypeMutator</a> that mutates expressions </td></tr>
-<tr id="row_2_105_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeNode.html" target="_self">TypeNode</a></td><td class="desc"><a class="el" href="classtvm_1_1Type.html" title="Managed reference to TypeNode. ">Type</a> is the base type of all types </td></tr>
-<tr id="row_2_106_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeRelation.html" target="_self">TypeRelation</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1TypeRelationNode.html" title="User defined type relation, it is an input-output relation on types. ">TypeRelationNode</a> </td></tr>
-<tr id="row_2_107_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeRelationNode.html" target="_self">TypeRelationNode</a></td><td class="desc">User defined type relation, it is an input-output relation on types </td></tr>
-<tr id="row_2_108_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeReporter.html" target="_self">TypeReporter</a></td><td class="desc">Container class of <a class="el" href="classtvm_1_1TypeReporter.html" title="Container class of TypeReporter. ">TypeReporter</a> </td></tr>
-<tr id="row_2_109_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeReporterNode.html" target="_self">TypeReporterNode</a></td><td class="desc">Reporter that reports back to the type resolution information </td></tr>
-<tr id="row_2_110_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeVar.html" target="_self">TypeVar</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1TypeVarNode.html" title="Type parameter in functions. ">TypeVarNode</a> </td></tr>
-<tr id="row_2_111_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeVarNode.html" target="_self">TypeVarNode</a></td><td class="desc"><a class="el" href="classtvm_1_1Type.html" title="Managed reference to TypeNode. ">Type</a> parameter in functions </td></tr>
-<tr id="row_2_112_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeVisitor.html" target="_self">TypeVisitor</a></td><td class="desc">A type visitor that recursively visit types </td></tr>
-<tr id="row_2_113_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1With.html" target="_self">With</a></td><td class="desc">RAII wrapper function to enter and exit a context object similar to python's with syntax </td></tr>
+<tr id="row_2_24_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1Bool.html" target="_self">Bool</a></td><td class="desc">Boolean constant </td></tr>
+<tr id="row_2_25_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1BuildConfig.html" target="_self">BuildConfig</a></td><td class="desc">Build configuration for compilations </td></tr>
+<tr id="row_2_26_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1BuildConfigNode.html" target="_self">BuildConfigNode</a></td><td class="desc">Container for build configuration options </td></tr>
+<tr id="row_2_27_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1Constructor.html" target="_self">Constructor</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1ConstructorNode.html" title="ADT constructor. Constructors compare by pointer equality. ">ConstructorNode</a> </td></tr>
+<tr id="row_2_28_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1ConstructorNode.html" target="_self">ConstructorNode</a></td><td class="desc">ADT constructor. Constructors compare by pointer equality </td></tr>
+<tr id="row_2_29_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1DictAttrs.html" target="_self">DictAttrs</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1DictAttrsNode.html" title="Specialized attribute type that is backed by a map. The DictAttrsNode implements the Attrs behavior...">DictAttrsNode</a> </td></tr>
+<tr id="row_2_30_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1DictAttrsNode.html" target="_self">DictAttrsNode</a></td><td class="desc">Specialized attribute type that is backed by a map. The <a class="el" href="classtvm_1_1DictAttrsNode.html" title="Specialized attribute type that is backed by a map. The DictAttrsNode implements the Attrs behavio [...]
+<tr id="row_2_31_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1EnvFunc.html" target="_self">EnvFunc</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1EnvFuncNode.html" title="A serializable function backed by TVM&#39;s global environment. ">EnvFuncNode</a> </td></tr>
+<tr id="row_2_32_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1EnvFuncNode.html" target="_self">EnvFuncNode</a></td><td class="desc">A serializable function backed by TVM's global environment </td></tr>
+<tr id="row_2_33_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1Error.html" target="_self">Error</a></td><td class="desc">Custom <a class="el" href="classtvm_1_1Error.html" title="Custom Error class to be thrown during compilation. ">Error</a> class to be thrown during compilation </td></tr>
+<tr id="row_2_34_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structtvm_1_1ErrorBuilder.html" target="_self">ErrorBuilder</a></td><td class="desc">A wrapper around std::stringstream to build error </td></tr>
+<tr id="row_2_35_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1ErrorReporter.html" target="_self">ErrorReporter</a></td><td class="desc">An abstraction around how errors are stored and reported. Designed to be opaque to users, so we can support a robust and simpler error reporting mode, as well as a more complex mode </td></tr>
+<tr id="row_2_36_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1FloatImm.html" target="_self">FloatImm</a></td><td class="desc">Managed reference class to <a class="el" href="classtvm_1_1FloatImmNode.html" title="Constant floating point literals in the program. ">FloatImmNode</a> </td></tr>
+<tr id="row_2_37_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1FloatImmNode.html" target="_self">FloatImmNode</a></td><td class="desc">Constant floating point literals in the program </td></tr>
+<tr id="row_2_38_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1FuncType.html" target="_self">FuncType</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1FuncTypeNode.html" title="Function type. ">FuncTypeNode</a> </td></tr>
+<tr id="row_2_39_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1FuncTypeNode.html" target="_self">FuncTypeNode</a></td><td class="desc">Function type </td></tr>
+<tr id="row_2_40_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1GenericFunc.html" target="_self">GenericFunc</a></td><td class="desc">Generic function that can be specialized on a per-target basis </td></tr>
+<tr id="row_2_41_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1GenericFuncNode.html" target="_self">GenericFuncNode</a></td><td class="desc">Represents a generic function that can be specialized on a per-target basis </td></tr>
+<tr id="row_2_42_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1GenericOpMap.html" target="_self">GenericOpMap</a></td><td class="desc">Generic map to store additional information of <a class="el" href="classtvm_1_1Op.html" title="Managed reference class to OpNode. ">Op</a> </td></tr>
+<tr id="row_2_43_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1GlobalTypeVar.html" target="_self">GlobalTypeVar</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1GlobalTypeVarNode.html" title="A global type variable that is used for defining new types or type aliases. ">GlobalTypeVarNode</a> </td></tr>
+<tr id="row_2_44_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1GlobalTypeVarNode.html" target="_self">GlobalTypeVarNode</a></td><td class="desc">A global type variable that is used for defining new types or type aliases </td></tr>
+<tr id="row_2_45_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1GlobalVar.html" target="_self">GlobalVar</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1GlobalVarNode.html" title="Global variable that lives in the top-level module. ">GlobalVarNode</a> </td></tr>
+<tr id="row_2_46_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1GlobalVarNode.html" target="_self">GlobalVarNode</a></td><td class="desc">Global variable that lives in the top-level module </td></tr>
+<tr id="row_2_47_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1IncompleteType.html" target="_self">IncompleteType</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1IncompleteTypeNode.html" title="Intermediate values that is used to indicate incomplete type during type inference. ">IncompleteTypeNode</a> </td></tr>
+<tr id="row_2_48_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1IncompleteTypeNode.html" target="_self">IncompleteTypeNode</a></td><td class="desc">Intermediate values that is used to indicate incomplete type during type inference </td></tr>
+<tr id="row_2_49_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1Integer.html" target="_self">Integer</a></td><td class="desc">Container of constant int that adds more constructors </td></tr>
+<tr id="row_2_50_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1IntImm.html" target="_self">IntImm</a></td><td class="desc">Managed reference class to <a class="el" href="classtvm_1_1IntImmNode.html" title="Constant integer literals in the program. ">IntImmNode</a> </td></tr>
+<tr id="row_2_51_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1IntImmNode.html" target="_self">IntImmNode</a></td><td class="desc">Constant integer literals in the program </td></tr>
+<tr id="row_2_52_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1IRModule.html" target="_self">IRModule</a></td><td class="desc">Managed reference class to <a class="el" href="classtvm_1_1IRModuleNode.html" title="IRModule that holds functions and type definitions. ">IRModuleNode</a> </td></tr>
+<tr id="row_2_53_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1IRModuleNode.html" target="_self">IRModuleNode</a></td><td class="desc"><a class="el" href="classtvm_1_1IRModule.html" title="Managed reference class to IRModuleNode. ">IRModule</a> that holds functions and type definitions </td></tr>
+<tr id="row_2_54_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1IterAdapter.html" target="_self">IterAdapter</a></td><td class="desc">Iterator adapter that adapts TIter to return another type </td></tr>
+<tr id="row_2_55_" style="display:none;"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_2_55_" class="arrow" onclick="toggleFolder('2_55_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1Map.html" target="_self">Map</a></td><td class="desc"><a class="el" href="classtvm_1_1Map.html" title="Map container of NodeRef-&gt;NodeRef in DSL graph. Map implements copy on write semantics, which means  [...]
+<tr id="row_2_55_0_" 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_1Map_1_1ValueConverter.html" target="_self">ValueConverter</a></td><td class="desc"></td></tr>
+<tr id="row_2_56_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1MapNode.html" target="_self">MapNode</a></td><td class="desc"><a class="el" href="classtvm_1_1Map.html" title="Map container of NodeRef-&gt;NodeRef in DSL graph. Map implements copy on write semantics, which means map is mutable but copy will happen when array is referenced in more than [...]
+<tr id="row_2_57_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1MemoryInfo.html" target="_self">MemoryInfo</a></td><td class="desc">Defines memory info </td></tr>
+<tr id="row_2_58_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1MemoryInfoNode.html" target="_self">MemoryInfoNode</a></td><td class="desc">Memory information of special memory region. Use <a class="el" href="classtvm_1_1MemoryInfo.html" title="Defines memory info. ">MemoryInfo</a> as its container type </td></tr>
+<tr id="row_2_59_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1NodeFunctor.html" target="_self">NodeFunctor</a></td><td class="desc">A dynamically dispatched functor on the type of the first argument </td></tr>
+<tr id="row_2_60_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1NodeFunctor_3_01R_07const_01ObjectRef_01_6n_00_01Args_8_8_8_08_4.html" target="_self">NodeFunctor&lt; R(const ObjectRef &amp;n, Args...)&gt;</a></td><td class="desc"></td></tr>
+<tr id="row_2_61_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1Op.html" target="_self">Op</a></td><td class="desc">Managed reference class to <a class="el" href="classtvm_1_1OpNode.html" title="Primitive Op(builtin intrinsics) ">OpNode</a> </td></tr>
+<tr id="row_2_62_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1OpMap.html" target="_self">OpMap</a></td><td class="desc">Map&lt;Op,ValueType&gt; used to store meta-information about <a class="el" href="classtvm_1_1Op.html" title="Managed reference class to OpNode. ">Op</a> </td></tr>
+<tr id="row_2_63_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1OpNode.html" target="_self">OpNode</a></td><td class="desc">Primitive Op(builtin intrinsics) </td></tr>
+<tr id="row_2_64_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1OpRegistry.html" target="_self">OpRegistry</a></td><td class="desc">Helper structure to register operators </td></tr>
+<tr id="row_2_65_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1PointerType.html" target="_self">PointerType</a></td><td class="desc"></td></tr>
+<tr id="row_2_66_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1PointerTypeNode.html" target="_self">PointerTypeNode</a></td><td class="desc">Low-level raw pointer type </td></tr>
+<tr id="row_2_67_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1PrimExpr.html" target="_self">PrimExpr</a></td><td class="desc">Reference to <a class="el" href="classtvm_1_1PrimExprNode.html" title="Base node of all primitive expressions. ">PrimExprNode</a> </td></tr>
+<tr id="row_2_68_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1PrimExprNode.html" target="_self">PrimExprNode</a></td><td class="desc">Base node of all primitive expressions </td></tr>
+<tr id="row_2_69_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1PrimType.html" target="_self">PrimType</a></td><td class="desc"></td></tr>
+<tr id="row_2_70_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1PrimTypeNode.html" target="_self">PrimTypeNode</a></td><td class="desc">Primitive data types used in the low-level IR </td></tr>
+<tr id="row_2_71_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1Range.html" target="_self">Range</a></td><td class="desc"><a class="el" href="classtvm_1_1Range.html" title="Range constainer. ">Range</a> constainer </td></tr>
+<tr id="row_2_72_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1RangeNode.html" target="_self">RangeNode</a></td><td class="desc"><a class="el" href="classtvm_1_1Range.html" title="Range constainer. ">Range</a> over one dimension </td></tr>
+<tr id="row_2_73_" style="display:none;"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_2_73_" class="arrow" onclick="toggleFolder('2_73_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1ReflectionVTable.html" target="_self">ReflectionVTable</a></td><td class="desc">Virtual function table to support IR/AST node reflection </td></tr>
+<tr id="row_2_73_0_" 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_1ReflectionVTable_1_1Registry.html" target="_self">Registry</a></td><td class="desc"><a class="el" href="classtvm_1_1ReflectionVTable_1_1Registry.html" title="Registry of a reflection table. ">Registry</a> of a reflection table </td></tr>
+<tr id="row_2_74_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1RelayExpr.html" target="_self">RelayExpr</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1RelayExprNode.html" title="Base node of all non-primitive expressions. ">RelayExprNode</a> </td></tr>
+<tr id="row_2_75_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1RelayExprNode.html" target="_self">RelayExprNode</a></td><td class="desc">Base node of all non-primitive expressions </td></tr>
+<tr id="row_2_76_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1RelayRefType.html" target="_self">RelayRefType</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1RelayRefTypeNode.html" title="Reference Type High-level Relay IR. ">RelayRefTypeNode</a> </td></tr>
+<tr id="row_2_77_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1RelayRefTypeNode.html" target="_self">RelayRefTypeNode</a></td><td class="desc">Reference <a class="el" href="classtvm_1_1Type.html" title="Managed reference to TypeNode. ">Type</a> High-level Relay IR </td></tr>
+<tr id="row_2_78_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1ReprPrinter.html" target="_self">ReprPrinter</a></td><td class="desc">A printer class to print the AST/IR nodes </td></tr>
+<tr id="row_2_79_" style="display:none;"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_2_79_" class="arrow" onclick="toggleFolder('2_79_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1SEqualReducer.html" target="_self">SEqualReducer</a></td><td class="desc">A Reducer class to reduce the structural equality result of two objects </td></tr>
+<tr id="row_2_79_0_" 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_1SEqualReducer_1_1Handler.html" target="_self">Handler</a></td><td class="desc">Internal handler that defines custom behaviors. </td></tr>
+<tr id="row_2_80_" style="display:none;"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_2_80_" class="arrow" onclick="toggleFolder('2_80_')">&#9658;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1SHashReducer.html" target="_self">SHashReducer</a></td><td class="desc">A Reducer class to reduce the structural hash value </td></tr>
+<tr id="row_2_80_0_" 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_1SHashReducer_1_1Handler.html" target="_self">Handler</a></td><td class="desc">Internal handler that defines custom behaviors </td></tr>
+<tr id="row_2_81_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1SourceName.html" target="_self">SourceName</a></td><td class="desc">The source name of a file span </td></tr>
+<tr id="row_2_82_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1SourceNameNode.html" target="_self">SourceNameNode</a></td><td class="desc">The name of a source fragment </td></tr>
+<tr id="row_2_83_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1Span.html" target="_self">Span</a></td><td class="desc"></td></tr>
+<tr id="row_2_84_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1SpanNode.html" target="_self">SpanNode</a></td><td class="desc">Stores locations in frontend source that generated a node </td></tr>
+<tr id="row_2_85_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1StrMapNode.html" target="_self">StrMapNode</a></td><td class="desc">Specialized map node with string as key </td></tr>
+<tr id="row_2_86_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1StructuralEqual.html" target="_self">StructuralEqual</a></td><td class="desc">Content-aware structural equality comparator for objects </td></tr>
+<tr id="row_2_87_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1StructuralHash.html" target="_self">StructuralHash</a></td><td class="desc">Content-aware structural hasing </td></tr>
+<tr id="row_2_88_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1Target.html" target="_self">Target</a></td><td class="desc">Managed reference class to <a class="el" href="classtvm_1_1TargetNode.html" title="Compilation target. ">TargetNode</a> </td></tr>
+<tr id="row_2_89_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TargetNode.html" target="_self">TargetNode</a></td><td class="desc">Compilation target </td></tr>
+<tr id="row_2_90_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TensorType.html" target="_self">TensorType</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1TensorTypeNode.html" title="This is the most commonly used type in relay. TensorType have a fixed dimension, data type...">TensorTypeNode</a> </td></tr>
+<tr id="row_2_91_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TensorTypeNode.html" target="_self">TensorTypeNode</a></td><td class="desc">This is the most commonly used type in relay. <a class="el" href="classtvm_1_1TensorType.html" title="Managed reference to TensorTypeNode. ">TensorType</a> have a fixed dimension, data type </td></tr>
+<tr id="row_2_92_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TupleType.html" target="_self">TupleType</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1TupleTypeNode.html" title="The type of tuple values. ">TupleTypeNode</a> </td></tr>
+<tr id="row_2_93_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TupleTypeNode.html" target="_self">TupleTypeNode</a></td><td class="desc">The type of tuple values </td></tr>
+<tr id="row_2_94_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1Type.html" target="_self">Type</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1TypeNode.html" title="Type is the base type of all types. ">TypeNode</a> </td></tr>
+<tr id="row_2_95_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeCall.html" target="_self">TypeCall</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1TypeCallNode.html" title="Type function application. ">TypeCallNode</a> </td></tr>
+<tr id="row_2_96_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeCallNode.html" target="_self">TypeCallNode</a></td><td class="desc"><a class="el" href="classtvm_1_1Type.html" title="Managed reference to TypeNode. ">Type</a> function application </td></tr>
+<tr id="row_2_97_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeConstraint.html" target="_self">TypeConstraint</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1TypeConstraintNode.html" title="Potential Constraints in a function. ">TypeConstraintNode</a> </td></tr>
+<tr id="row_2_98_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeConstraintNode.html" target="_self">TypeConstraintNode</a></td><td class="desc">Potential Constraints in a function </td></tr>
+<tr id="row_2_99_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeData.html" target="_self">TypeData</a></td><td class="desc">Stores all data for an Algebraic Data <a class="el" href="classtvm_1_1Type.html" title="Managed reference to TypeNode. ">Type</a> (ADT) </td></tr>
+<tr id="row_2_100_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeDataNode.html" target="_self">TypeDataNode</a></td><td class="desc"><a class="el" href="classtvm_1_1TypeData.html" title="Stores all data for an Algebraic Data Type (ADT). ">TypeData</a> container node </td></tr>
+<tr id="row_2_101_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypedEnvFunc.html" target="_self">TypedEnvFunc</a></td><td class="desc">Please refer to <a class="el" href="classtvm_1_1TypedEnvFunc_3_01R_07Args_8_8_8_08_4.html#TypedEnvFuncAnchor">TypedEnvFunc&lt;R(Args..)&gt;</a> </td></tr>
+<tr id="row_2_102_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypedEnvFunc_3_01R_07Args_8_8_8_08_4.html" target="_self">TypedEnvFunc&lt; R(Args...)&gt;</a></td><td class="desc">A typed version of <a class="el" href="classtvm_1_1EnvFunc.html" title="Managed reference to EnvFuncNode. ">EnvFunc</a>. It is backed by a GlobalFuncNode internally </td></tr>
+<tr id="row_2_103_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeFunctor.html" target="_self">TypeFunctor</a></td><td class="desc"></td></tr>
+<tr id="row_2_104_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeFunctor_3_01R_07const_01Type_01_6n_00_01Args_8_8_8_08_4.html" target="_self">TypeFunctor&lt; R(const Type &amp;n, Args...)&gt;</a></td><td class="desc"></td></tr>
+<tr id="row_2_105_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeMutator.html" target="_self">TypeMutator</a></td><td class="desc"><a class="el" href="classtvm_1_1TypeMutator.html" title="TypeMutator that mutates expressions. ">TypeMutator</a> that mutates expressions </td></tr>
+<tr id="row_2_106_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeNode.html" target="_self">TypeNode</a></td><td class="desc"><a class="el" href="classtvm_1_1Type.html" title="Managed reference to TypeNode. ">Type</a> is the base type of all types </td></tr>
+<tr id="row_2_107_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeRelation.html" target="_self">TypeRelation</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1TypeRelationNode.html" title="User defined type relation, it is an input-output relation on types. ">TypeRelationNode</a> </td></tr>
+<tr id="row_2_108_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeRelationNode.html" target="_self">TypeRelationNode</a></td><td class="desc">User defined type relation, it is an input-output relation on types </td></tr>
+<tr id="row_2_109_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeReporter.html" target="_self">TypeReporter</a></td><td class="desc">Container class of <a class="el" href="classtvm_1_1TypeReporter.html" title="Container class of TypeReporter. ">TypeReporter</a> </td></tr>
+<tr id="row_2_110_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeReporterNode.html" target="_self">TypeReporterNode</a></td><td class="desc">Reporter that reports back to the type resolution information </td></tr>
+<tr id="row_2_111_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeVar.html" target="_self">TypeVar</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1TypeVarNode.html" title="Type parameter in functions. ">TypeVarNode</a> </td></tr>
+<tr id="row_2_112_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeVarNode.html" target="_self">TypeVarNode</a></td><td class="desc"><a class="el" href="classtvm_1_1Type.html" title="Managed reference to TypeNode. ">Type</a> parameter in functions </td></tr>
+<tr id="row_2_113_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1TypeVisitor.html" target="_self">TypeVisitor</a></td><td class="desc">A type visitor that recursively visit types </td></tr>
+<tr id="row_2_114_" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1With.html" target="_self">With</a></td><td class="desc">RAII wrapper function to enter and exit a context object similar to python's with syntax </td></tr>
 <tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structTVMByteArray.html" target="_self">TVMByteArray</a></td><td class="desc">Byte array type used to pass in byte array When kTVMBytes is used as data type </td></tr>
 <tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="structTVMParallelGroupEnv.html" target="_self">TVMParallelGroupEnv</a></td><td class="desc">Environment for TVM parallel task </td></tr>
 <tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="unionTVMValue.html" target="_self">TVMValue</a></td><td class="desc">Union type of values being passed through API and function calls </td></tr>
diff --git a/docs/doxygen/annotation_8h_source.html b/docs/doxygen/annotation_8h_source.html
index ad808ae..1d73a4e 100644
--- a/docs/doxygen/annotation_8h_source.html
+++ b/docs/doxygen/annotation_8h_source.html
@@ -101,7 +101,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="ttc" id="structtvm_1_1relay_1_1CastHintAttrs_html"><div class="ttname"><a href="structtvm_1_1relay_1_1CastHintAttrs.html">tvm::relay::CastHintAttrs</a></div><div class="ttdoc">Annotate an expression to be cast into specific data type. </div><div class="ttdef"><b>Definition:</b> annotation.h:50</div></div>
 <div class="ttc" id="structtvm_1_1relay_1_1OnDeviceAttrs_html_a0b4ba6f91e1c2d7ce354115cc99256a9"><div class="ttname"><a href="structtvm_1_1relay_1_1OnDeviceAttrs.html#a0b4ba6f91e1c2d7ce354115cc99256a9">tvm::relay::OnDeviceAttrs::TVM_DECLARE_ATTRS</a></div><div class="ttdeci">TVM_DECLARE_ATTRS(OnDeviceAttrs,&quot;relay.attrs.OnDeviceAttrs&quot;)</div><div class="ttdef"><b>Definition:</b> annotation.h:39</div></div>
 <div class="ttc" id="structtvm_1_1relay_1_1OnDeviceAttrs_html"><div class="ttname"><a href="structtvm_1_1relay_1_1OnDeviceAttrs.html">tvm::relay::OnDeviceAttrs</a></div><div class="ttdoc">Options for the device annotation operators. </div><div class="ttdef"><b>Definition:</b> annotation.h:36</div></div>
-<div class="ttc" id="classtvm_1_1AttrsNode_html"><div class="ttname"><a href="classtvm_1_1AttrsNode.html">tvm::AttrsNode</a></div><div class="ttdoc">The base class of the all the Use &quot;curiously recurring template pattern&quot;. </div><div class="ttdef"><b>Definition:</b> attrs.h:657</div></div>
+<div class="ttc" id="classtvm_1_1AttrsNode_html"><div class="ttname"><a href="classtvm_1_1AttrsNode.html">tvm::AttrsNode</a></div><div class="ttdoc">The base class of the all the Use &quot;curiously recurring template pattern&quot;. </div><div class="ttdef"><b>Definition:</b> attrs.h:659</div></div>
 <div class="ttc" id="structtvm_1_1relay_1_1CastHintAttrs_html_afc0f564be8de59a52e639c0746edd87c"><div class="ttname"><a href="structtvm_1_1relay_1_1CastHintAttrs.html#afc0f564be8de59a52e639c0746edd87c">tvm::relay::CastHintAttrs::TVM_DECLARE_ATTRS</a></div><div class="ttdeci">TVM_DECLARE_ATTRS(CastHintAttrs,&quot;relay.attrs.CastHintAttrs&quot;)</div><div class="ttdef"><b>Definition:</b> annotation.h:53</div></div>
 </div><!-- fragment --></div><!-- contents -->
 <!-- start footer part -->
diff --git a/docs/doxygen/base_8h_source.html b/docs/doxygen/base_8h_source.html
index f4f8aee..d7c6e5d 100644
--- a/docs/doxygen/base_8h_source.html
+++ b/docs/doxygen/base_8h_source.html
@@ -105,9 +105,9 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="ttc" id="tir_2expr_8h_html"><div class="ttname"><a href="tir_2expr_8h.html">expr.h</a></div><div class="ttdoc">TIR expressions. </div></div>
 <div class="ttc" id="classtvm_1_1relay_1_1Id_html"><div class="ttname"><a href="classtvm_1_1relay_1_1Id.html">tvm::relay::Id</a></div><div class="ttdef"><b>Definition:</b> base.h:104</div></div>
 <div class="ttc" id="classtvm_1_1relay_1_1RelayNode_html_af61323189c9e15411934e05ac86547ca"><div class="ttname"><a href="classtvm_1_1relay_1_1RelayNode.html#af61323189c9e15411934e05ac86547ca">tvm::relay::RelayNode::TVM_DECLARE_BASE_OBJECT_INFO</a></div><div class="ttdeci">TVM_DECLARE_BASE_OBJECT_INFO(RelayNode, Object)</div></div>
-<div class="ttc" id="object_8h_html_ac6e7295a4999e2c8e4a2c990beca887a"><div class="ttname"><a href="object_8h.html#ac6e7295a4999e2c8e4a2c990beca887a">TVM_DEFINE_OBJECT_REF_METHODS</a></div><div class="ttdeci">#define TVM_DEFINE_OBJECT_REF_METHODS(TypeName, ParentType, ObjectName)</div><div class="ttdef"><b>Definition:</b> object.h:729</div></div>
+<div class="ttc" id="object_8h_html_ac6e7295a4999e2c8e4a2c990beca887a"><div class="ttname"><a href="object_8h.html#ac6e7295a4999e2c8e4a2c990beca887a">TVM_DEFINE_OBJECT_REF_METHODS</a></div><div class="ttdeci">#define TVM_DEFINE_OBJECT_REF_METHODS(TypeName, ParentType, ObjectName)</div><div class="ttdef"><b>Definition:</b> object.h:744</div></div>
 <div class="ttc" id="classtvm_1_1SpanNode_html"><div class="ttname"><a href="classtvm_1_1SpanNode.html">tvm::SpanNode</a></div><div class="ttdoc">Stores locations in frontend source that generated a node. </div><div class="ttdef"><b>Definition:</b> span.h:79</div></div>
-<div class="ttc" id="object_8h_html_a3aea9b3f65aeb9150c0fa7800e5573c6"><div class="ttname"><a href="object_8h.html#a3aea9b3f65aeb9150c0fa7800e5573c6">TVM_DECLARE_FINAL_OBJECT_INFO</a></div><div class="ttdeci">#define TVM_DECLARE_FINAL_OBJECT_INFO(TypeName, ParentType)</div><div class="ttdoc">helper macro to declare type information in a final class. </div><div class="ttdef"><b>Definition:</b> object.h:694</div></div>
+<div class="ttc" id="object_8h_html_a3aea9b3f65aeb9150c0fa7800e5573c6"><div class="ttname"><a href="object_8h.html#a3aea9b3f65aeb9150c0fa7800e5573c6">TVM_DECLARE_FINAL_OBJECT_INFO</a></div><div class="ttdeci">#define TVM_DECLARE_FINAL_OBJECT_INFO(TypeName, ParentType)</div><div class="ttdoc">helper macro to declare type information in a final class. </div><div class="ttdef"><b>Definition:</b> object.h:698</div></div>
 <div class="ttc" id="namespacetvm_1_1relay_html_a7d0fa6578e97d0d64b08865f94f04827"><div class="ttname"><a href="namespacetvm_1_1relay.html#a7d0fa6578e97d0d64b08865f94f04827">tvm::relay::SpanNode</a></div><div class="ttdeci">tvm::SpanNode SpanNode</div><div class="ttdef"><b>Definition:</b> base.h:64</div></div>
 <div class="ttc" id="classtvm_1_1PrimExpr_html"><div class="ttname"><a href="classtvm_1_1PrimExpr.html">tvm::PrimExpr</a></div><div class="ttdoc">Reference to PrimExprNode. </div><div class="ttdef"><b>Definition:</b> expr.h:98</div></div>
 <div class="ttc" id="classtvm_1_1relay_1_1RelayNode_html_a516a8bf6554da1636323c308161495be"><div class="ttname"><a href="classtvm_1_1relay_1_1RelayNode.html#a516a8bf6554da1636323c308161495be">tvm::relay::RelayNode::_type_key</a></div><div class="ttdeci">static constexpr const char * _type_key</div><div class="ttdef"><b>Definition:</b> base.h:75</div></div>
diff --git a/docs/doxygen/batch__matmul_8h_source.html b/docs/doxygen/batch__matmul_8h_source.html
index ce14e65..0a986e1 100644
--- a/docs/doxygen/batch__matmul_8h_source.html
+++ b/docs/doxygen/batch__matmul_8h_source.html
@@ -97,7 +97,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="ttc" id="classtvm_1_1te_1_1TensorNode_html_a0ba732bc2def0d467854585752911351"><div class="ttname"><a href="classtvm_1_1te_1_1TensorNode.html#a0ba732bc2def0d467854585752911351">tvm::te::TensorNode::shape</a></div><div class="ttdeci">Array&lt; PrimExpr &gt; shape</div><div class="ttdoc">The shape of the tensor. </div><div class="ttdef"><b>Definition:</b> tensor.h:167</div></div>
 <div class="ttc" id="namespacetvm_html_a5cea5eb708bfbfa08e285092e5afdc33"><div class="ttname"><a href="namespacetvm.html#a5cea5eb708bfbfa08e285092e5afdc33">tvm::sum</a></div><div class="ttdeci">PrimExpr sum(PrimExpr source, Array&lt; tir::IterVar &gt; axis)</div><div class="ttdoc">sum of of source expression over axis </div></div>
 <div class="ttc" id="namespacetopi_html"><div class="ttname"><a href="namespacetopi.html">topi</a></div><div class="ttdef"><b>Definition:</b> broadcast.h:34</div></div>
-<div class="ttc" id="classtvm_1_1Range_html"><div class="ttname"><a href="classtvm_1_1Range.html">tvm::Range</a></div><div class="ttdoc">Range constainer. </div><div class="ttdef"><b>Definition:</b> expr.h:399</div></div>
+<div class="ttc" id="classtvm_1_1Range_html"><div class="ttname"><a href="classtvm_1_1Range.html">tvm::Range</a></div><div class="ttdoc">Range constainer. </div><div class="ttdef"><b>Definition:</b> expr.h:458</div></div>
 <div class="ttc" id="namespacetvm_1_1te_html_aae384e9b73c2271905486e4a74b69265"><div class="ttname"><a href="namespacetvm_1_1te.html#aae384e9b73c2271905486e4a74b69265">tvm::te::reduce_axis</a></div><div class="ttdeci">IterVar reduce_axis(Range dom, std::string name=&quot;rv&quot;)</div><div class="ttdoc">Create a new IterVar for reduction operations. </div></div>
 <div class="ttc" id="classtvm_1_1te_1_1Tensor_html"><div class="ttname"><a href="classtvm_1_1te_1_1Tensor.html">tvm::te::Tensor</a></div><div class="ttdoc">Tensor structure representing a possible input, or intermediate computation result. </div><div class="ttdef"><b>Definition:</b> tensor.h:52</div></div>
 <div class="ttc" id="operation_8h_html"><div class="ttname"><a href="operation_8h.html">operation.h</a></div><div class="ttdoc">Operation node can generate one or multiple Tensors. </div></div>
diff --git a/docs/doxygen/bitserial_8h_source.html b/docs/doxygen/bitserial_8h_source.html
index 57f0dd1..b7d078e 100644
--- a/docs/doxygen/bitserial_8h_source.html
+++ b/docs/doxygen/bitserial_8h_source.html
@@ -114,10 +114,10 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="ttc" id="structtvm_1_1relay_1_1BitPackAttrs_html_a0555fe762ea9201da57683d97e019f34"><div class="ttname"><a href="structtvm_1_1relay_1_1BitPackAttrs.html#a0555fe762ea9201da57683d97e019f34">tvm::relay::BitPackAttrs::name</a></div><div class="ttdeci">std::string name</div><div class="ttdef"><b>Definition:</b> bitserial.h:41</div></div>
 <div class="ttc" id="ir_2attrs_8h_html_a578da113eb199bad72e26c03ad24832f"><div class="ttname"><a href="ir_2attrs_8h.html#a578da113eb199bad72e26c03ad24832f">TVM_ATTR_FIELD</a></div><div class="ttdeci">#define TVM_ATTR_FIELD(FieldName)</div><div class="ttdoc">Declare an attribute field. </div><div class="ttdef"><b>Definition:</b> attrs.h:77</div></div>
 <div class="ttc" id="structtvm_1_1relay_1_1BitPackAttrs_html_ab17201dbe53aea089b99857a53c9c4e8"><div class="ttname"><a href="structtvm_1_1relay_1_1BitPackAttrs.html#ab17201dbe53aea089b99857a53c9c4e8">tvm::relay::BitPackAttrs::pack_axis</a></div><div class="ttdeci">int pack_axis</div><div class="ttdef"><b>Definition:</b> bitserial.h:38</div></div>
-<div class="ttc" id="namespacetvm_html_a28c693333c2b15702b1a9a57dec0fbf5"><div class="ttname"><a href="namespacetvm.html#a28c693333c2b15702b1a9a57dec0fbf5">tvm::NullValue&lt; DataType &gt;</a></div><div class="ttdeci">DataType NullValue&lt; DataType &gt;()</div><div class="ttdef"><b>Definition:</b> attrs.h:92</div></div>
+<div class="ttc" id="namespacetvm_html_a28c693333c2b15702b1a9a57dec0fbf5"><div class="ttname"><a href="namespacetvm.html#a28c693333c2b15702b1a9a57dec0fbf5">tvm::NullValue&lt; DataType &gt;</a></div><div class="ttdeci">DataType NullValue&lt; DataType &gt;()</div><div class="ttdef"><b>Definition:</b> attrs.h:94</div></div>
 <div class="ttc" id="structtvm_1_1relay_1_1BinaryConv2DAttrs_html_a70aa926aba4fc774c15786358315141a"><div class="ttname"><a href="structtvm_1_1relay_1_1BinaryConv2DAttrs.html#a70aa926aba4fc774c15786358315141a">tvm::relay::BinaryConv2DAttrs::weight_bits</a></div><div class="ttdeci">int weight_bits</div><div class="ttdef"><b>Definition:</b> bitserial.h:62</div></div>
 <div class="ttc" id="base_8h_html"><div class="ttname"><a href="base_8h.html">base.h</a></div><div class="ttdoc">Base classes for the Relay IR. </div></div>
-<div class="ttc" id="classtvm_1_1AttrsNode_html"><div class="ttname"><a href="classtvm_1_1AttrsNode.html">tvm::AttrsNode</a></div><div class="ttdoc">The base class of the all the Use &quot;curiously recurring template pattern&quot;. </div><div class="ttdef"><b>Definition:</b> attrs.h:657</div></div>
+<div class="ttc" id="classtvm_1_1AttrsNode_html"><div class="ttname"><a href="classtvm_1_1AttrsNode.html">tvm::AttrsNode</a></div><div class="ttdoc">The base class of the all the Use &quot;curiously recurring template pattern&quot;. </div><div class="ttdef"><b>Definition:</b> attrs.h:659</div></div>
 <div class="ttc" id="structtvm_1_1relay_1_1BinaryDenseAttrs_html_a6647c2d9d1d3108c6f552ff4271f2625"><div class="ttname"><a href="structtvm_1_1relay_1_1BinaryDenseAttrs.html#a6647c2d9d1d3108c6f552ff4271f2625">tvm::relay::BinaryDenseAttrs::weight_bits</a></div><div class="ttdeci">int weight_bits</div><div class="ttdef"><b>Definition:</b> bitserial.h:109</div></div>
 <div class="ttc" id="structtvm_1_1relay_1_1BinaryDenseAttrs_html_a080c3768bc73266ef675953ea98c8ae8"><div class="ttname"><a href="structtvm_1_1relay_1_1BinaryDenseAttrs.html#a080c3768bc73266ef675953ea98c8ae8">tvm::relay::BinaryDenseAttrs::data_bits</a></div><div class="ttdeci">int data_bits</div><div class="ttdef"><b>Definition:</b> bitserial.h:108</div></div>
 <div class="ttc" id="classtvm_1_1PrimExpr_html"><div class="ttname"><a href="classtvm_1_1PrimExpr.html">tvm::PrimExpr</a></div><div class="ttdoc">Reference to PrimExprNode. </div><div class="ttdef"><b>Definition:</b> expr.h:98</div></div>
diff --git a/docs/doxygen/buffer_8h_source.html b/docs/doxygen/buffer_8h_source.html
index 6a187b2..65536b2 100644
--- a/docs/doxygen/buffer_8h_source.html
+++ b/docs/doxygen/buffer_8h_source.html
@@ -125,7 +125,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="ttc" id="classtvm_1_1tir_1_1BufferNode_html_ac18ddd10b79a30ae57d3a8283686259d"><div class="ttname"><a href="classtvm_1_1tir_1_1BufferNode.html#ac18ddd10b79a30ae57d3a8283686259d">tvm::tir::BufferNode::strides</a></div><div class="ttdeci">Array&lt; PrimExpr &gt; strides</div><div class="ttdoc">The strides of each dimension This can be an empty array, indicating array is contiguous. </div><div class="ttdef"><b>Definition:</b> buffer.h:122</div></div>
 <div class="ttc" id="classtvm_1_1tir_1_1Buffer_html_a4ca636501d4d64d760b6762fa606f019"><div class="ttname"><a href="classtvm_1_1tir_1_1Buffer.html#a4ca636501d4d64d760b6762fa606f019">tvm::tir::Buffer::MakeSlice</a></div><div class="ttdeci">Buffer MakeSlice(Array&lt; PrimExpr &gt; begins, Array&lt; PrimExpr &gt; extents) const </div><div class="ttdoc">Make a new symbolic buffer representing a slice of the buffer. </div></div>
 <div class="ttc" id="classtvm_1_1tir_1_1Buffer_html"><div class="ttname"><a href="classtvm_1_1tir_1_1Buffer.html">tvm::tir::Buffer</a></div><div class="ttdoc">Buffer is a symbolic n-darray structure. It is a composition of primitive symbolic types...</div><div class="ttdef"><b>Definition:</b> buffer.h:53</div></div>
-<div class="ttc" id="object_8h_html_a3aea9b3f65aeb9150c0fa7800e5573c6"><div class="ttname"><a href="object_8h.html#a3aea9b3f65aeb9150c0fa7800e5573c6">TVM_DECLARE_FINAL_OBJECT_INFO</a></div><div class="ttdeci">#define TVM_DECLARE_FINAL_OBJECT_INFO(TypeName, ParentType)</div><div class="ttdoc">helper macro to declare type information in a final class. </div><div class="ttdef"><b>Definition:</b> object.h:694</div></div>
+<div class="ttc" id="object_8h_html_a3aea9b3f65aeb9150c0fa7800e5573c6"><div class="ttname"><a href="object_8h.html#a3aea9b3f65aeb9150c0fa7800e5573c6">TVM_DECLARE_FINAL_OBJECT_INFO</a></div><div class="ttdeci">#define TVM_DECLARE_FINAL_OBJECT_INFO(TypeName, ParentType)</div><div class="ttdoc">helper macro to declare type information in a final class. </div><div class="ttdef"><b>Definition:</b> object.h:698</div></div>
 <div class="ttc" id="node_2container_8h_html"><div class="ttname"><a href="node_2container_8h.html">container.h</a></div><div class="ttdoc">Array/Map container in the DSL graph. </div></div>
 <div class="ttc" id="namespacetvm_1_1tir_html_a9ac05a14db42ca73da1d3945e7ce2fd1a4500370408bf0077c86a795cbe9dbf39"><div class="ttname"><a href="namespacetvm_1_1tir.html#a9ac05a14db42ca73da1d3945e7ce2fd1a4500370408bf0077c86a795cbe9dbf39">tvm::tir::kDefault</a></div><div class="ttdef"><b>Definition:</b> buffer.h:43</div></div>
 <div class="ttc" id="classtvm_1_1tir_1_1Buffer_html_ac033e5ebb29588c789152fb01dc99eff"><div class="ttname"><a href="classtvm_1_1tir_1_1Buffer.html#ac033e5ebb29588c789152fb01dc99eff">tvm::tir::Buffer::Buffer</a></div><div class="ttdeci">Buffer(ObjectPtr&lt; Object &gt; n)</div><div class="ttdef"><b>Definition:</b> buffer.h:56</div></div>
diff --git a/docs/doxygen/classes.html b/docs/doxygen/classes.html
index bb4b9aa..995e959 100644
--- a/docs/doxygen/classes.html
+++ b/docs/doxygen/classes.html
@@ -90,134 +90,135 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="qindex"><a class="qindex" href="#letter_A">A</a>&#160;|&#160;<a class="qindex" href="#letter_B">B</a>&#160;|&#160;<a class="qindex" href="#letter_C">C</a>&#160;|&#160;<a class="qindex" href="#letter_D">D</a>&#160;|&#160;<a class="qindex" href="#letter_E">E</a>&#160;|&#160;<a class="qindex" href="#letter_F">F</a>&#160;|&#160;<a class="qindex" href="#letter_G">G</a>&#160;|&#160;<a class="qindex" href="#letter_H">H</a>&#160;|&#160;<a class="qindex" href="#letter_I">I</a>&#160;|& [...]
 <table class="classindex">
 <tr><td rowspan="2" valign="bottom"><a name="letter_A"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;A&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1Conv3DWinogradAttrs.html">Conv3DWinogradAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1arith_1_1IntSetAnalyzer.html">IntSetAnalyzer</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1PatternMutator.html">PatternMutator</a> (<a clas [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1ConvWinogradWeightTransformAttrs.html">ConvWinogradWeightTransformAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1arith_1_1IntSetNode.html">IntSetNode</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1PatternNode.html">PatternNode</ [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1AdaptivePool2DAttrs.html">AdaptivePool2DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1CropAndResizeAttrs.html">CropAndResizeAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1IRModule.html">IRModule</a> (<a class="el" href=" [...]
+</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1Conv3DWinogradAttrs.html">Conv3DWinogradAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1arith_1_1IntSetNode.html">IntSetNode</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1PatternMutator.html">PatternMutator</a> (<a class="el" h [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1ConvWinogradWeightTransformAttrs.html">ConvWinogradWeightTransformAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1IRModule.html">IRModule</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1PatternNode.html">PatternNode</a> (<a class="el" href="names [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1AdaptivePool2DAttrs.html">AdaptivePool2DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1CropAndResizeAttrs.html">CropAndResizeAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1IRModuleNode.html">IRModuleNode</a> (<a class="el [...]
 <tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1AdaptivePool3DAttrs.html">AdaptivePool3DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_D"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;D&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="classtvm_1_1IRModuleNode.html">IRModuleNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1PatternTupleNode.html">PatternTupleNode</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1StmtMutator.html">StmtMutator</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm:: [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1AddNode.html">AddNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1IterAdapter.html">IterAdapter</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1PatternVar.html">PatternVar</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#1 [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">ADT</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1DataType.html">DataType</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1IterVar.html">IterVar</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1ADTObj.html">ADTObj</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1DebugAttrs.html">DebugAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1IterVarAttr.html">IterVarAttr</a> (<a class="el" href="namespacetvm_1_1te.html"> [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1AllocateNode.html">AllocateNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1DeformableConv2DAttrs.html">DeformableConv2DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1IterVarAttrNode.html">IterVarAttrNode</a> (<a class="el" h [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1AllocTensorAttrs.html">AllocTensorAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1DenseAttrs.html">DenseAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1IterVarNode.html">IterVarNode</a> (<a class="el" href="namespace [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1arith_1_1Analyzer.html">Analyzer</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html">DeviceAPI</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1IterVarRelation.html">IterVarRelation</a> (<a class="el" href="namespacetvm_1_1 [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1AndNode.html">AndNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1DeviceCopyAttrs.html">DeviceCopyAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1IterVarRelationNode.html">IterVarRelationNode</a> (<a class="el" href="namespace [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1AnyNode.html">AnyNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1DictAttrs.html">DictAttrs</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_L"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;L&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="classtvm_1_1PointerTypeNode.html">PointerTypeNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1StringObj.html">StringObj</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td></tr>
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1ArangeAttrs.html">ArangeAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1DictAttrsNode.html">DictAttrsNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1PrefetchNode.html">PrefetchNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1ArgsortAttrs.html">ArgsortAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1Dilation2DAttrs.html">Dilation2DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1L2NormalizeAttrs.html">L2NormalizeAttrs</a> (<a class="el"  [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1Array.html">Array</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1DivNode.html">DivNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1LayerNormAttrs.html">LayerNormAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160; [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1SimpleObjAllocator_1_1ArrayHandler.html">SimpleObjAllocator::ArrayHandler</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1DropoutAttrs.html">DropoutAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1Layout.html">Layout</ [...]
+</td><td valign="top"><a class="el" href="classtvm_1_1IterAdapter.html">IterAdapter</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1PatternTupleNode.html">PatternTupleNode</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1StmtNode.html">StmtNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>) [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1AddNode.html">AddNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1IterVar.html">IterVar</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1PatternVar.html">PatternVar</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#16 [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">ADT</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1DataType.html">DataType</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1IterVarAttr.html">IterVarAttr</a> (<a class="el" href="namespacetvm_1_1te.html">tvm:: [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1ADTObj.html">ADTObj</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1DebugAttrs.html">DebugAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1IterVarAttrNode.html">IterVarAttrNode</a> (<a class="el" href="namespacetvm_1_1t [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1AllocateNode.html">AllocateNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1DeformableConv2DAttrs.html">DeformableConv2DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1IterVarNode.html">IterVarNode</a> (<a class="el" href="na [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1AllocTensorAttrs.html">AllocTensorAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1DenseAttrs.html">DenseAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1IterVarRelation.html">IterVarRelation</a> (<a class="el" href="na [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1arith_1_1Analyzer.html">Analyzer</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html">DeviceAPI</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1IterVarRelationNode.html">IterVarRelationNode</a> (<a class="el" href="namespac [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1AndNode.html">AndNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1DeviceCopyAttrs.html">DeviceCopyAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_L"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160; [...]
+</td><td valign="top"><a class="el" href="classtvm_1_1PointerType.html">PointerType</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1StringObj.html">StringObj</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1AnyNode.html">AnyNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1DictAttrs.html">DictAttrs</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1PointerTypeNode.html">PointerTypeNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign= [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1ArangeAttrs.html">ArangeAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1DictAttrsNode.html">DictAttrsNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1L2NormalizeAttrs.html">L2NormalizeAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1ArgsortAttrs.html">ArgsortAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1Dilation2DAttrs.html">Dilation2DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1LayerNormAttrs.html">LayerNormAttrs</a> (<a class="el" href [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1Array.html">Array</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1DivNode.html">DivNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1Layout.html">Layout</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top">< [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1SimpleObjAllocator_1_1ArrayHandler.html">SimpleObjAllocator::ArrayHandler</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1DropoutAttrs.html">DropoutAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1LayoutAxis.html">Layo [...]
 <tr><td valign="top"><a class="el" href="classtvm_1_1ArrayNode.html">ArrayNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_E"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;E&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1LayoutAxis.html">LayoutAxis</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1PrimFunc.html">PrimFunc</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1SubPixelAttrs.html">SubPixelAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1AssertStmtNode.html">AssertStmtNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1LayoutNode.html">LayoutNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1PrimFuncNode.html">PrimFuncNode</a> (<a class="el" href="namespacetvm_1_1tir.html" [...]
+</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1LayoutNode.html">LayoutNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1PrimFunc.html">PrimFunc</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_T"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;T&#160;& [...]
 </td></tr>
-<tr><td valign="top"><a class="el" href="classtvm_1_1detail_1_1AttrDocEntry.html">AttrDocEntry</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1EnvFunc.html">EnvFunc</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1LayoutTransformAttrs.html">LayoutTransformAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1detail_1_1AttrDocVisitor.html">AttrDocVisitor</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1EnvFuncNode.html">EnvFuncNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1LeakyReluAttrs.html">LeakyReluAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1AttrError.html">AttrError</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1EQNode.html">EQNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1tir_1_1LENode.html">LENode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1detail_1_1AttrExistVisitor.html">AttrExistVisitor</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1Error.html">Error</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1Let.html">Let</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&# [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1AttrFieldInfo.html">AttrFieldInfo</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1ErrorBuilder.html">ErrorBuilder</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1LetNode.html">LetNode</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><t [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1AttrFieldInfoNode.html">AttrFieldInfoNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1ErrorReporter.html">ErrorReporter</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1LetNode.html">LetNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td [...]
-</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1TempExprNode.html">TempExprNode</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td></tr>
-<tr><td valign="top"><a class="el" href="structtvm_1_1detail_1_1AttrInitEntry.html">AttrInitEntry</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1EvaluateNode.html">EvaluateNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1LetStmtNode.html">LetStmtNode</a> (<a class="el" href="namespacetvm_1_ [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1detail_1_1AttrInitVisitor.html">AttrInitVisitor</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1vm_1_1Executable.html">Executable</a> (<a class="el" href="namespacetvm_1_1runtime_1_1vm.html">tvm::runtime::vm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1LoadNode.html">LoadNode</a> (<a class="el"  [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1detail_1_1AttrNonDefaultVisitor.html">AttrNonDefaultVisitor</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1ExpandDimsAttrs.html">ExpandDimsAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1LRNAttrs.html">LRNAttrs</a> (<a class=" [...]
-</td><td valign="top"><a class="el" href="structtvm_1_1te_1_1TensorDom.html">TensorDom</a> (<a class="el" href="namespacetvm_1_1te.html">tvm::te</a>)&#160;&#160;&#160;</td></tr>
-<tr><td valign="top"><a class="el" href="structtvm_1_1detail_1_1AttrNopEntry.html">AttrNopEntry</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1tir_1_1ExprDeepEqual.html">ExprDeepEqual</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1LTNode.html">LTNode</a> (<a class="el" href="namespacetvm_1_1tir.html [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1detail_1_1AttrNormalVisitor.html">AttrNormalVisitor</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1ExprFunctor.html">ExprFunctor</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_M"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><d [...]
-</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1RampNode.html">RampNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1TensorIntrinCall.html">TensorIntrinCall</a> (<a class="el" href="namespacetvm_1_1te.html">tvm::te</a>)&#160;&#160;&#160;</td></tr>
-<tr><td valign="top"><a class="el" href="classtvm_1_1Attrs.html">Attrs</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1ExprFunctor.html">ExprFunctor</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1Range.html">Range</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el"  [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1AttrsNode.html">AttrsNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1ExprFunctor_3_01R_07const_01Expr_01_6n_00_01Args_8_8_8_08_4.html">ExprFunctor&lt; R(const Expr &amp;n, Args...)&gt;</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1Map.html">Map</a> (<a cl [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1detail_1_1AttrsSEqualVisitor.html">AttrsSEqualVisitor</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1ExprFunctor_3_01R_07const_01PrimExpr_01_6n_00_01Args_8_8_8_08_4.html">ExprFunctor&lt; R(const PrimExpr &amp;n, Args...)&gt;</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1detail_1_1AttrsSHashVisitor.html">AttrsSHashVisitor</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1ExprMutator.html">ExprMutator</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1Match.html">Match</a> (<a class="el" href="namespacetvm_1 [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1AttrStmtNode.html">AttrStmtNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1ExprMutator.html">ExprMutator</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1MatchNode.html">MatchNode</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1detail_1_1AttrTriggerNonDefaultEntry.html">AttrTriggerNonDefaultEntry</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1ExprRewriter.html">ExprRewriter</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1MaxNode.html">MaxNode</a> (<a class="e [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1AttrVisitor.html">AttrVisitor</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1ExprVisitor.html">ExprVisitor</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1MaxPool1DAttrs.html">MaxPool1DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::re [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1AvgPool1DAttrs.html">AvgPool1DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1ExprVisitor.html">ExprVisitor</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1MaxPool2DAttrs.html">MaxPool2DAttrs</a> (<a class="el" href="namespace [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1AvgPool2DAttrs.html">AvgPool2DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1ExternOpNode.html">ExternOpNode</a> (<a class="el" href="namespacetvm_1_1te.html">tvm::te</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1MaxPool3DAttrs.html">MaxPool3DAttrs</a> (<a class="el" href="namespacet [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1AssertStmtNode.html">AssertStmtNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1LayoutTransformAttrs.html">LayoutTransformAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1PrimFuncNode.html">PrimFuncNode</a> (<a class="el" href [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1detail_1_1AttrDocEntry.html">AttrDocEntry</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1EnvFunc.html">EnvFunc</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1LeakyReluAttrs.html">LeakyReluAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1detail_1_1AttrDocVisitor.html">AttrDocVisitor</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1EnvFuncNode.html">EnvFuncNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1tir_1_1LENode.html">LENode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160 [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1AttrError.html">AttrError</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1EQNode.html">EQNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1Let.html">Let</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign= [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1detail_1_1AttrExistVisitor.html">AttrExistVisitor</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1Error.html">Error</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1LetNode.html">LetNode</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160; [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1AttrFieldInfo.html">AttrFieldInfo</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1ErrorBuilder.html">ErrorBuilder</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1LetNode.html">LetNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td vali [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1AttrFieldInfoNode.html">AttrFieldInfoNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1ErrorReporter.html">ErrorReporter</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1LetStmtNode.html">LetStmtNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&# [...]
+</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1Tensor.html">Tensor</a> (<a class="el" href="namespacetvm_1_1te.html">tvm::te</a>)&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="structtvm_1_1detail_1_1AttrInitEntry.html">AttrInitEntry</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1EvaluateNode.html">EvaluateNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1LoadNode.html">LoadNode</a> (<a class="el" href="namespacetvm_1_1tir.h [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1detail_1_1AttrInitVisitor.html">AttrInitVisitor</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1vm_1_1Executable.html">Executable</a> (<a class="el" href="namespacetvm_1_1runtime_1_1vm.html">tvm::runtime::vm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1LRNAttrs.html">LRNAttrs</a> (<a class="e [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1detail_1_1AttrNonDefaultVisitor.html">AttrNonDefaultVisitor</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1ExpandDimsAttrs.html">ExpandDimsAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1LTNode.html">LTNode</a> (<a class="el" hre [...]
+</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1TensorIntrin.html">TensorIntrin</a> (<a class="el" href="namespacetvm_1_1te.html">tvm::te</a>)&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="structtvm_1_1detail_1_1AttrNopEntry.html">AttrNopEntry</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1tir_1_1ExprDeepEqual.html">ExprDeepEqual</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_M"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class=" [...]
+</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1TensorIntrinCall.html">TensorIntrinCall</a> (<a class="el" href="namespacetvm_1_1te.html">tvm::te</a>)&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="classtvm_1_1detail_1_1AttrNormalVisitor.html">AttrNormalVisitor</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1ExprFunctor.html">ExprFunctor</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1RampNode.html">RampNode</a> (<a class="el" href="namespacet [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1Attrs.html">Attrs</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1ExprFunctor.html">ExprFunctor</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1Map.html">Map</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1AttrsNode.html">AttrsNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1ExprFunctor_3_01R_07const_01Expr_01_6n_00_01Args_8_8_8_08_4.html">ExprFunctor&lt; R(const Expr &amp;n, Args...)&gt;</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1MapNode.html">MapNode</a [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1detail_1_1AttrsSEqualVisitor.html">AttrsSEqualVisitor</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1ExprFunctor_3_01R_07const_01PrimExpr_01_6n_00_01Args_8_8_8_08_4.html">ExprFunctor&lt; R(const PrimExpr &amp;n, Args...)&gt;</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1detail_1_1AttrsSHashVisitor.html">AttrsSHashVisitor</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1ExprMutator.html">ExprMutator</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1MatchNode.html">MatchNode</a> (<a class="el" href="namesp [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1AttrStmtNode.html">AttrStmtNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1ExprMutator.html">ExprMutator</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1MaxNode.html">MaxNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1detail_1_1AttrTriggerNonDefaultEntry.html">AttrTriggerNonDefaultEntry</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1ExprRewriter.html">ExprRewriter</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1MaxPool1DAttrs.html">MaxPool1DAttrs [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1AttrVisitor.html">AttrVisitor</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1ExprVisitor.html">ExprVisitor</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1MaxPool2DAttrs.html">MaxPool2DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::re [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1AvgPool1DAttrs.html">AvgPool1DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1ExprVisitor.html">ExprVisitor</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1MaxPool3DAttrs.html">MaxPool3DAttrs</a> (<a class="el" href="namespace [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1AvgPool2DAttrs.html">AvgPool2DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1ExternOpNode.html">ExternOpNode</a> (<a class="el" href="namespacetvm_1_1te.html">tvm::te</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1MemoryInfo.html">MemoryInfo</a> (<a class="el" href="namespacetvm.html">tvm</a>)& [...]
 <tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1AvgPool3DAttrs.html">AvgPool3DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_F"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;F&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="classtvm_1_1MemoryInfo.html">MemoryInfo</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1RefCreateNode.html">RefCreateNode</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1TransposeAttrs.html">TransposeAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm: [...]
+</td><td valign="top"><a class="el" href="classtvm_1_1MemoryInfoNode.html">MemoryInfoNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1RefCreateNode.html">RefCreateNode</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1Tuple.html">Tuple</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>) [...]
 <tr><td rowspan="2" valign="bottom"><a name="letter_B"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;B&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="classtvm_1_1MemoryInfoNode.html">MemoryInfoNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1detail_1_1ReflectionTrait.html">ReflectionTrait</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1Tuple.html">Tuple</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::re [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1relay_1_1FeatureSet.html">FeatureSet</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1MinNode.html">MinNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1ReflectionVTable.html">ReflectionVTable</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160 [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1BaseAttrsNode.html">BaseAttrsNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1FIFOBufferAttrs.html">FIFOBufferAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1MirrorPadAttrs.html">MirrorPadAttrs</a> (<a class="el" href="namespacetvm_1_1relay. [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1te_1_1BaseComputeOpNode.html">BaseComputeOpNode</a> (<a class="el" href="namespacetvm_1_1te.html">tvm::te</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1SeqStmt_1_1Flattener.html">SeqStmt::Flattener</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1MixedModeMutator.html">MixedModeMutator</a> (<a class="el"  [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1BaseExpr.html">BaseExpr</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1FloatImm.html">FloatImm</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1MixedModeVisitor.html">MixedModeVisitor</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1BaseExprNode.html">BaseExprNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1FloatImmNode.html">FloatImmNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1ModNode.html">ModNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign= [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1BaseFunc.html">BaseFunc</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1FloorDivNode.html">FloorDivNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1arith_1_1ModularSet.html">ModularSet</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160 [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1BaseFuncNode.html">BaseFuncNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1FloorModNode.html">FloorModNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1arith_1_1ModularSetAnalyzer.html">ModularSetAnalyzer</a> (<a class="el" href="namespacetvm_1_1arith.html">tv [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1BaseTensorType.html">BaseTensorType</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1ForNode.html">ForNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1arith_1_1ModularSetNode.html">ModularSetNode</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)& [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1BaseTensorTypeNode.html">BaseTensorTypeNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1FreeNode.html">FreeNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1Module.html">Module</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)& [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1BaseValueEqual.html">BaseValueEqual</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1StringObj_1_1FromStd.html">StringObj::FromStd</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1ModuleNode.html">ModuleNode</a> (<a class="el" href="namespacetvm_1 [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1BaseValueHash.html">BaseValueHash</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1Function.html">Function</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1MulNode.html">MulNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#1 [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1BatchNormAttrs.html">BatchNormAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1FunctionBaseNode.html">FunctionBaseNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1MultiBoxPriorAttrs.html">MultiBoxPriorAttrs</a> (<a class="e [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1BiasAddAttrs.html">BiasAddAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html">FunctionNode</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1MultiBoxTransformLocAttrs.html">MultiBoxTransformLocAttrs</a> (<a  [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1BijectiveLayout.html">BijectiveLayout</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1FunctionRef.html">FunctionRef</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_N"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160 [...]
-</td><td valign="top"><a class="el" href="classtvm_1_1RelayRefTypeNode.html">RelayRefTypeNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="unionTVMValue.html">TVMValue</a>&#160;&#160;&#160;</td></tr>
-<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1BijectiveLayoutNode.html">BijectiveLayoutNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1FuncType.html">FuncType</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1RepeatAttrs.html">RepeatAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::rela [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1BinaryConv2DAttrs.html">BinaryConv2DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1FuncTypeNode.html">FuncTypeNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">NDArray</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1BinaryDenseAttrs.html">BinaryDenseAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1FuseNode.html">FuseNode</a> (<a class="el" href="namespacetvm_1_1te.html">tvm::te</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1NdarraySizeAttrs.html">NdarraySizeAttrs</a> (<a class="el" href="namespacet [...]
+</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1MinNode.html">MinNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1detail_1_1ReflectionTrait.html">ReflectionTrait</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1TupleGetItem.html">TupleGetItem</a> (<a class="el" href="namespacetvm_1_1 [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1relay_1_1FeatureSet.html">FeatureSet</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1MirrorPadAttrs.html">MirrorPadAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1ReflectionVTable.html">ReflectionVTable</a> (<a class="el" href="namespacetv [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1BaseAttrsNode.html">BaseAttrsNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1FIFOBufferAttrs.html">FIFOBufferAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1MixedModeMutator.html">MixedModeMutator</a> (<a class="el" href="namespacetvm_1_1rel [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1te_1_1BaseComputeOpNode.html">BaseComputeOpNode</a> (<a class="el" href="namespacetvm_1_1te.html">tvm::te</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1SeqStmt_1_1Flattener.html">SeqStmt::Flattener</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1MixedModeVisitor.html">MixedModeVisitor</a> (<a class="el"  [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1BaseExpr.html">BaseExpr</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1FloatImm.html">FloatImm</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1ModNode.html">ModNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class=" [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1BaseExprNode.html">BaseExprNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1FloatImmNode.html">FloatImmNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1arith_1_1ModularSet.html">ModularSet</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1BaseFunc.html">BaseFunc</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1FloorDivNode.html">FloorDivNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1arith_1_1ModularSetAnalyzer.html">ModularSetAnalyzer</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1BaseFuncNode.html">BaseFuncNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1FloorModNode.html">FloorModNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1arith_1_1ModularSetNode.html">ModularSetNode</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1BaseTensorType.html">BaseTensorType</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1ForNode.html">ForNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1Module.html">Module</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160 [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1BaseTensorTypeNode.html">BaseTensorTypeNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1FreeNode.html">FreeNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1ModuleNode.html">ModuleNode</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runti [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1BaseValueEqual.html">BaseValueEqual</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1StringObj_1_1FromStd.html">StringObj::FromStd</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1MulNode.html">MulNode</a> (<a class="el" href="namespacetvm_1_1tir.html [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1BaseValueHash.html">BaseValueHash</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1Function.html">Function</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1MultiBoxPriorAttrs.html">MultiBoxPriorAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">t [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1BatchNormAttrs.html">BatchNormAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1FunctionBaseNode.html">FunctionBaseNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1MultiBoxTransformLocAttrs.html">MultiBoxTransformLocAttrs</a [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1BiasAddAttrs.html">BiasAddAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html">FunctionNode</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_N"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class=" [...]
+</td><td valign="top"><a class="el" href="classtvm_1_1RelayRefType.html">RelayRefType</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="unionTVMValue.html">TVMValue</a>&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1BijectiveLayout.html">BijectiveLayout</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1FunctionRef.html">FunctionRef</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1RelayRefTypeNode.html">RelayRefTypeNode</a> (<a class="el" href="namespacetvm.html">t [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1BijectiveLayoutNode.html">BijectiveLayoutNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1FuncType.html">FuncType</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">NDArray</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</ [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1BinaryConv2DAttrs.html">BinaryConv2DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1FuncTypeNode.html">FuncTypeNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1NdarraySizeAttrs.html">NdarraySizeAttrs</a> (<a class="el" href="namespacetvm_1_1 [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1BinaryDenseAttrs.html">BinaryDenseAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1FuseNode.html">FuseNode</a> (<a class="el" href="namespacetvm_1_1te.html">tvm::te</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1NENode.html">NENode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::ti [...]
 <tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1BinaryOpNode.html">BinaryOpNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_G"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;G&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1NENode.html">NENode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1ReshapeAttrs.html">ReshapeAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1TypeConstraint.html">TypeConstraint</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160 [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1BitPackAttrs.html">BitPackAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1NodeFunctor.html">NodeFunctor</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1ResizeAttrs.html">ResizeAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1BroadcastNode.html">BroadcastNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1GenericFunc.html">GenericFunc</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1NodeFunctor_3_01R_07const_01ObjectRef_01_6n_00_01Args_8_8_8_08_4.html">NodeFunctor&lt; R(const ObjectRef &am [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1Buffer.html">Buffer</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1GenericFuncNode.html">GenericFuncNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1NonMaximumSuppressionAttrs.html">NonMaximumSuppressionAttrs</a> (<a class="el" href="namespacetvm_1_1rel [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1BufferLoad.html">BufferLoad</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1GenericOpMap.html">GenericOpMap</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1NotNode.html">NotNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;< [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1BufferLoadNode.html">BufferLoadNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1GENode.html">GENode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_O"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;O&#16 [...]
-</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1ROIPoolAttrs.html">ROIPoolAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1TypedEnvFunc_3_01R_07Args_8_8_8_08_4.html">TypedEnvFunc&lt; R(Args...)&gt;</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td></tr>
-<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1BufferNode.html">BufferNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1GetValidCountsAttrs.html">GetValidCountsAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_S"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div cla [...]
-</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1TypedPackedFunc.html">TypedPackedFunc</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td></tr>
-<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1BufferStore.html">BufferStore</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1GlobalPool2DAttrs.html">GlobalPool2DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1ObjAllocatorBase.html">ObjAllocatorBase</a> (<a class="el" href [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1BufferStoreNode.html">BufferStoreNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1GlobalTypeVar.html">GlobalTypeVar</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1Object.html">Object</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</ [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1BuildConfig.html">BuildConfig</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1GlobalTypeVarNode.html">GlobalTypeVarNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1runtime_1_1ObjectEqual.html">ObjectEqual</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160 [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1BuildConfigNode.html">BuildConfigNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1GlobalVar.html">GlobalVar</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1runtime_1_1ObjectHash.html">ObjectHash</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#1 [...]
+</td><td valign="top"><a class="el" href="classtvm_1_1NodeFunctor.html">NodeFunctor</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1ReshapeAttrs.html">ReshapeAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1TypeConstraintNode.html">TypeConstraintNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160; [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1BitPackAttrs.html">BitPackAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1NodeFunctor_3_01R_07const_01ObjectRef_01_6n_00_01Args_8_8_8_08_4.html">NodeFunctor&lt; R(const ObjectRef &amp;n, Args...)&gt;</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_ [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1Bool.html">Bool</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1GenericFunc.html">GenericFunc</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1NonMaximumSuppressionAttrs.html">NonMaximumSuppressionAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;& [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1BroadcastNode.html">BroadcastNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1GenericFuncNode.html">GenericFuncNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1NotNode.html">NotNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;& [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1Buffer.html">Buffer</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1GenericOpMap.html">GenericOpMap</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_O"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;O&#160;&#160;</div></td></tr [...]
+</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1ROIAlignAttrs.html">ROIAlignAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1TypedEnvFunc_3_01R_07Args_8_8_8_08_4.html">TypedEnvFunc&lt; R(Args...)&gt;</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1BufferLoad.html">BufferLoad</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1GENode.html">GENode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1ROIPoolAttrs.html">ROIPoolAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1BufferLoadNode.html">BufferLoadNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1GetValidCountsAttrs.html">GetValidCountsAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1ObjAllocatorBase.html">ObjAllocatorBase</a> (<a class [...]
+</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1TypedPackedFunc_3_01R_07Args_8_8_8_08_4.html">TypedPackedFunc&lt; R(Args...)&gt;</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1BufferNode.html">BufferNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1GlobalPool2DAttrs.html">GlobalPool2DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1Object.html">Object</a> (<a class="el" href="namespacetvm_1_1runt [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1BufferStore.html">BufferStore</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1GlobalTypeVar.html">GlobalTypeVar</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1runtime_1_1ObjectEqual.html">ObjectEqual</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtim [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1BufferStoreNode.html">BufferStoreNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1GlobalTypeVarNode.html">GlobalTypeVarNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1runtime_1_1ObjectHash.html">ObjectHash</a> (<a class="el" href="namespacetvm_1_1runtime.htm [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1BuildConfig.html">BuildConfig</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1GlobalVar.html">GlobalVar</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1ObjectPtr.html">ObjectPtr</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1BuildConfigNode.html">BuildConfigNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1GlobalVarNode.html">GlobalVarNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">ObjectRef</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#16 [...]
 <tr><td rowspan="2" valign="bottom"><a name="letter_C"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;C&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="classtvm_1_1GlobalVarNode.html">GlobalVarNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1ObjectPtr.html">ObjectPtr</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1SelectNode.html">SelectNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>) [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1GTNode.html">GTNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">ObjectRef</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1detail_1_1SelectSEqualReduce.html">SelectSEqualReduce</a> (<a class="el" href="namespacetvm_1_ [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1relay_1_1Call.html">Call</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_H"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;H&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="structtvm_1_1runtime_1_1ObjectTypeChecker.html">ObjectTypeChecker</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1detail_1_1SelectSEqualReduce_3_01T_00_01TraitName_00_01false_01_4.html">SelectSEqualReduce&lt; T, TraitName, false &gt;</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class= [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1relay_1_1CallNode.html">CallNode</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1runtime_1_1ObjectTypeChecker_3_01Array_3_01T_01_4_01_4.html">ObjectTypeChecker&lt; Array&lt; T &gt; &gt;</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1detail_1_1Selec [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1CallNode.html">CallNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1SHashReducer_1_1Handler.html">SHashReducer::Handler</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1runtime_1_1ObjectTypeChecker_3_01Map_3_01K_00_01V_01_4_01_4.html">ObjectTypeChecker&lt; Map&lt; [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1arith_1_1CanonicalSimplifier.html">CanonicalSimplifier</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1SimpleObjAllocator_1_1Handler.html">SimpleObjAllocator::Handler</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1OnDeviceAttrs.h [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1CastAttrs.html">CastAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1SEqualReducer_1_1Handler.html">SEqualReducer::Handler</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1OneHotAttrs.html">OneHotAttrs</a> (<a class="el" href="namespacetvm_1_1rela [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1CastHintAttrs.html">CastHintAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structdmlc_1_1serializer_1_1Handler_3_01DLContext_01_4.html">Handler&lt; DLContext &gt;</a> (<a class="el" href="namespacedmlc_1_1serializer.html">dmlc::serializer</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1Op.html">Op</a> (<a class=" [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1CastNode.html">CastNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structdmlc_1_1serializer_1_1Handler_3_01DLDataType_01_4.html">Handler&lt; DLDataType &gt;</a> (<a class="el" href="namespacedmlc_1_1serializer.html">dmlc::serializer</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1Operation.html">Operation</a> (<a cl [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1relay_1_1Clause.html">Clause</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1HybridOpNode.html">HybridOpNode</a> (<a class="el" href="namespacetvm_1_1te.html">tvm::te</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1OperationNode.html">OperationNode</a> (<a class="el" href="namespacetvm_1_1te.html">tvm::te< [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1relay_1_1ClauseNode.html">ClauseNode</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_I"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;I&#160;&#160;</div></td></tr></table>
-</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1OpImplementation.html">OpImplementation</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1SequenceMaskAttrs.html">SequenceMaskAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1TypeRelationNode.html">TypeRelationNode</a> (<a class="el [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1ClipAttrs.html">ClipAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1OpImplementationNode.html">OpImplementationNode</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1transform_1_1Sequential.html">Sequential</a> (<a class="el" href=" [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1vm_1_1Closure.html">Closure</a> (<a class="el" href="namespacetvm_1_1runtime_1_1vm.html">tvm::runtime::vm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1Id.html">Id</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1OpMap.html">OpMap</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#1 [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1vm_1_1ClosureObj.html">ClosureObj</a> (<a class="el" href="namespacetvm_1_1runtime_1_1vm.html">tvm::runtime::vm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1IdNode.html">IdNode</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1OpNode.html">OpNode</a> (<a class="el" href="namespacetvm.html">tvm</a> [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1CmpOpNode.html">CmpOpNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1If.html">If</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1OpRegistry.html">OpRegistry</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td va [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1CommReducer.html">CommReducer</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1IfNode.html">IfNode</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1OpSpecialization.html">OpSpecialization</a> (<a class="el" href="namespacetvm_1_1relay.h [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1CommReducerNode.html">CommReducerNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1IfThenElseNode.html">IfThenElseNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1OpSpecializationNode.html">OpSpecializationNode</a> (<a class="el" hre [...]
+</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1GTNode.html">GTNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1runtime_1_1ObjectTypeChecker.html">ObjectTypeChecker</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1detail_1_1SelectSEqualReduce.html">SelectSEqualReduce</a> (<a class="el" hre [...]
+<tr><td rowspan="2" valign="bottom"><a name="letter_H"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;H&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="structtvm_1_1runtime_1_1ObjectTypeChecker_3_01Array_3_01T_01_4_01_4.html">ObjectTypeChecker&lt; Array&lt; T &gt; &gt;</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1detail_1_1SelectSEqualReduce_3_01T_00_01TraitName_00_01false_01_4.html">SelectSEqualReduce&lt; T, TraitName, false &gt;</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</ [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1relay_1_1Call.html">Call</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1runtime_1_1ObjectTypeChecker_3_01Map_3_01K_00_01V_01_4_01_4.html">ObjectTypeChecker&lt; Map&lt; K, V &gt; &gt;</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1detail_1_1SelectS [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1relay_1_1CallNode.html">CallNode</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1SHashReducer_1_1Handler.html">SHashReducer::Handler</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1OnDeviceAttrs.html">OnDeviceAttrs</a> (<a class="el" href="namespacetvm_1_1relay [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1CallNode.html">CallNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1SEqualReducer_1_1Handler.html">SEqualReducer::Handler</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1OneHotAttrs.html">OneHotAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">t [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1arith_1_1CanonicalSimplifier.html">CanonicalSimplifier</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1SimpleObjAllocator_1_1Handler.html">SimpleObjAllocator::Handler</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1Op.html">Op</a> (<a class [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1CastAttrs.html">CastAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structdmlc_1_1serializer_1_1Handler_3_01DLContext_01_4.html">Handler&lt; DLContext &gt;</a> (<a class="el" href="namespacedmlc_1_1serializer.html">dmlc::serializer</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1Operation.html">Operation</a> [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1CastHintAttrs.html">CastHintAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structdmlc_1_1serializer_1_1Handler_3_01DLDataType_01_4.html">Handler&lt; DLDataType &gt;</a> (<a class="el" href="namespacedmlc_1_1serializer.html">dmlc::serializer</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1OperationNode.html" [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1CastNode.html">CastNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1HybridOpNode.html">HybridOpNode</a> (<a class="el" href="namespacetvm_1_1te.html">tvm::te</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1OpImplementation.html">OpImplementation</a> (<a class="el" href="namespacetvm_1_1relay.html [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1relay_1_1Clause.html">Clause</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_I"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;I&#160;&#160;</div></td></tr></table>
+</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1OpImplementationNode.html">OpImplementationNode</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1SequenceMaskAttrs.html">SequenceMaskAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1TypeReporter.html">TypeReporter</a> (<a class="el [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1relay_1_1ClauseNode.html">ClauseNode</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1OpMap.html">OpMap</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1transform_1_1Sequential.html">Sequential</a> (<a class="el" href="namespacetvm_1_1transform.html">tvm::transform</a>)&#1 [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1ClipAttrs.html">ClipAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1Id.html">Id</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1OpNode.html">OpNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td val [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1vm_1_1Closure.html">Closure</a> (<a class="el" href="namespacetvm_1_1runtime_1_1vm.html">tvm::runtime::vm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1IdNode.html">IdNode</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1OpRegistry.html">OpRegistry</a> (<a class="el" href="namespacetvm.html">tvm</ [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1vm_1_1ClosureObj.html">ClosureObj</a> (<a class="el" href="namespacetvm_1_1runtime_1_1vm.html">tvm::runtime::vm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1If.html">If</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1OpSpecialization.html">OpSpecialization</a> (<a class="el" href="names [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1CmpOpNode.html">CmpOpNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1IfNode.html">IfNode</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1OpSpecializationNode.html">OpSpecializationNode</a> (<a class="el" href="namespacetvm_1_1rel [...]
 </td></tr>
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1CompilerAttrs.html">CompilerAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1detail_1_1ImplSEqualReduce.html">ImplSEqualReduce</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1OpStrategy.html">OpStrategy</a> (<a class="el" href=" [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1te_1_1ComputeOpNode.html">ComputeOpNode</a> (<a class="el" href="namespacetvm_1_1te.html">tvm::te</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1detail_1_1ImplSEqualReduce_3_01T_00_01true_01_4.html">ImplSEqualReduce&lt; T, true &gt;</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1OpStrategyNode.html">OpSt [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1ConcatenateAttrs.html">ConcatenateAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1detail_1_1ImplSHashReduce.html">ImplSHashReduce</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1OrNode.html">OrNode</a> (<a class="el" href="namesp [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1relay_1_1Constant.html">Constant</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1detail_1_1ImplSHashReduce_3_01T_00_01true_01_4.html">ImplSHashReduce&lt; T, true &gt;</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_P"></a><table border="0" cellspacing=" [...]
-</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1Tensor_1_1Slice.html">Tensor::Slice</a> (<a class="el" href="namespacetvm_1_1te.html">tvm::te</a>)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_V"></a><table border="0" cellspacing="0" cellpadding="0"><tr><td><div class="ah">&#160;&#160;V&#160;&#160;</div></td></tr></table>
+<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1CommReducer.html">CommReducer</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1IfThenElseNode.html">IfThenElseNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1OpStrategy.html">OpStrategy</a> (<a class="el" href="namespacetvm_1_1relay.htm [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1tir_1_1CommReducerNode.html">CommReducerNode</a> (<a class="el" href="namespacetvm_1_1tir.html">tvm::tir</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1detail_1_1ImplSEqualReduce.html">ImplSEqualReduce</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1OpStrategyNode.html">OpStrategyNode</a> (<a class="el" h [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1CompilerAttrs.html">CompilerAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1detail_1_1ImplSEqualReduce_3_01T_00_01true_01_4.html">ImplSEqualReduce&lt; T, true &gt;</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1Optional.html [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1te_1_1ComputeOpNode.html">ComputeOpNode</a> (<a class="el" href="namespacetvm_1_1te.html">tvm::te</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1detail_1_1ImplSHashReduce.html">ImplSHashReduce</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1tir_1_1OrNode.html">OrNode</a> (<a class="el" href="namespacetvm_1_1tir.ht [...]
 </td></tr>
-<tr><td valign="top"><a class="el" href="classtvm_1_1relay_1_1ConstantNode.html">ConstantNode</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1detail_1_1ImplVisitAttrs.html">ImplVisitAttrs</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1SliceLikeAttrs.html">SliceLikeAttrs</a> (<a class="el" href [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1arith_1_1ConstIntBound.html">ConstIntBound</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1detail_1_1ImplVisitAttrs_3_01T_00_01true_01_4.html">ImplVisitAttrs&lt; T, true &gt;</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1PackedFunc.html">P [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1arith_1_1ConstIntBoundAnalyzer.html">ConstIntBoundAnalyzer</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1IncompleteType.html">IncompleteType</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1runtime_1_1PackedFuncValueConverter.html">PackedFuncValueConverter</a> (<a clas [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1arith_1_1ConstIntBoundNode.html">ConstIntBoundNode</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1IncompleteTypeNode.html">IncompleteTypeNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1runtime_1_1PackedFuncValueConverter_3_01PrimExpr_01_4.html">PackedFuncValueConv [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1arith_1_1ConstraintContext.html">ConstraintContext</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1InitOpAttrs.html">InitOpAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1runtime_1_1PackedFuncValueConverter_3_01tvm_1_1Integer_01_4.html">P [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1Constructor.html">Constructor</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1InplaceArrayBase.html">InplaceArrayBase</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1runtime_1_1PackedFuncValueConverter_3_1_1tvm_1_1runtime_1_1String_01_4.html">PackedFuncVa [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1ConstructorNode.html">ConstructorNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1InstanceNormAttrs.html">InstanceNormAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1PadAttrs.html">PadAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1relay_1_1ConstructorValue.html">ConstructorValue</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1runtime_1_1vm_1_1Instruction.html">Instruction</a> (<a class="el" href="namespacetvm_1_1runtime_1_1vm.html">tvm::runtime::vm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1transform_1_1Pass.html">Pass</a> (<a class="el"  [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1ConstructorValueObj.html">ConstructorValueObj</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1arith_1_1IntConstraints.html">IntConstraints</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1transform_1_1PassContext.html">PassContext</a> (<a class=" [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1NDArray_1_1Container.html">NDArray::Container</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1arith_1_1IntConstraintsNode.html">IntConstraintsNode</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1transform_1_1PassContextNode.html">PassContex [...]
-<tr><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1NDArray_1_1ContainerBase.html">NDArray::ContainerBase</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1arith_1_1IntConstraintsTransform.html">IntConstraintsTransform</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1transform_1_1PassInfo.html" [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1Conv1DAttrs.html">Conv1DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1arith_1_1IntConstraintsTransformNode.html">IntConstraintsTransformNode</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1transform_1_1PassInfoNode.html">PassInfoNode</a> [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1Conv1DTransposeAttrs.html">Conv1DTransposeAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1Integer.html">Integer</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1transform_1_1PassNode.html">PassNode</a> (<a class="el" href="namespacetvm_1_1transform.html">t [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1ConcatenateAttrs.html">ConcatenateAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1detail_1_1ImplSHashReduce_3_01T_00_01true_01_4.html">ImplSHashReduce&lt; T, true &gt;</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td rowspan="2" valign="bottom"><a name="letter_P"></a><table border= [...]
+</td><td valign="top"><a class="el" href="classtvm_1_1te_1_1Tensor_1_1Slice.html">Tensor::Slice</a> (<a class="el" href="namespacetvm_1_1te.html">tvm::te</a>)&#160;&#160;&#160;</td></tr>
+<tr><td valign="top"><a class="el" href="classtvm_1_1relay_1_1Constant.html">Constant</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1detail_1_1ImplVisitAttrs.html">ImplVisitAttrs</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1SliceLikeAttrs.html">SliceLikeAttrs</a> (<a class="el" href="namesp [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1relay_1_1ConstantNode.html">ConstantNode</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1detail_1_1ImplVisitAttrs_3_01T_00_01true_01_4.html">ImplVisitAttrs&lt; T, true &gt;</a> (<a class="el" href="namespacetvm_1_1detail.html">tvm::detail</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1PackedFunc.html">Pac [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1arith_1_1ConstIntBound.html">ConstIntBound</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1IncompleteType.html">IncompleteType</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1runtime_1_1PackedFuncValueConverter.html">PackedFuncValueConverter</a> (<a class="el" href="nam [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1arith_1_1ConstIntBoundAnalyzer.html">ConstIntBoundAnalyzer</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1IncompleteTypeNode.html">IncompleteTypeNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1runtime_1_1PackedFuncValueConverter_3_01Optional_3_01T_01_4_01_4.html"> [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1arith_1_1ConstIntBoundNode.html">ConstIntBoundNode</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1InitOpAttrs.html">InitOpAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1runtime_1_1PackedFuncValueConverter_3_01PrimExpr_01_4.html">PackedF [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1arith_1_1ConstraintContext.html">ConstraintContext</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1InplaceArrayBase.html">InplaceArrayBase</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1runtime_1_1PackedFuncValueConverter_3_01tvm_1_1Integ [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1Constructor.html">Constructor</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1InstanceNormAttrs.html">InstanceNormAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1runtime_1_1PackedFuncValueConverter_3_1_1tvm_1_1runtime_1_1String_01_4.html">PackedFuncValue [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1ConstructorNode.html">ConstructorNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1runtime_1_1vm_1_1Instruction.html">Instruction</a> (<a class="el" href="namespacetvm_1_1runtime_1_1vm.html">tvm::runtime::vm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="structtvm_1_1relay_1_1PadAttrs.html">PadAttrs</a> (<a class="el" href="namespacetvm_1_1 [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1relay_1_1ConstructorValue.html">ConstructorValue</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1arith_1_1IntConstraints.html">IntConstraints</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1transform_1_1Pass.html">Pass</a> (<a class="el" href="namespacetv [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1ConstructorValueObj.html">ConstructorValueObj</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1arith_1_1IntConstraintsNode.html">IntConstraintsNode</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1transform_1_1PassContext.html">PassContext</a> (<a [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1NDArray_1_1Container.html">NDArray::Container</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1arith_1_1IntConstraintsTransform.html">IntConstraintsTransform</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1transform_1_1PassContextNode.html"> [...]
+<tr><td valign="top"><a class="el" href="classtvm_1_1runtime_1_1NDArray_1_1ContainerBase.html">NDArray::ContainerBase</a> (<a class="el" href="namespacetvm_1_1runtime.html">tvm::runtime</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1arith_1_1IntConstraintsTransformNode.html">IntConstraintsTransformNode</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1transform_1_1PassIn [...]
 </td></tr>
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1Conv2DAttrs.html">Conv2DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1InterpreterClosure.html">InterpreterClosure</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1Pattern.html">Pattern</a> (<a class="el" href="namespacet [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1Conv2DTransposeAttrs.html">Conv2DTransposeAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1InterpreterClosureObj.html">InterpreterClosureObj</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1PatternConstructor.html">PatternC [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1Conv2DWinogradAttrs.html">Conv2DWinogradAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1IntImm.html">IntImm</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1PatternConstructorNode.html">PatternConstructorNode</a> (<a class="el" href="namespacetvm_ [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1Conv1DAttrs.html">Conv1DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1Integer.html">Integer</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1transform_1_1PassInfoNode.html">PassInfoNode</a> (<a class="el" href="namespacetvm_1_1transform.html">tvm::transf [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1Conv1DTransposeAttrs.html">Conv1DTransposeAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1InterpreterClosure.html">InterpreterClosure</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1transform_1_1PassNode.html">PassNode</a> (<a cla [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1Conv2DAttrs.html">Conv2DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1InterpreterClosureObj.html">InterpreterClosureObj</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1Pattern.html">Pattern</a> (<a class="el" href="name [...]
 </td></tr>
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1Conv2DWinogradNNPACKWeightTransformAttrs.html">Conv2DWinogradNNPACKWeightTransformAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1IntImmNode.html">IntImmNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1PatternFunctor.html">PatternFunctor</a>  [...]
-<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1Conv3DAttrs.html">Conv3DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1arith_1_1IntSet.html">IntSet</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1PatternFunctor_3_01R_07const_01Pattern_01_6n_00_01Args_8_8_8_08_4.html">PatternFu [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1Conv2DTransposeAttrs.html">Conv2DTransposeAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1IntImm.html">IntImm</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1PatternConstructor.html">PatternConstructor</a> (<a class="el" href="namespacetvm_1_1rel [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1Conv2DWinogradAttrs.html">Conv2DWinogradAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1IntImmNode.html">IntImmNode</a> (<a class="el" href="namespacetvm.html">tvm</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1PatternConstructorNode.html">PatternConstructorNode</a> (<a class="el" href="names [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1Conv2DWinogradNNPACKWeightTransformAttrs.html">Conv2DWinogradNNPACKWeightTransformAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1arith_1_1IntSet.html">IntSet</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1PatternFunctor.html">Pa [...]
+<tr><td valign="top"><a class="el" href="structtvm_1_1relay_1_1Conv3DAttrs.html">Conv3DAttrs</a> (<a class="el" href="namespacetvm_1_1relay.html">tvm::relay</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1arith_1_1IntSetAnalyzer.html">IntSetAnalyzer</a> (<a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a>)&#160;&#160;&#160;</td><td valign="top"><a class="el" href="classtvm_1_1relay_1_1PatternFunctor_3_01R_07const_01Pattern_01_6n_00_01Args_8_8_8_08_4 [...]
 <tr><td></td><td></td><td></td><td></td><td></td></tr>
 </table>
 <div class="qindex"><a class="qindex" href="#letter_A">A</a>&#160;|&#160;<a class="qindex" href="#letter_B">B</a>&#160;|&#160;<a class="qindex" href="#letter_C">C</a>&#160;|&#160;<a class="qindex" href="#letter_D">D</a>&#160;|&#160;<a class="qindex" href="#letter_E">E</a>&#160;|&#160;<a class="qindex" href="#letter_F">F</a>&#160;|&#160;<a class="qindex" href="#letter_G">G</a>&#160;|&#160;<a class="qindex" href="#letter_H">H</a>&#160;|&#160;<a class="qindex" href="#letter_I">I</a>&#160;|& [...]
diff --git a/docs/doxygen/classtvm_1_1BaseExpr.html b/docs/doxygen/classtvm_1_1BaseExpr.html
index 6ba38b5..70c9f45 100644
--- a/docs/doxygen/classtvm_1_1BaseExpr.html
+++ b/docs/doxygen/classtvm_1_1BaseExpr.html
@@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="dynheader">
 Inheritance diagram for tvm::BaseExpr:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1BaseExpr__inherit__graph.svg" width="4558" height="824"><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_1BaseExpr__inherit__graph.svg" width="4558" height="883"><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/doxygen/classtvm_1_1BaseExprNode__inherit__graph.svg b/docs/doxygen/classtvm_1_1BaseExprNode__inherit__graph.svg
index ffffef1..7e34a7c 100644
--- a/docs/doxygen/classtvm_1_1BaseExprNode__inherit__graph.svg
+++ b/docs/doxygen/classtvm_1_1BaseExprNode__inherit__graph.svg
@@ -896,21 +896,22 @@
 <!-- Node40 -->
 <g id="node40" class="node"><title>Node40</title>
 <g id="a_node40"><a xlink:href="classtvm_1_1BaseFuncNode.html" target="_top" xlink:title="Base node of all functions. ">
-<polygon fill="white" stroke="red" points="7803.5,-105 7803.5,-195 8007.5,-195 8007.5,-105 7803.5,-105"/>
-<text text-anchor="middle" x="7905.5" y="-183" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseFuncNode</text>
-<polyline fill="none" stroke="red" points="7803.5,-176 8007.5,-176 "/>
-<text text-anchor="start" x="7811.5" y="-164" font-family="Helvetica,sans-Serif" font-size="10.00">+ attrs</text>
-<text text-anchor="start" x="7811.5" y="-153" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<polyline fill="none" stroke="red" points="7803.5,-146 8007.5,-146 "/>
-<text text-anchor="start" x="7811.5" y="-134" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetAttr()</text>
-<text text-anchor="start" x="7811.5" y="-123" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasNonzeroAttr()</text>
-<text text-anchor="start" x="7811.5" y="-112" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_INFO()</text>
+<polygon fill="white" stroke="red" points="7803.5,-99.5 7803.5,-200.5 8007.5,-200.5 8007.5,-99.5 7803.5,-99.5"/>
+<text text-anchor="middle" x="7905.5" y="-188.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseFuncNode</text>
+<polyline fill="none" stroke="red" points="7803.5,-181.5 8007.5,-181.5 "/>
+<text text-anchor="start" x="7811.5" y="-169.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ attrs</text>
+<text text-anchor="start" x="7811.5" y="-158.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<polyline fill="none" stroke="red" points="7803.5,-151.5 8007.5,-151.5 "/>
+<text text-anchor="start" x="7811.5" y="-139.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetAttr()</text>
+<text text-anchor="start" x="7811.5" y="-128.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetAttr()</text>
+<text text-anchor="start" x="7811.5" y="-117.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasNonzeroAttr()</text>
+<text text-anchor="start" x="7811.5" y="-106.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_INFO()</text>
 </a>
 </g>
 </g>
 <!-- Node39&#45;&gt;Node40 -->
 <g id="edge39" class="edge"><title>Node39&#45;&gt;Node40</title>
-<path fill="none" stroke="midnightblue" d="M8684.28,-384.496C8496.35,-380.202 8127.65,-363.664 8016.5,-300 7974.93,-276.192 7944.24,-229.868 7925.79,-195.161"/>
+<path fill="none" stroke="midnightblue" d="M8684.28,-384.496C8496.35,-380.202 8127.65,-363.664 8016.5,-300 7977.03,-277.394 7947.37,-234.489 7928.68,-200.504"/>
 <polygon fill="none" stroke="midnightblue" points="8684.39,-387.999 8694.46,-384.72 8684.54,-381.001 8684.39,-387.999"/>
 </g>
 <!-- Node41 -->
diff --git a/docs/doxygen/classtvm_1_1BaseExpr__inherit__graph.svg b/docs/doxygen/classtvm_1_1BaseExpr__inherit__graph.svg
index 86a2f27..ec6b197 100644
--- a/docs/doxygen/classtvm_1_1BaseExpr__inherit__graph.svg
+++ b/docs/doxygen/classtvm_1_1BaseExpr__inherit__graph.svg
@@ -4,561 +4,586 @@
 <!-- Generated by graphviz version 2.38.0 (20140413.2041)
  -->
 <!-- Title: tvm::BaseExpr Pages: 1 -->
-<svg width="3418pt" height="618pt"
- viewBox="0.00 0.00 3418.00 618.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 614)">
+<svg width="3418pt" height="662pt"
+ viewBox="0.00 0.00 3418.00 662.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 658)">
 <title>tvm::BaseExpr</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-614 3414,-614 3414,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-658 3414,-658 3414,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node"><title>Node1</title>
-<polygon fill="#bfbfbf" stroke="black" points="1210,-447.5 1210,-515.5 1360,-515.5 1360,-447.5 1210,-447.5"/>
-<text text-anchor="middle" x="1285" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseExpr</text>
-<polyline fill="none" stroke="black" points="1210,-496.5 1360,-496.5 "/>
-<text text-anchor="middle" x="1285" y="-484.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="1210,-477.5 1360,-477.5 "/>
-<text text-anchor="start" x="1218" y="-465.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="1218" y="-454.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="#bfbfbf" stroke="black" points="1210,-491.5 1210,-559.5 1360,-559.5 1360,-491.5 1210,-491.5"/>
+<text text-anchor="middle" x="1285" y="-547.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseExpr</text>
+<polyline fill="none" stroke="black" points="1210,-540.5 1360,-540.5 "/>
+<text text-anchor="middle" x="1285" y="-528.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="1210,-521.5 1360,-521.5 "/>
+<text text-anchor="start" x="1218" y="-509.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="1218" y="-498.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node"><title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1PrimExpr.html" target="_top" xlink:title="Reference to PrimExprNode. ">
-<polygon fill="white" stroke="black" points="420,-309.5 420,-410.5 570,-410.5 570,-309.5 420,-309.5"/>
-<text text-anchor="middle" x="495" y="-398.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::PrimExpr</text>
-<polyline fill="none" stroke="black" points="420,-391.5 570,-391.5 "/>
-<text text-anchor="middle" x="495" y="-379.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="420,-372.5 570,-372.5 "/>
-<text text-anchor="start" x="428" y="-360.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
-<text text-anchor="start" x="428" y="-349.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
-<text text-anchor="start" x="428" y="-338.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ dtype()</text>
-<text text-anchor="start" x="428" y="-327.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="428" y="-316.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="420,-353.5 420,-454.5 570,-454.5 570,-353.5 420,-353.5"/>
+<text text-anchor="middle" x="495" y="-442.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::PrimExpr</text>
+<polyline fill="none" stroke="black" points="420,-435.5 570,-435.5 "/>
+<text text-anchor="middle" x="495" y="-423.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="420,-416.5 570,-416.5 "/>
+<text text-anchor="start" x="428" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
+<text text-anchor="start" x="428" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
+<text text-anchor="start" x="428" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ dtype()</text>
+<text text-anchor="start" x="428" y="-371.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="428" y="-360.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node3 -->
 <g id="edge2" class="edge"><title>Node1&#45;&gt;Node3</title>
-<path fill="none" stroke="midnightblue" d="M1199.99,-467.641C1044.73,-444.156 717.718,-394.69 570.109,-372.361"/>
-<polygon fill="none" stroke="midnightblue" points="1199.56,-471.115 1209.97,-469.15 1200.6,-464.194 1199.56,-471.115"/>
+<path fill="none" stroke="midnightblue" d="M1199.99,-511.641C1044.73,-488.156 717.718,-438.69 570.109,-416.361"/>
+<polygon fill="none" stroke="midnightblue" points="1199.56,-515.115 1209.97,-513.15 1200.6,-508.194 1199.56,-515.115"/>
 </g>
-<!-- Node11 -->
-<g id="node11" class="node"><title>Node11</title>
-<g id="a_node11"><a xlink:href="classtvm_1_1RelayExpr.html" target="_top" xlink:title="Managed reference to RelayExprNode. ">
-<polygon fill="white" stroke="black" points="1916,-326 1916,-394 2066,-394 2066,-326 1916,-326"/>
-<text text-anchor="middle" x="1991" y="-382" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::RelayExpr</text>
-<polyline fill="none" stroke="black" points="1916,-375 2066,-375 "/>
-<text text-anchor="middle" x="1991" y="-363" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="1916,-356 2066,-356 "/>
-<text text-anchor="start" x="1924" y="-344" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="1924" y="-333" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<!-- Node12 -->
+<g id="node12" class="node"><title>Node12</title>
+<g id="a_node12"><a xlink:href="classtvm_1_1RelayExpr.html" target="_top" xlink:title="Managed reference to RelayExprNode. ">
+<polygon fill="white" stroke="black" points="1916,-370 1916,-438 2066,-438 2066,-370 1916,-370"/>
+<text text-anchor="middle" x="1991" y="-426" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::RelayExpr</text>
+<polyline fill="none" stroke="black" points="1916,-419 2066,-419 "/>
+<text text-anchor="middle" x="1991" y="-407" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="1916,-400 2066,-400 "/>
+<text text-anchor="start" x="1924" y="-388" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="1924" y="-377" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
-<!-- Node1&#45;&gt;Node11 -->
-<g id="edge10" class="edge"><title>Node1&#45;&gt;Node11</title>
-<path fill="none" stroke="midnightblue" d="M1370.42,-466.041C1509.74,-442.46 1783.58,-396.108 1915.9,-373.711"/>
-<polygon fill="none" stroke="midnightblue" points="1369.5,-462.648 1360.22,-467.768 1370.66,-469.55 1369.5,-462.648"/>
+<!-- Node1&#45;&gt;Node12 -->
+<g id="edge11" class="edge"><title>Node1&#45;&gt;Node12</title>
+<path fill="none" stroke="midnightblue" d="M1370.42,-510.041C1509.74,-486.46 1783.58,-440.108 1915.9,-417.711"/>
+<polygon fill="none" stroke="midnightblue" points="1369.5,-506.648 1360.22,-511.768 1370.66,-513.55 1369.5,-506.648"/>
 </g>
 <!-- Node2 -->
 <g id="node2" class="node"><title>Node2</title>
-<polygon fill="white" stroke="#bfbfbf" points="1254,-552.5 1254,-609.5 1316,-609.5 1316,-552.5 1254,-552.5"/>
-<text text-anchor="middle" x="1285" y="-597.5" font-family="Helvetica,sans-Serif" font-size="10.00">ObjectRef</text>
-<polyline fill="none" stroke="#bfbfbf" points="1254,-590.5 1316,-590.5 "/>
-<text text-anchor="middle" x="1285" y="-578.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="#bfbfbf" points="1254,-571.5 1316,-571.5 "/>
-<text text-anchor="middle" x="1285" y="-559.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polygon fill="white" stroke="#bfbfbf" points="1254,-596.5 1254,-653.5 1316,-653.5 1316,-596.5 1254,-596.5"/>
+<text text-anchor="middle" x="1285" y="-641.5" font-family="Helvetica,sans-Serif" font-size="10.00">ObjectRef</text>
+<polyline fill="none" stroke="#bfbfbf" points="1254,-634.5 1316,-634.5 "/>
+<text text-anchor="middle" x="1285" y="-622.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="#bfbfbf" points="1254,-615.5 1316,-615.5 "/>
+<text text-anchor="middle" x="1285" y="-603.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
 </g>
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge"><title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M1285,-542.063C1285,-533.393 1285,-524.243 1285,-515.786"/>
-<polygon fill="none" stroke="midnightblue" points="1281.5,-542.321 1285,-552.321 1288.5,-542.321 1281.5,-542.321"/>
+<path fill="none" stroke="midnightblue" d="M1285,-586.063C1285,-577.393 1285,-568.243 1285,-559.786"/>
+<polygon fill="none" stroke="midnightblue" points="1281.5,-586.321 1285,-596.321 1288.5,-586.321 1281.5,-586.321"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node"><title>Node4</title>
 <g id="a_node4"><a xlink:href="classtvm_1_1FloatImm.html" target="_top" xlink:title="Managed reference class to FloatImmNode. ">
-<polygon fill="white" stroke="black" points="0,-177 0,-256 150,-256 150,-177 0,-177"/>
-<text text-anchor="middle" x="75" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::FloatImm</text>
-<polyline fill="none" stroke="black" points="0,-237 150,-237 "/>
-<text text-anchor="middle" x="75" y="-225" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="0,-218 150,-218 "/>
-<text text-anchor="start" x="8" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">+ FloatImm()</text>
-<text text-anchor="start" x="8" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="8" y="-184" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="0,-221 0,-300 150,-300 150,-221 0,-221"/>
+<text text-anchor="middle" x="75" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::FloatImm</text>
+<polyline fill="none" stroke="black" points="0,-281 150,-281 "/>
+<text text-anchor="middle" x="75" y="-269" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-262 150,-262 "/>
+<text text-anchor="start" x="8" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ FloatImm()</text>
+<text text-anchor="start" x="8" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="8" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node4 -->
 <g id="edge3" class="edge"><title>Node3&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M409.852,-345.333C340.327,-332.279 240.588,-309.163 159,-273 148.453,-268.325 137.762,-262.372 127.701,-256.11"/>
-<polygon fill="none" stroke="midnightblue" points="409.416,-348.812 419.885,-347.187 410.687,-341.928 409.416,-348.812"/>
+<path fill="none" stroke="midnightblue" d="M409.852,-389.333C340.327,-376.279 240.588,-353.163 159,-317 148.453,-312.325 137.762,-306.372 127.701,-300.11"/>
+<polygon fill="none" stroke="midnightblue" points="409.416,-392.812 419.885,-391.187 410.687,-385.928 409.416,-392.812"/>
 </g>
 <!-- Node5 -->
 <g id="node5" class="node"><title>Node5</title>
 <g id="a_node5"><a xlink:href="classtvm_1_1IntImm.html" target="_top" xlink:title="Managed reference class to IntImmNode. ">
-<polygon fill="white" stroke="black" points="168,-177 168,-256 318,-256 318,-177 168,-177"/>
-<text text-anchor="middle" x="243" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::IntImm</text>
-<polyline fill="none" stroke="black" points="168,-237 318,-237 "/>
-<text text-anchor="middle" x="243" y="-225" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="168,-218 318,-218 "/>
-<text text-anchor="start" x="176" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">+ IntImm()</text>
-<text text-anchor="start" x="176" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="176" y="-184" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="168,-221 168,-300 318,-300 318,-221 168,-221"/>
+<text text-anchor="middle" x="243" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::IntImm</text>
+<polyline fill="none" stroke="black" points="168,-281 318,-281 "/>
+<text text-anchor="middle" x="243" y="-269" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="168,-262 318,-262 "/>
+<text text-anchor="start" x="176" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ IntImm()</text>
+<text text-anchor="start" x="176" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="176" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node5 -->
 <g id="edge4" class="edge"><title>Node3&#45;&gt;Node5</title>
-<path fill="none" stroke="midnightblue" d="M410.561,-318.074C383.526,-304.363 353.693,-288.586 327,-273 318.094,-267.8 308.832,-262.049 299.85,-256.277"/>
-<polygon fill="none" stroke="midnightblue" points="409.109,-321.262 419.613,-322.642 412.262,-315.012 409.109,-321.262"/>
-</g>
-<!-- Node7 -->
-<g id="node7" class="node"><title>Node7</title>
-<g id="a_node7"><a xlink:href="classtvm_1_1tir_1_1BufferLoad.html" target="_top" xlink:title="{tvm::tir::BufferLoad\n||+ BufferLoad()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
-<polygon fill="white" stroke="black" points="336,-177 336,-256 486,-256 486,-177 336,-177"/>
-<text text-anchor="middle" x="411" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::tir::BufferLoad</text>
-<polyline fill="none" stroke="black" points="336,-237 486,-237 "/>
-<text text-anchor="middle" x="411" y="-225" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="336,-218 486,-218 "/>
-<text text-anchor="start" x="344" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">+ BufferLoad()</text>
-<text text-anchor="start" x="344" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="344" y="-184" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
-</a>
-</g>
-</g>
-<!-- Node3&#45;&gt;Node7 -->
-<g id="edge6" class="edge"><title>Node3&#45;&gt;Node7</title>
-<path fill="none" stroke="midnightblue" d="M460.241,-300.447C451.397,-285.549 442.111,-269.907 434.017,-256.272"/>
-<polygon fill="none" stroke="midnightblue" points="457.27,-302.3 465.385,-309.112 463.29,-298.727 457.27,-302.3"/>
+<path fill="none" stroke="midnightblue" d="M410.561,-362.074C383.526,-348.363 353.693,-332.586 327,-317 318.094,-311.8 308.832,-306.049 299.85,-300.277"/>
+<polygon fill="none" stroke="midnightblue" points="409.109,-365.262 419.613,-366.642 412.262,-359.012 409.109,-365.262"/>
 </g>
 <!-- Node8 -->
 <g id="node8" class="node"><title>Node8</title>
-<g id="a_node8"><a xlink:href="classtvm_1_1tir_1_1StringImm.html" target="_top" xlink:title="{tvm::tir::StringImm\n||+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
-<polygon fill="white" stroke="black" points="504,-182.5 504,-250.5 654,-250.5 654,-182.5 504,-182.5"/>
-<text text-anchor="middle" x="579" y="-238.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::tir::StringImm</text>
-<polyline fill="none" stroke="black" points="504,-231.5 654,-231.5 "/>
-<text text-anchor="middle" x="579" y="-219.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="504,-212.5 654,-212.5 "/>
-<text text-anchor="start" x="512" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="512" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<g id="a_node8"><a xlink:href="classtvm_1_1tir_1_1BufferLoad.html" target="_top" xlink:title="{tvm::tir::BufferLoad\n||+ BufferLoad()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
+<polygon fill="white" stroke="black" points="336,-221 336,-300 486,-300 486,-221 336,-221"/>
+<text text-anchor="middle" x="411" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::tir::BufferLoad</text>
+<polyline fill="none" stroke="black" points="336,-281 486,-281 "/>
+<text text-anchor="middle" x="411" y="-269" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="336,-262 486,-262 "/>
+<text text-anchor="start" x="344" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ BufferLoad()</text>
+<text text-anchor="start" x="344" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="344" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node8 -->
 <g id="edge7" class="edge"><title>Node3&#45;&gt;Node8</title>
-<path fill="none" stroke="midnightblue" d="M529.825,-300.336C539.911,-283.346 550.567,-265.397 559.37,-250.567"/>
-<polygon fill="none" stroke="midnightblue" points="526.71,-298.727 524.615,-309.112 532.73,-302.3 526.71,-298.727"/>
+<path fill="none" stroke="midnightblue" d="M460.241,-344.447C451.397,-329.549 442.111,-313.907 434.017,-300.272"/>
+<polygon fill="none" stroke="midnightblue" points="457.27,-346.3 465.385,-353.112 463.29,-342.727 457.27,-346.3"/>
 </g>
 <!-- Node9 -->
 <g id="node9" class="node"><title>Node9</title>
-<g id="a_node9"><a xlink:href="classtvm_1_1tir_1_1Var.html" target="_top" xlink:title="a named variable in TVM ">
-<polygon fill="white" stroke="black" points="672,-160.5 672,-272.5 784,-272.5 784,-160.5 672,-160.5"/>
-<text text-anchor="middle" x="728" y="-260.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::tir::Var</text>
-<polyline fill="none" stroke="black" points="672,-253.5 784,-253.5 "/>
-<text text-anchor="middle" x="728" y="-241.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="672,-234.5 784,-234.5 "/>
-<text text-anchor="start" x="680" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Var()</text>
-<text text-anchor="start" x="680" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Var()</text>
-<text text-anchor="start" x="680" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Var()</text>
-<text text-anchor="start" x="680" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ copy_with_suffix()</text>
-<text text-anchor="start" x="680" y="-178.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="680" y="-167.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<g id="a_node9"><a xlink:href="classtvm_1_1tir_1_1StringImm.html" target="_top" xlink:title="{tvm::tir::StringImm\n||+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
+<polygon fill="white" stroke="black" points="504,-226.5 504,-294.5 654,-294.5 654,-226.5 504,-226.5"/>
+<text text-anchor="middle" x="579" y="-282.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::tir::StringImm</text>
+<polyline fill="none" stroke="black" points="504,-275.5 654,-275.5 "/>
+<text text-anchor="middle" x="579" y="-263.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="504,-256.5 654,-256.5 "/>
+<text text-anchor="start" x="512" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="512" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node9 -->
 <g id="edge8" class="edge"><title>Node3&#45;&gt;Node9</title>
-<path fill="none" stroke="midnightblue" d="M579.484,-320.581C606.9,-306.858 636.947,-290.441 663,-273 665.959,-271.019 668.935,-268.921 671.898,-266.747"/>
-<polygon fill="none" stroke="midnightblue" points="577.706,-317.556 570.297,-325.129 580.812,-323.829 577.706,-317.556"/>
+<path fill="none" stroke="midnightblue" d="M529.825,-344.336C539.911,-327.346 550.567,-309.397 559.37,-294.567"/>
+<polygon fill="none" stroke="midnightblue" points="526.71,-342.727 524.615,-353.112 532.73,-346.3 526.71,-342.727"/>
+</g>
+<!-- Node10 -->
+<g id="node10" class="node"><title>Node10</title>
+<g id="a_node10"><a xlink:href="classtvm_1_1tir_1_1Var.html" target="_top" xlink:title="a named variable in TVM ">
+<polygon fill="white" stroke="black" points="672,-204.5 672,-316.5 784,-316.5 784,-204.5 672,-204.5"/>
+<text text-anchor="middle" x="728" y="-304.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::tir::Var</text>
+<polyline fill="none" stroke="black" points="672,-297.5 784,-297.5 "/>
+<text text-anchor="middle" x="728" y="-285.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="672,-278.5 784,-278.5 "/>
+<text text-anchor="start" x="680" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Var()</text>
+<text text-anchor="start" x="680" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Var()</text>
+<text text-anchor="start" x="680" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Var()</text>
+<text text-anchor="start" x="680" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ copy_with_suffix()</text>
+<text text-anchor="start" x="680" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="680" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+</a>
+</g>
+</g>
+<!-- Node3&#45;&gt;Node10 -->
+<g id="edge9" class="edge"><title>Node3&#45;&gt;Node10</title>
+<path fill="none" stroke="midnightblue" d="M579.484,-364.581C606.9,-350.858 636.947,-334.441 663,-317 665.959,-315.019 668.935,-312.921 671.898,-310.747"/>
+<polygon fill="none" stroke="midnightblue" points="577.706,-361.556 570.297,-369.129 580.812,-367.829 577.706,-361.556"/>
 </g>
 <!-- Node6 -->
 <g id="node6" class="node"><title>Node6</title>
-<g id="a_node6"><a xlink:href="classtvm_1_1Integer.html" target="_top" xlink:title="Container of constant int that adds more constructors. ">
-<polygon fill="white" stroke="black" points="186.5,-0.5 186.5,-123.5 299.5,-123.5 299.5,-0.5 186.5,-0.5"/>
-<text text-anchor="middle" x="243" y="-111.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Integer</text>
-<polyline fill="none" stroke="black" points="186.5,-104.5 299.5,-104.5 "/>
-<text text-anchor="middle" x="243" y="-92.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="186.5,-85.5 299.5,-85.5 "/>
-<text text-anchor="start" x="194.5" y="-73.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="194.5" y="-62.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="194.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="194.5" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="194.5" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="194.5" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
-<text text-anchor="start" x="194.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator int64_t()</text>
+<g id="a_node6"><a xlink:href="classtvm_1_1Bool.html" target="_top" xlink:title="Boolean constant. ">
+<polygon fill="white" stroke="black" points="83,-33.5 83,-134.5 247,-134.5 247,-33.5 83,-33.5"/>
+<text text-anchor="middle" x="165" y="-122.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Bool</text>
+<polyline fill="none" stroke="black" points="83,-115.5 247,-115.5 "/>
+<text text-anchor="middle" x="165" y="-103.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="83,-96.5 247,-96.5 "/>
+<text text-anchor="start" x="91" y="-84.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Bool()</text>
+<text text-anchor="start" x="91" y="-73.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!()</text>
+<text text-anchor="start" x="91" y="-62.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator bool()</text>
+<text text-anchor="start" x="91" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_NOTNULLABLE</text>
+<text text-anchor="start" x="91" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">_OBJECT_REF_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node5&#45;&gt;Node6 -->
 <g id="edge5" class="edge"><title>Node5&#45;&gt;Node6</title>
-<path fill="none" stroke="midnightblue" d="M243,-166.507C243,-152.892 243,-137.943 243,-123.743"/>
-<polygon fill="none" stroke="midnightblue" points="239.5,-166.623 243,-176.623 246.5,-166.623 239.5,-166.623"/>
+<path fill="none" stroke="midnightblue" d="M221.559,-211.533C210.867,-187.614 197.95,-158.715 187.161,-134.578"/>
+<polygon fill="none" stroke="midnightblue" points="218.413,-213.072 225.689,-220.773 224.804,-210.215 218.413,-213.072"/>
 </g>
-<!-- Node10 -->
-<g id="node10" class="node"><title>Node10</title>
-<g id="a_node10"><a xlink:href="classtvm_1_1tir_1_1SizeVar.html" target="_top" xlink:title="a named variable represents a tensor index size ">
-<polygon fill="white" stroke="black" points="681.5,-17 681.5,-107 774.5,-107 774.5,-17 681.5,-17"/>
-<text text-anchor="middle" x="728" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::tir::SizeVar</text>
-<polyline fill="none" stroke="black" points="681.5,-88 774.5,-88 "/>
-<text text-anchor="middle" x="728" y="-76" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="681.5,-69 774.5,-69 "/>
-<text text-anchor="start" x="689.5" y="-57" font-family="Helvetica,sans-Serif" font-size="10.00">+ SizeVar()</text>
-<text text-anchor="start" x="689.5" y="-46" font-family="Helvetica,sans-Serif" font-size="10.00">+ SizeVar()</text>
-<text text-anchor="start" x="689.5" y="-35" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="689.5" y="-24" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<!-- Node7 -->
+<g id="node7" class="node"><title>Node7</title>
+<g id="a_node7"><a xlink:href="classtvm_1_1Integer.html" target="_top" xlink:title="Container of constant int that adds more constructors. ">
+<polygon fill="white" stroke="black" points="265.5,-0.5 265.5,-167.5 378.5,-167.5 378.5,-0.5 265.5,-0.5"/>
+<text text-anchor="middle" x="322" y="-155.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Integer</text>
+<polyline fill="none" stroke="black" points="265.5,-148.5 378.5,-148.5 "/>
+<text text-anchor="middle" x="322" y="-136.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="265.5,-129.5 378.5,-129.5 "/>
+<text text-anchor="start" x="273.5" y="-117.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
+<text text-anchor="start" x="273.5" y="-106.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
+<text text-anchor="start" x="273.5" y="-95.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
+<text text-anchor="start" x="273.5" y="-84.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
+<text text-anchor="start" x="273.5" y="-73.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
+<text text-anchor="start" x="273.5" y="-62.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
+<text text-anchor="start" x="273.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator int64_t()</text>
+<text text-anchor="start" x="273.5" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="273.5" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="273.5" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="273.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
 </a>
 </g>
 </g>
-<!-- Node9&#45;&gt;Node10 -->
-<g id="edge9" class="edge"><title>Node9&#45;&gt;Node10</title>
-<path fill="none" stroke="midnightblue" d="M728,-150.093C728,-135.709 728,-120.799 728,-107.468"/>
-<polygon fill="none" stroke="midnightblue" points="724.5,-150.444 728,-160.444 731.5,-150.444 724.5,-150.444"/>
+<!-- Node5&#45;&gt;Node7 -->
+<g id="edge6" class="edge"><title>Node5&#45;&gt;Node7</title>
+<path fill="none" stroke="midnightblue" d="M264.685,-211.601C270.867,-197.945 277.786,-182.662 284.62,-167.567"/>
+<polygon fill="none" stroke="midnightblue" points="261.469,-210.219 260.533,-220.773 267.845,-213.106 261.469,-210.219"/>
 </g>
-<!-- Node12 -->
-<g id="node12" class="node"><title>Node12</title>
-<g id="a_node12"><a xlink:href="classtvm_1_1BaseFunc.html" target="_top" xlink:title="Managed reference to BaseFuncNode. ">
-<polygon fill="white" stroke="black" points="802,-182.5 802,-250.5 952,-250.5 952,-182.5 802,-182.5"/>
-<text text-anchor="middle" x="877" y="-238.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseFunc</text>
-<polyline fill="none" stroke="black" points="802,-231.5 952,-231.5 "/>
-<text text-anchor="middle" x="877" y="-219.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="802,-212.5 952,-212.5 "/>
-<text text-anchor="start" x="810" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="810" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<!-- Node11 -->
+<g id="node11" class="node"><title>Node11</title>
+<g id="a_node11"><a xlink:href="classtvm_1_1tir_1_1SizeVar.html" target="_top" xlink:title="a named variable represents a tensor index size ">
+<polygon fill="white" stroke="black" points="681.5,-39 681.5,-129 774.5,-129 774.5,-39 681.5,-39"/>
+<text text-anchor="middle" x="728" y="-117" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::tir::SizeVar</text>
+<polyline fill="none" stroke="black" points="681.5,-110 774.5,-110 "/>
+<text text-anchor="middle" x="728" y="-98" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="681.5,-91 774.5,-91 "/>
+<text text-anchor="start" x="689.5" y="-79" font-family="Helvetica,sans-Serif" font-size="10.00">+ SizeVar()</text>
+<text text-anchor="start" x="689.5" y="-68" font-family="Helvetica,sans-Serif" font-size="10.00">+ SizeVar()</text>
+<text text-anchor="start" x="689.5" y="-57" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="689.5" y="-46" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
 </a>
 </g>
 </g>
-<!-- Node11&#45;&gt;Node12 -->
-<g id="edge11" class="edge"><title>Node11&#45;&gt;Node12</title>
-<path fill="none" stroke="midnightblue" d="M1905.4,-357.292C1690.83,-352.146 1134.8,-333.229 961,-273 946.136,-267.849 931.341,-259.46 918.404,-250.747"/>
-<polygon fill="none" stroke="midnightblue" points="1905.58,-360.797 1915.66,-357.534 1905.75,-353.799 1905.58,-360.797"/>
+<!-- Node10&#45;&gt;Node11 -->
+<g id="edge10" class="edge"><title>Node10&#45;&gt;Node11</title>
+<path fill="none" stroke="midnightblue" d="M728,-194.143C728,-172.438 728,-148.8 728,-129.09"/>
+<polygon fill="none" stroke="midnightblue" points="724.5,-194.287 728,-204.287 731.5,-194.287 724.5,-194.287"/>
 </g>
-<!-- Node15 -->
-<g id="node15" class="node"><title>Node15</title>
-<g id="a_node15"><a xlink:href="classtvm_1_1Constructor.html" target="_top" xlink:title="Managed reference to ConstructorNode. ">
-<polygon fill="white" stroke="black" points="970,-177 970,-256 1120,-256 1120,-177 970,-177"/>
-<text text-anchor="middle" x="1045" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Constructor</text>
-<polyline fill="none" stroke="black" points="970,-237 1120,-237 "/>
-<text text-anchor="middle" x="1045" y="-225" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="970,-218 1120,-218 "/>
-<text text-anchor="start" x="978" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">+ Constructor()</text>
-<text text-anchor="start" x="978" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="978" y="-184" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<!-- Node13 -->
+<g id="node13" class="node"><title>Node13</title>
+<g id="a_node13"><a xlink:href="classtvm_1_1BaseFunc.html" target="_top" xlink:title="Managed reference to BaseFuncNode. ">
+<polygon fill="white" stroke="black" points="802,-226.5 802,-294.5 952,-294.5 952,-226.5 802,-226.5"/>
+<text text-anchor="middle" x="877" y="-282.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseFunc</text>
+<polyline fill="none" stroke="black" points="802,-275.5 952,-275.5 "/>
+<text text-anchor="middle" x="877" y="-263.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="802,-256.5 952,-256.5 "/>
+<text text-anchor="start" x="810" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="810" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
-<!-- Node11&#45;&gt;Node15 -->
-<g id="edge14" class="edge"><title>Node11&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M1905.84,-355.697C1717.43,-347.552 1270.75,-323.407 1129,-273 1117.31,-268.842 1105.64,-262.721 1094.88,-256.047"/>
-<polygon fill="none" stroke="midnightblue" points="1905.83,-359.2 1915.97,-356.13 1906.13,-352.206 1905.83,-359.2"/>
+<!-- Node12&#45;&gt;Node13 -->
+<g id="edge12" class="edge"><title>Node12&#45;&gt;Node13</title>
+<path fill="none" stroke="midnightblue" d="M1905.4,-401.292C1690.83,-396.146 1134.8,-377.229 961,-317 946.136,-311.849 931.341,-303.46 918.404,-294.747"/>
+<polygon fill="none" stroke="midnightblue" points="1905.58,-404.797 1915.66,-401.534 1905.75,-397.799 1905.58,-404.797"/>
 </g>
 <!-- Node16 -->
 <g id="node16" class="node"><title>Node16</title>
-<g id="a_node16"><a xlink:href="classtvm_1_1GlobalVar.html" target="_top" xlink:title="Managed reference to GlobalVarNode. ">
-<polygon fill="white" stroke="black" points="1138,-177 1138,-256 1288,-256 1288,-177 1138,-177"/>
-<text text-anchor="middle" x="1213" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::GlobalVar</text>
-<polyline fill="none" stroke="black" points="1138,-237 1288,-237 "/>
-<text text-anchor="middle" x="1213" y="-225" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="1138,-218 1288,-218 "/>
-<text text-anchor="start" x="1146" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">+ GlobalVar()</text>
-<text text-anchor="start" x="1146" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="1146" y="-184" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<g id="a_node16"><a xlink:href="classtvm_1_1Constructor.html" target="_top" xlink:title="Managed reference to ConstructorNode. ">
+<polygon fill="white" stroke="black" points="970,-221 970,-300 1120,-300 1120,-221 970,-221"/>
+<text text-anchor="middle" x="1045" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Constructor</text>
+<polyline fill="none" stroke="black" points="970,-281 1120,-281 "/>
+<text text-anchor="middle" x="1045" y="-269" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="970,-262 1120,-262 "/>
+<text text-anchor="start" x="978" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ Constructor()</text>
+<text text-anchor="start" x="978" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="978" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
-<!-- Node11&#45;&gt;Node16 -->
-<g id="edge15" class="edge"><title>Node11&#45;&gt;Node16</title>
-<path fill="none" stroke="midnightblue" d="M1905.6,-353.311C1745.59,-341.85 1406.92,-313.57 1297,-273 1285.52,-268.763 1274.04,-262.694 1263.42,-256.111"/>
-<polygon fill="none" stroke="midnightblue" points="1905.65,-356.824 1915.87,-354.042 1906.15,-349.841 1905.65,-356.824"/>
+<!-- Node12&#45;&gt;Node16 -->
+<g id="edge15" class="edge"><title>Node12&#45;&gt;Node16</title>
+<path fill="none" stroke="midnightblue" d="M1905.84,-399.697C1717.43,-391.552 1270.75,-367.407 1129,-317 1117.31,-312.842 1105.64,-306.721 1094.88,-300.047"/>
+<polygon fill="none" stroke="midnightblue" points="1905.83,-403.2 1915.97,-400.13 1906.13,-396.206 1905.83,-403.2"/>
 </g>
 <!-- Node17 -->
 <g id="node17" class="node"><title>Node17</title>
-<g id="a_node17"><a xlink:href="classtvm_1_1Op.html" target="_top" xlink:title="Managed reference class to OpNode. ">
-<polygon fill="white" stroke="black" points="1306,-160.5 1306,-272.5 1394,-272.5 1394,-160.5 1306,-160.5"/>
-<text text-anchor="middle" x="1350" y="-260.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Op</text>
-<polyline fill="none" stroke="black" points="1306,-253.5 1394,-253.5 "/>
-<text text-anchor="middle" x="1350" y="-241.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="1306,-234.5 1394,-234.5 "/>
-<text text-anchor="start" x="1314" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Op()</text>
-<text text-anchor="start" x="1314" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Op()</text>
-<text text-anchor="start" x="1314" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="1314" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetAttr()</text>
-<text text-anchor="start" x="1314" y="-178.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
-<text text-anchor="start" x="1314" y="-167.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Get()</text>
+<g id="a_node17"><a xlink:href="classtvm_1_1GlobalVar.html" target="_top" xlink:title="Managed reference to GlobalVarNode. ">
+<polygon fill="white" stroke="black" points="1138,-221 1138,-300 1288,-300 1288,-221 1138,-221"/>
+<text text-anchor="middle" x="1213" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::GlobalVar</text>
+<polyline fill="none" stroke="black" points="1138,-281 1288,-281 "/>
+<text text-anchor="middle" x="1213" y="-269" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="1138,-262 1288,-262 "/>
+<text text-anchor="start" x="1146" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ GlobalVar()</text>
+<text text-anchor="start" x="1146" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="1146" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
-<!-- Node11&#45;&gt;Node17 -->
-<g id="edge16" class="edge"><title>Node11&#45;&gt;Node17</title>
-<path fill="none" stroke="midnightblue" d="M1905.54,-353.347C1764.22,-342.873 1488.9,-317.376 1403,-273 1399.92,-271.41 1396.92,-269.571 1394.02,-267.549"/>
-<polygon fill="none" stroke="midnightblue" points="1905.66,-356.865 1915.89,-354.105 1906.18,-349.884 1905.66,-356.865"/>
+<!-- Node12&#45;&gt;Node17 -->
+<g id="edge16" class="edge"><title>Node12&#45;&gt;Node17</title>
+<path fill="none" stroke="midnightblue" d="M1905.6,-397.311C1745.59,-385.85 1406.92,-357.57 1297,-317 1285.52,-312.763 1274.04,-306.694 1263.42,-300.111"/>
+<polygon fill="none" stroke="midnightblue" points="1905.65,-400.824 1915.87,-398.042 1906.15,-393.841 1905.65,-400.824"/>
 </g>
 <!-- Node18 -->
 <g id="node18" class="node"><title>Node18</title>
-<g id="a_node18"><a xlink:href="classtvm_1_1relay_1_1Call.html" target="_top" xlink:title="{tvm::relay::Call\n||+ Call()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
-<polygon fill="white" stroke="black" points="1412,-177 1412,-256 1562,-256 1562,-177 1412,-177"/>
-<text text-anchor="middle" x="1487" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::Call</text>
-<polyline fill="none" stroke="black" points="1412,-237 1562,-237 "/>
-<text text-anchor="middle" x="1487" y="-225" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="1412,-218 1562,-218 "/>
-<text text-anchor="start" x="1420" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">+ Call()</text>
-<text text-anchor="start" x="1420" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="1420" y="-184" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<g id="a_node18"><a xlink:href="classtvm_1_1Op.html" target="_top" xlink:title="Managed reference class to OpNode. ">
+<polygon fill="white" stroke="black" points="1306,-204.5 1306,-316.5 1394,-316.5 1394,-204.5 1306,-204.5"/>
+<text text-anchor="middle" x="1350" y="-304.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Op</text>
+<polyline fill="none" stroke="black" points="1306,-297.5 1394,-297.5 "/>
+<text text-anchor="middle" x="1350" y="-285.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="1306,-278.5 1394,-278.5 "/>
+<text text-anchor="start" x="1314" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Op()</text>
+<text text-anchor="start" x="1314" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Op()</text>
+<text text-anchor="start" x="1314" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="1314" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetAttr()</text>
+<text text-anchor="start" x="1314" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasAttr()</text>
+<text text-anchor="start" x="1314" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Get()</text>
 </a>
 </g>
 </g>
-<!-- Node11&#45;&gt;Node18 -->
-<g id="edge17" class="edge"><title>Node11&#45;&gt;Node18</title>
-<path fill="none" stroke="midnightblue" d="M1905.56,-351.147C1818.66,-340.969 1681.45,-318.779 1571,-273 1560.18,-268.516 1549.27,-262.578 1539.06,-256.253"/>
-<polygon fill="none" stroke="midnightblue" points="1905.31,-354.641 1915.64,-352.301 1906.1,-347.687 1905.31,-354.641"/>
+<!-- Node12&#45;&gt;Node18 -->
+<g id="edge17" class="edge"><title>Node12&#45;&gt;Node18</title>
+<path fill="none" stroke="midnightblue" d="M1905.54,-397.347C1764.22,-386.873 1488.9,-361.376 1403,-317 1399.92,-315.41 1396.92,-313.571 1394.02,-311.549"/>
+<polygon fill="none" stroke="midnightblue" points="1905.66,-400.865 1915.89,-398.105 1906.18,-393.884 1905.66,-400.865"/>
 </g>
 <!-- Node19 -->
 <g id="node19" class="node"><title>Node19</title>
-<g id="a_node19"><a xlink:href="classtvm_1_1relay_1_1Constant.html" target="_top" xlink:title="{tvm::relay::Constant\n||+ Constant()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
-<polygon fill="white" stroke="black" points="1580,-177 1580,-256 1730,-256 1730,-177 1580,-177"/>
-<text text-anchor="middle" x="1655" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::Constant</text>
-<polyline fill="none" stroke="black" points="1580,-237 1730,-237 "/>
-<text text-anchor="middle" x="1655" y="-225" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="1580,-218 1730,-218 "/>
-<text text-anchor="start" x="1588" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">+ Constant()</text>
-<text text-anchor="start" x="1588" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="1588" y="-184" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<g id="a_node19"><a xlink:href="classtvm_1_1relay_1_1Call.html" target="_top" xlink:title="{tvm::relay::Call\n||+ Call()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
+<polygon fill="white" stroke="black" points="1412,-221 1412,-300 1562,-300 1562,-221 1412,-221"/>
+<text text-anchor="middle" x="1487" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::Call</text>
+<polyline fill="none" stroke="black" points="1412,-281 1562,-281 "/>
+<text text-anchor="middle" x="1487" y="-269" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="1412,-262 1562,-262 "/>
+<text text-anchor="start" x="1420" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ Call()</text>
+<text text-anchor="start" x="1420" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="1420" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
-<!-- Node11&#45;&gt;Node19 -->
-<g id="edge18" class="edge"><title>Node11&#45;&gt;Node19</title>
-<path fill="none" stroke="midnightblue" d="M1906.16,-335.956C1856.24,-320.959 1792.59,-299.309 1739,-273 1728.96,-268.07 1718.69,-262.136 1708.93,-256.009"/>
-<polygon fill="none" stroke="midnightblue" points="1905.37,-339.373 1915.96,-338.866 1907.37,-332.663 1905.37,-339.373"/>
+<!-- Node12&#45;&gt;Node19 -->
+<g id="edge18" class="edge"><title>Node12&#45;&gt;Node19</title>
+<path fill="none" stroke="midnightblue" d="M1905.56,-395.147C1818.66,-384.969 1681.45,-362.779 1571,-317 1560.18,-312.516 1549.27,-306.578 1539.06,-300.253"/>
+<polygon fill="none" stroke="midnightblue" points="1905.31,-398.641 1915.64,-396.301 1906.1,-391.687 1905.31,-398.641"/>
 </g>
 <!-- Node20 -->
 <g id="node20" class="node"><title>Node20</title>
-<g id="a_node20"><a xlink:href="classtvm_1_1relay_1_1If.html" target="_top" xlink:title="{tvm::relay::If\n||+ If()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
-<polygon fill="white" stroke="black" points="1748,-177 1748,-256 1898,-256 1898,-177 1748,-177"/>
-<text text-anchor="middle" x="1823" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::If</text>
-<polyline fill="none" stroke="black" points="1748,-237 1898,-237 "/>
-<text text-anchor="middle" x="1823" y="-225" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="1748,-218 1898,-218 "/>
-<text text-anchor="start" x="1756" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">+ If()</text>
-<text text-anchor="start" x="1756" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="1756" y="-184" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<g id="a_node20"><a xlink:href="classtvm_1_1relay_1_1Constant.html" target="_top" xlink:title="{tvm::relay::Constant\n||+ Constant()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
+<polygon fill="white" stroke="black" points="1580,-221 1580,-300 1730,-300 1730,-221 1580,-221"/>
+<text text-anchor="middle" x="1655" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::Constant</text>
+<polyline fill="none" stroke="black" points="1580,-281 1730,-281 "/>
+<text text-anchor="middle" x="1655" y="-269" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="1580,-262 1730,-262 "/>
+<text text-anchor="start" x="1588" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ Constant()</text>
+<text text-anchor="start" x="1588" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="1588" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
-<!-- Node11&#45;&gt;Node20 -->
-<g id="edge19" class="edge"><title>Node11&#45;&gt;Node20</title>
-<path fill="none" stroke="midnightblue" d="M1943.87,-319.3C1920.44,-299.573 1892.25,-275.828 1868.99,-256.235"/>
-<polygon fill="none" stroke="midnightblue" points="1941.71,-322.059 1951.61,-325.825 1946.22,-316.705 1941.71,-322.059"/>
+<!-- Node12&#45;&gt;Node20 -->
+<g id="edge19" class="edge"><title>Node12&#45;&gt;Node20</title>
+<path fill="none" stroke="midnightblue" d="M1906.16,-379.956C1856.24,-364.959 1792.59,-343.309 1739,-317 1728.96,-312.07 1718.69,-306.136 1708.93,-300.009"/>
+<polygon fill="none" stroke="midnightblue" points="1905.37,-383.373 1915.96,-382.866 1907.37,-376.663 1905.37,-383.373"/>
 </g>
 <!-- Node21 -->
 <g id="node21" class="node"><title>Node21</title>
-<g id="a_node21"><a xlink:href="classtvm_1_1relay_1_1Let.html" target="_top" xlink:title="{tvm::relay::Let\n||+ Let()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
-<polygon fill="white" stroke="black" points="1916,-177 1916,-256 2066,-256 2066,-177 1916,-177"/>
-<text text-anchor="middle" x="1991" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::Let</text>
-<polyline fill="none" stroke="black" points="1916,-237 2066,-237 "/>
-<text text-anchor="middle" x="1991" y="-225" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="1916,-218 2066,-218 "/>
-<text text-anchor="start" x="1924" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">+ Let()</text>
-<text text-anchor="start" x="1924" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="1924" y="-184" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<g id="a_node21"><a xlink:href="classtvm_1_1relay_1_1If.html" target="_top" xlink:title="{tvm::relay::If\n||+ If()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
+<polygon fill="white" stroke="black" points="1748,-221 1748,-300 1898,-300 1898,-221 1748,-221"/>
+<text text-anchor="middle" x="1823" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::If</text>
+<polyline fill="none" stroke="black" points="1748,-281 1898,-281 "/>
+<text text-anchor="middle" x="1823" y="-269" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="1748,-262 1898,-262 "/>
+<text text-anchor="start" x="1756" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ If()</text>
+<text text-anchor="start" x="1756" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="1756" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
-<!-- Node11&#45;&gt;Node21 -->
-<g id="edge20" class="edge"><title>Node11&#45;&gt;Node21</title>
-<path fill="none" stroke="midnightblue" d="M1991,-315.655C1991,-296.698 1991,-274.636 1991,-256.235"/>
-<polygon fill="none" stroke="midnightblue" points="1987.5,-315.825 1991,-325.825 1994.5,-315.825 1987.5,-315.825"/>
+<!-- Node12&#45;&gt;Node21 -->
+<g id="edge20" class="edge"><title>Node12&#45;&gt;Node21</title>
+<path fill="none" stroke="midnightblue" d="M1943.87,-363.3C1920.44,-343.573 1892.25,-319.828 1868.99,-300.235"/>
+<polygon fill="none" stroke="midnightblue" points="1941.71,-366.059 1951.61,-369.825 1946.22,-360.705 1941.71,-366.059"/>
 </g>
 <!-- Node22 -->
 <g id="node22" class="node"><title>Node22</title>
-<g id="a_node22"><a xlink:href="classtvm_1_1relay_1_1Match.html" target="_top" xlink:title="{tvm::relay::Match\n||+ Match()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
-<polygon fill="white" stroke="black" points="2084,-177 2084,-256 2234,-256 2234,-177 2084,-177"/>
-<text text-anchor="middle" x="2159" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::Match</text>
-<polyline fill="none" stroke="black" points="2084,-237 2234,-237 "/>
-<text text-anchor="middle" x="2159" y="-225" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="2084,-218 2234,-218 "/>
-<text text-anchor="start" x="2092" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">+ Match()</text>
-<text text-anchor="start" x="2092" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="2092" y="-184" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<g id="a_node22"><a xlink:href="classtvm_1_1relay_1_1Let.html" target="_top" xlink:title="{tvm::relay::Let\n||+ Let()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
+<polygon fill="white" stroke="black" points="1916,-221 1916,-300 2066,-300 2066,-221 1916,-221"/>
+<text text-anchor="middle" x="1991" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::Let</text>
+<polyline fill="none" stroke="black" points="1916,-281 2066,-281 "/>
+<text text-anchor="middle" x="1991" y="-269" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="1916,-262 2066,-262 "/>
+<text text-anchor="start" x="1924" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ Let()</text>
+<text text-anchor="start" x="1924" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="1924" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
-<!-- Node11&#45;&gt;Node22 -->
-<g id="edge21" class="edge"><title>Node11&#45;&gt;Node22</title>
-<path fill="none" stroke="midnightblue" d="M2038.13,-319.3C2061.56,-299.573 2089.75,-275.828 2113.01,-256.235"/>
-<polygon fill="none" stroke="midnightblue" points="2035.78,-316.705 2030.39,-325.825 2040.29,-322.059 2035.78,-316.705"/>
+<!-- Node12&#45;&gt;Node22 -->
+<g id="edge21" class="edge"><title>Node12&#45;&gt;Node22</title>
+<path fill="none" stroke="midnightblue" d="M1991,-359.655C1991,-340.698 1991,-318.636 1991,-300.235"/>
+<polygon fill="none" stroke="midnightblue" points="1987.5,-359.825 1991,-369.825 1994.5,-359.825 1987.5,-359.825"/>
 </g>
 <!-- Node23 -->
 <g id="node23" class="node"><title>Node23</title>
-<g id="a_node23"><a xlink:href="classtvm_1_1relay_1_1RefCreate.html" target="_top" xlink:title="{tvm::relay::RefCreate\n||+ RefCreate()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
-<polygon fill="white" stroke="black" points="2252,-177 2252,-256 2402,-256 2402,-177 2252,-177"/>
-<text text-anchor="middle" x="2327" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::RefCreate</text>
-<polyline fill="none" stroke="black" points="2252,-237 2402,-237 "/>
-<text text-anchor="middle" x="2327" y="-225" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="2252,-218 2402,-218 "/>
-<text text-anchor="start" x="2260" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">+ RefCreate()</text>
-<text text-anchor="start" x="2260" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="2260" y="-184" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<g id="a_node23"><a xlink:href="classtvm_1_1relay_1_1Match.html" target="_top" xlink:title="{tvm::relay::Match\n||+ Match()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
+<polygon fill="white" stroke="black" points="2084,-221 2084,-300 2234,-300 2234,-221 2084,-221"/>
+<text text-anchor="middle" x="2159" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::Match</text>
+<polyline fill="none" stroke="black" points="2084,-281 2234,-281 "/>
+<text text-anchor="middle" x="2159" y="-269" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="2084,-262 2234,-262 "/>
+<text text-anchor="start" x="2092" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ Match()</text>
+<text text-anchor="start" x="2092" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="2092" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
-<!-- Node11&#45;&gt;Node23 -->
-<g id="edge22" class="edge"><title>Node11&#45;&gt;Node23</title>
-<path fill="none" stroke="midnightblue" d="M2075.84,-335.956C2125.76,-320.959 2189.41,-299.309 2243,-273 2253.04,-268.07 2263.31,-262.136 2273.07,-256.009"/>
-<polygon fill="none" stroke="midnightblue" points="2074.63,-332.663 2066.04,-338.866 2076.63,-339.373 2074.63,-332.663"/>
+<!-- Node12&#45;&gt;Node23 -->
+<g id="edge22" class="edge"><title>Node12&#45;&gt;Node23</title>
+<path fill="none" stroke="midnightblue" d="M2038.13,-363.3C2061.56,-343.573 2089.75,-319.828 2113.01,-300.235"/>
+<polygon fill="none" stroke="midnightblue" points="2035.78,-360.705 2030.39,-369.825 2040.29,-366.059 2035.78,-360.705"/>
 </g>
 <!-- Node24 -->
 <g id="node24" class="node"><title>Node24</title>
-<g id="a_node24"><a xlink:href="classtvm_1_1relay_1_1RefRead.html" target="_top" xlink:title="{tvm::relay::RefRead\n||+ RefRead()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
-<polygon fill="white" stroke="black" points="2420,-177 2420,-256 2570,-256 2570,-177 2420,-177"/>
-<text text-anchor="middle" x="2495" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::RefRead</text>
-<polyline fill="none" stroke="black" points="2420,-237 2570,-237 "/>
-<text text-anchor="middle" x="2495" y="-225" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="2420,-218 2570,-218 "/>
-<text text-anchor="start" x="2428" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">+ RefRead()</text>
-<text text-anchor="start" x="2428" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="2428" y="-184" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<g id="a_node24"><a xlink:href="classtvm_1_1relay_1_1RefCreate.html" target="_top" xlink:title="{tvm::relay::RefCreate\n||+ RefCreate()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
+<polygon fill="white" stroke="black" points="2252,-221 2252,-300 2402,-300 2402,-221 2252,-221"/>
+<text text-anchor="middle" x="2327" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::RefCreate</text>
+<polyline fill="none" stroke="black" points="2252,-281 2402,-281 "/>
+<text text-anchor="middle" x="2327" y="-269" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="2252,-262 2402,-262 "/>
+<text text-anchor="start" x="2260" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ RefCreate()</text>
+<text text-anchor="start" x="2260" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="2260" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
-<!-- Node11&#45;&gt;Node24 -->
-<g id="edge23" class="edge"><title>Node11&#45;&gt;Node24</title>
-<path fill="none" stroke="midnightblue" d="M2076.44,-351.147C2163.34,-340.969 2300.55,-318.779 2411,-273 2421.82,-268.516 2432.73,-262.578 2442.94,-256.253"/>
-<polygon fill="none" stroke="midnightblue" points="2075.9,-347.687 2066.36,-352.301 2076.69,-354.641 2075.9,-347.687"/>
+<!-- Node12&#45;&gt;Node24 -->
+<g id="edge23" class="edge"><title>Node12&#45;&gt;Node24</title>
+<path fill="none" stroke="midnightblue" d="M2075.84,-379.956C2125.76,-364.959 2189.41,-343.309 2243,-317 2253.04,-312.07 2263.31,-306.136 2273.07,-300.009"/>
+<polygon fill="none" stroke="midnightblue" points="2074.63,-376.663 2066.04,-382.866 2076.63,-383.373 2074.63,-376.663"/>
 </g>
 <!-- Node25 -->
 <g id="node25" class="node"><title>Node25</title>
-<g id="a_node25"><a xlink:href="classtvm_1_1relay_1_1RefWrite.html" target="_top" xlink:title="{tvm::relay::RefWrite\n||+ RefWrite()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
-<polygon fill="white" stroke="black" points="2588,-177 2588,-256 2738,-256 2738,-177 2588,-177"/>
-<text text-anchor="middle" x="2663" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::RefWrite</text>
-<polyline fill="none" stroke="black" points="2588,-237 2738,-237 "/>
-<text text-anchor="middle" x="2663" y="-225" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="2588,-218 2738,-218 "/>
-<text text-anchor="start" x="2596" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">+ RefWrite()</text>
-<text text-anchor="start" x="2596" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="2596" y="-184" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<g id="a_node25"><a xlink:href="classtvm_1_1relay_1_1RefRead.html" target="_top" xlink:title="{tvm::relay::RefRead\n||+ RefRead()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
+<polygon fill="white" stroke="black" points="2420,-221 2420,-300 2570,-300 2570,-221 2420,-221"/>
+<text text-anchor="middle" x="2495" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::RefRead</text>
+<polyline fill="none" stroke="black" points="2420,-281 2570,-281 "/>
+<text text-anchor="middle" x="2495" y="-269" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="2420,-262 2570,-262 "/>
+<text text-anchor="start" x="2428" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ RefRead()</text>
+<text text-anchor="start" x="2428" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="2428" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
-<!-- Node11&#45;&gt;Node25 -->
-<g id="edge24" class="edge"><title>Node11&#45;&gt;Node25</title>
-<path fill="none" stroke="midnightblue" d="M2076.34,-358.064C2193.42,-354.233 2408.71,-337.983 2579,-273 2590.27,-268.7 2601.56,-262.686 2612.05,-256.195"/>
-<polygon fill="none" stroke="midnightblue" points="2075.9,-354.575 2066.02,-358.378 2076.12,-361.572 2075.9,-354.575"/>
+<!-- Node12&#45;&gt;Node25 -->
+<g id="edge24" class="edge"><title>Node12&#45;&gt;Node25</title>
+<path fill="none" stroke="midnightblue" d="M2076.44,-395.147C2163.34,-384.969 2300.55,-362.779 2411,-317 2421.82,-312.516 2432.73,-306.578 2442.94,-300.253"/>
+<polygon fill="none" stroke="midnightblue" points="2075.9,-391.687 2066.36,-396.301 2076.69,-398.641 2075.9,-391.687"/>
 </g>
 <!-- Node26 -->
 <g id="node26" class="node"><title>Node26</title>
-<g id="a_node26"><a xlink:href="classtvm_1_1relay_1_1TempExpr.html" target="_top" xlink:title="{tvm::relay::TempExpr\n||+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
-<polygon fill="white" stroke="black" points="2756,-182.5 2756,-250.5 2906,-250.5 2906,-182.5 2756,-182.5"/>
-<text text-anchor="middle" x="2831" y="-238.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::TempExpr</text>
-<polyline fill="none" stroke="black" points="2756,-231.5 2906,-231.5 "/>
-<text text-anchor="middle" x="2831" y="-219.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="2756,-212.5 2906,-212.5 "/>
-<text text-anchor="start" x="2764" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="2764" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<g id="a_node26"><a xlink:href="classtvm_1_1relay_1_1RefWrite.html" target="_top" xlink:title="{tvm::relay::RefWrite\n||+ RefWrite()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
+<polygon fill="white" stroke="black" points="2588,-221 2588,-300 2738,-300 2738,-221 2588,-221"/>
+<text text-anchor="middle" x="2663" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::RefWrite</text>
+<polyline fill="none" stroke="black" points="2588,-281 2738,-281 "/>
+<text text-anchor="middle" x="2663" y="-269" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="2588,-262 2738,-262 "/>
+<text text-anchor="start" x="2596" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ RefWrite()</text>
+<text text-anchor="start" x="2596" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="2596" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
-<!-- Node11&#45;&gt;Node26 -->
-<g id="edge25" class="edge"><title>Node11&#45;&gt;Node26</title>
-<path fill="none" stroke="midnightblue" d="M2076.4,-354.309C2247.3,-344.103 2625.41,-317.187 2747,-273 2761.62,-267.687 2776.23,-259.36 2789.06,-250.757"/>
-<polygon fill="none" stroke="midnightblue" points="2075.96,-350.828 2066.19,-354.913 2076.38,-357.816 2075.96,-350.828"/>
+<!-- Node12&#45;&gt;Node26 -->
+<g id="edge25" class="edge"><title>Node12&#45;&gt;Node26</title>
+<path fill="none" stroke="midnightblue" d="M2076.34,-402.064C2193.42,-398.233 2408.71,-381.983 2579,-317 2590.27,-312.7 2601.56,-306.686 2612.05,-300.195"/>
+<polygon fill="none" stroke="midnightblue" points="2075.9,-398.575 2066.02,-402.378 2076.12,-405.572 2075.9,-398.575"/>
 </g>
 <!-- Node27 -->
 <g id="node27" class="node"><title>Node27</title>
-<g id="a_node27"><a xlink:href="classtvm_1_1relay_1_1Tuple.html" target="_top" xlink:title="{tvm::relay::Tuple\n||+ Tuple()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
-<polygon fill="white" stroke="black" points="2924,-177 2924,-256 3074,-256 3074,-177 2924,-177"/>
-<text text-anchor="middle" x="2999" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::Tuple</text>
-<polyline fill="none" stroke="black" points="2924,-237 3074,-237 "/>
-<text text-anchor="middle" x="2999" y="-225" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="2924,-218 3074,-218 "/>
-<text text-anchor="start" x="2932" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">+ Tuple()</text>
-<text text-anchor="start" x="2932" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="2932" y="-184" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<g id="a_node27"><a xlink:href="classtvm_1_1relay_1_1TempExpr.html" target="_top" xlink:title="{tvm::relay::TempExpr\n||+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
+<polygon fill="white" stroke="black" points="2756,-226.5 2756,-294.5 2906,-294.5 2906,-226.5 2756,-226.5"/>
+<text text-anchor="middle" x="2831" y="-282.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::TempExpr</text>
+<polyline fill="none" stroke="black" points="2756,-275.5 2906,-275.5 "/>
+<text text-anchor="middle" x="2831" y="-263.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="2756,-256.5 2906,-256.5 "/>
+<text text-anchor="start" x="2764" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="2764" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
-<!-- Node11&#45;&gt;Node27 -->
-<g id="edge26" class="edge"><title>Node11&#45;&gt;Node27</title>
-<path fill="none" stroke="midnightblue" d="M2076.18,-356.356C2274.41,-349.355 2761.42,-327.04 2915,-273 2926.71,-268.881 2938.38,-262.777 2949.14,-256.107"/>
-<polygon fill="none" stroke="midnightblue" points="2075.98,-352.861 2066.1,-356.707 2076.22,-359.856 2075.98,-352.861"/>
+<!-- Node12&#45;&gt;Node27 -->
+<g id="edge26" class="edge"><title>Node12&#45;&gt;Node27</title>
+<path fill="none" stroke="midnightblue" d="M2076.4,-398.309C2247.3,-388.103 2625.41,-361.187 2747,-317 2761.62,-311.687 2776.23,-303.36 2789.06,-294.757"/>
+<polygon fill="none" stroke="midnightblue" points="2075.96,-394.828 2066.19,-398.913 2076.38,-401.816 2075.96,-394.828"/>
 </g>
 <!-- Node28 -->
 <g id="node28" class="node"><title>Node28</title>
-<g id="a_node28"><a xlink:href="classtvm_1_1relay_1_1TupleGetItem.html" target="_top" xlink:title="{tvm::relay::TupleGetItem\n||+ TupleGetItem()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
-<polygon fill="white" stroke="black" points="3092,-177 3092,-256 3242,-256 3242,-177 3092,-177"/>
-<text text-anchor="middle" x="3167" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::TupleGetItem</text>
-<polyline fill="none" stroke="black" points="3092,-237 3242,-237 "/>
-<text text-anchor="middle" x="3167" y="-225" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="3092,-218 3242,-218 "/>
-<text text-anchor="start" x="3100" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">+ TupleGetItem()</text>
-<text text-anchor="start" x="3100" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="3100" y="-184" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<g id="a_node28"><a xlink:href="classtvm_1_1relay_1_1Tuple.html" target="_top" xlink:title="{tvm::relay::Tuple\n||+ Tuple()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
+<polygon fill="white" stroke="black" points="2924,-221 2924,-300 3074,-300 3074,-221 2924,-221"/>
+<text text-anchor="middle" x="2999" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::Tuple</text>
+<polyline fill="none" stroke="black" points="2924,-281 3074,-281 "/>
+<text text-anchor="middle" x="2999" y="-269" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="2924,-262 3074,-262 "/>
+<text text-anchor="start" x="2932" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ Tuple()</text>
+<text text-anchor="start" x="2932" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="2932" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
-<!-- Node11&#45;&gt;Node28 -->
-<g id="edge27" class="edge"><title>Node11&#45;&gt;Node28</title>
-<path fill="none" stroke="midnightblue" d="M2076.22,-357.771C2299.52,-353.684 2897.14,-336.916 3083,-273 3094.74,-268.964 3106.42,-262.898 3117.19,-256.238"/>
-<polygon fill="none" stroke="midnightblue" points="2076.13,-354.272 2066.2,-357.951 2076.26,-361.271 2076.13,-354.272"/>
+<!-- Node12&#45;&gt;Node28 -->
+<g id="edge27" class="edge"><title>Node12&#45;&gt;Node28</title>
+<path fill="none" stroke="midnightblue" d="M2076.18,-400.356C2274.41,-393.355 2761.42,-371.04 2915,-317 2926.71,-312.881 2938.38,-306.777 2949.14,-300.107"/>
+<polygon fill="none" stroke="midnightblue" points="2075.98,-396.861 2066.1,-400.707 2076.22,-403.856 2075.98,-396.861"/>
 </g>
 <!-- Node29 -->
 <g id="node29" class="node"><title>Node29</title>
-<g id="a_node29"><a xlink:href="classtvm_1_1relay_1_1Var.html" target="_top" xlink:title="{tvm::relay::Var\n||+ Var()\l+ Var()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
-<polygon fill="white" stroke="black" points="3260,-171.5 3260,-261.5 3410,-261.5 3410,-171.5 3260,-171.5"/>
-<text text-anchor="middle" x="3335" y="-249.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::Var</text>
-<polyline fill="none" stroke="black" points="3260,-242.5 3410,-242.5 "/>
-<text text-anchor="middle" x="3335" y="-230.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="3260,-223.5 3410,-223.5 "/>
-<text text-anchor="start" x="3268" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Var()</text>
-<text text-anchor="start" x="3268" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Var()</text>
-<text text-anchor="start" x="3268" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="3268" y="-178.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<g id="a_node29"><a xlink:href="classtvm_1_1relay_1_1TupleGetItem.html" target="_top" xlink:title="{tvm::relay::TupleGetItem\n||+ TupleGetItem()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
+<polygon fill="white" stroke="black" points="3092,-221 3092,-300 3242,-300 3242,-221 3092,-221"/>
+<text text-anchor="middle" x="3167" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::TupleGetItem</text>
+<polyline fill="none" stroke="black" points="3092,-281 3242,-281 "/>
+<text text-anchor="middle" x="3167" y="-269" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="3092,-262 3242,-262 "/>
+<text text-anchor="start" x="3100" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ TupleGetItem()</text>
+<text text-anchor="start" x="3100" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="3100" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
-<!-- Node11&#45;&gt;Node29 -->
-<g id="edge28" class="edge"><title>Node11&#45;&gt;Node29</title>
-<path fill="none" stroke="midnightblue" d="M2076.49,-358.814C2323.2,-357.391 3032.67,-346.813 3251,-273 3259.61,-270.089 3268.19,-266.071 3276.39,-261.515"/>
-<polygon fill="none" stroke="midnightblue" points="2076.13,-355.316 2066.15,-358.87 2076.17,-362.316 2076.13,-355.316"/>
-</g>
-<!-- Node13 -->
-<g id="node13" class="node"><title>Node13</title>
-<g id="a_node13"><a xlink:href="classtvm_1_1relay_1_1Function.html" target="_top" xlink:title="Managed reference to FunctionNode. ">
-<polygon fill="white" stroke="black" points="797,-11.5 797,-112.5 947,-112.5 947,-11.5 797,-11.5"/>
-<text text-anchor="middle" x="872" y="-100.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::Function</text>
-<polyline fill="none" stroke="black" points="797,-93.5 947,-93.5 "/>
-<text text-anchor="middle" x="872" y="-81.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="797,-74.5 947,-74.5 "/>
-<text text-anchor="start" x="805" y="-62.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Function()</text>
-<text text-anchor="start" x="805" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="805" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
-<text text-anchor="start" x="805" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="805" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">_COW_METHOD()</text>
+<!-- Node12&#45;&gt;Node29 -->
+<g id="edge28" class="edge"><title>Node12&#45;&gt;Node29</title>
+<path fill="none" stroke="midnightblue" d="M2076.22,-401.771C2299.52,-397.684 2897.14,-380.916 3083,-317 3094.74,-312.964 3106.42,-306.898 3117.19,-300.238"/>
+<polygon fill="none" stroke="midnightblue" points="2076.13,-398.272 2066.2,-401.951 2076.26,-405.271 2076.13,-398.272"/>
+</g>
+<!-- Node30 -->
+<g id="node30" class="node"><title>Node30</title>
+<g id="a_node30"><a xlink:href="classtvm_1_1relay_1_1Var.html" target="_top" xlink:title="{tvm::relay::Var\n||+ Var()\l+ Var()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
+<polygon fill="white" stroke="black" points="3260,-215.5 3260,-305.5 3410,-305.5 3410,-215.5 3260,-215.5"/>
+<text text-anchor="middle" x="3335" y="-293.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::Var</text>
+<polyline fill="none" stroke="black" points="3260,-286.5 3410,-286.5 "/>
+<text text-anchor="middle" x="3335" y="-274.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="3260,-267.5 3410,-267.5 "/>
+<text text-anchor="start" x="3268" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Var()</text>
+<text text-anchor="start" x="3268" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Var()</text>
+<text text-anchor="start" x="3268" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="3268" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
-<!-- Node12&#45;&gt;Node13 -->
-<g id="edge12" class="edge"><title>Node12&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M875.579,-172.17C874.97,-153.585 874.255,-131.77 873.624,-112.547"/>
-<polygon fill="none" stroke="midnightblue" points="872.089,-172.53 875.915,-182.41 879.085,-172.3 872.089,-172.53"/>
+<!-- Node12&#45;&gt;Node30 -->
+<g id="edge29" class="edge"><title>Node12&#45;&gt;Node30</title>
+<path fill="none" stroke="midnightblue" d="M2076.49,-402.814C2323.2,-401.391 3032.67,-390.813 3251,-317 3259.61,-314.089 3268.19,-310.071 3276.39,-305.515"/>
+<polygon fill="none" stroke="midnightblue" points="2076.13,-399.316 2066.15,-402.87 2076.17,-406.316 2076.13,-399.316"/>
 </g>
 <!-- Node14 -->
 <g id="node14" class="node"><title>Node14</title>
-<g id="a_node14"><a xlink:href="classtvm_1_1tir_1_1PrimFunc.html" target="_top" xlink:title="Managed reference to PrimFuncNode. ">
-<polygon fill="white" stroke="black" points="965,-11.5 965,-112.5 1115,-112.5 1115,-11.5 965,-11.5"/>
-<text text-anchor="middle" x="1040" y="-100.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::tir::PrimFunc</text>
-<polyline fill="none" stroke="black" points="965,-93.5 1115,-93.5 "/>
-<text text-anchor="middle" x="1040" y="-81.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="965,-74.5 1115,-74.5 "/>
-<text text-anchor="start" x="973" y="-62.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimFunc()</text>
+<g id="a_node14"><a xlink:href="classtvm_1_1relay_1_1Function.html" target="_top" xlink:title="Managed reference to FunctionNode. ">
+<polygon fill="white" stroke="black" points="797,-33.5 797,-134.5 947,-134.5 947,-33.5 797,-33.5"/>
+<text text-anchor="middle" x="872" y="-122.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::Function</text>
+<polyline fill="none" stroke="black" points="797,-115.5 947,-115.5 "/>
+<text text-anchor="middle" x="872" y="-103.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="797,-96.5 947,-96.5 "/>
+<text text-anchor="start" x="805" y="-84.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Function()</text>
+<text text-anchor="start" x="805" y="-73.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="805" y="-62.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<text text-anchor="start" x="805" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="805" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">_COW_METHOD()</text>
+</a>
+</g>
+</g>
+<!-- Node13&#45;&gt;Node14 -->
+<g id="edge13" class="edge"><title>Node13&#45;&gt;Node14</title>
+<path fill="none" stroke="midnightblue" d="M875.756,-216.095C875.048,-191.373 874.158,-160.305 873.422,-134.62"/>
+<polygon fill="none" stroke="midnightblue" points="872.263,-216.372 876.048,-226.267 879.26,-216.171 872.263,-216.372"/>
+</g>
+<!-- Node15 -->
+<g id="node15" class="node"><title>Node15</title>
+<g id="a_node15"><a xlink:href="classtvm_1_1tir_1_1PrimFunc.html" target="_top" xlink:title="Managed reference to PrimFuncNode. ">
+<polygon fill="white" stroke="black" points="965,-33.5 965,-134.5 1115,-134.5 1115,-33.5 965,-33.5"/>
+<text text-anchor="middle" x="1040" y="-122.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::tir::PrimFunc</text>
+<polyline fill="none" stroke="black" points="965,-115.5 1115,-115.5 "/>
+<text text-anchor="middle" x="1040" y="-103.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="965,-96.5 1115,-96.5 "/>
+<text text-anchor="start" x="973" y="-84.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimFunc()</text>
+<text text-anchor="start" x="973" y="-73.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="973" y="-62.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 <text text-anchor="start" x="973" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="973" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
-<text text-anchor="start" x="973" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="973" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">_COW_METHOD()</text>
+<text text-anchor="start" x="973" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">_COW_METHOD()</text>
 </a>
 </g>
 </g>
-<!-- Node12&#45;&gt;Node14 -->
-<g id="edge13" class="edge"><title>Node12&#45;&gt;Node14</title>
-<path fill="none" stroke="midnightblue" d="M919.749,-175.505C940.349,-156.232 965.253,-132.932 987.042,-112.547"/>
-<polygon fill="none" stroke="midnightblue" points="917.28,-173.022 912.369,-182.41 922.062,-178.134 917.28,-173.022"/>
+<!-- Node13&#45;&gt;Node15 -->
+<g id="edge14" class="edge"><title>Node13&#45;&gt;Node15</title>
+<path fill="none" stroke="midnightblue" d="M915.094,-218.719C938.558,-193.599 968.801,-161.223 993.65,-134.62"/>
+<polygon fill="none" stroke="midnightblue" points="912.311,-216.57 908.043,-226.267 917.427,-221.349 912.311,-216.57"/>
 </g>
 </g>
 </svg>
diff --git a/docs/doxygen/classtvm_1_1BaseFuncNode-members.html b/docs/doxygen/classtvm_1_1BaseFuncNode-members.html
index 1b5b309..5457815 100644
--- a/docs/doxygen/classtvm_1_1BaseFuncNode-members.html
+++ b/docs/doxygen/classtvm_1_1BaseFuncNode-members.html
@@ -100,13 +100,14 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
   <tr><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html#a4fd1a615179d1eb5748990e5de46d668">attrs</a></td><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html">tvm::BaseFuncNode</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html#a89bfd23e109a842d18240277ffaaa130">checked_type</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html">tvm::RelayExprNode</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html#ae30ca49a8b84288fbc21d5f312f02929">checked_type_</a></td><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html">tvm::RelayExprNode</a></td><td class="entry"><span class="mlabel">mutable</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html#a6f177158609cf9da9a4e0a9d3187e3d2">GetAttr</a>(const std::string &amp;attr_key, TObjectRef default_value=NullValue&lt; TObjectRef &gt;()) const </td><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html">tvm::BaseFuncNode</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html#a11694119d77e8d04a9fffd5e9a8b0766">HasNonzeroAttr</a>(const std::string &amp;attr_key) const </td><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html">tvm::BaseFuncNode</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html#a904ae50be0b72eab079bed93829c9563">span</a></td><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html">tvm::RelayExprNode</a></td><td class="entry"><span class="mlabel">mutable</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html#a577e46c2eda9aec1f8a8e48444d00fd2">TVM_DECLARE_BASE_OBJECT_INFO</a>(BaseFuncNode, RelayExprNode)</td><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html">tvm::BaseFuncNode</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html#a89eb638258551ea1ae2d0e578335474a">tvm::RelayExprNode::TVM_DECLARE_BASE_OBJECT_INFO</a>(RelayExprNode, BaseExprNode)</td><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html">tvm::RelayExprNode</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1BaseExprNode.html#a831794c879d47c30cdd9cefd4f05d533">tvm::BaseExprNode::TVM_DECLARE_BASE_OBJECT_INFO</a>(BaseExprNode, Object)</td><td class="entry"><a class="el" href="classtvm_1_1BaseExprNode.html">tvm::BaseExprNode</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html#a60c73bac632a728a2a669bb34a1c3008">type_as</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html">tvm::RelayExprNode</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html#a48c2541f7824bcbdf24e63a891f20e19">GetAttr</a>(const std::string &amp;attr_key, Optional&lt; TObjectRef &gt; default_value=Optional&lt; TObjectRef &gt;(nullptr)) const </td><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html">tvm::BaseFuncNode</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html#ab6b5ca0e4f080893e6295653e90f41a6">GetAttr</a>(const std::string &amp;attr_key, TObjectRef default_value) const </td><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html">tvm::BaseFuncNode</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html#a11694119d77e8d04a9fffd5e9a8b0766">HasNonzeroAttr</a>(const std::string &amp;attr_key) const </td><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html">tvm::BaseFuncNode</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html#a904ae50be0b72eab079bed93829c9563">span</a></td><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html">tvm::RelayExprNode</a></td><td class="entry"><span class="mlabel">mutable</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html#a577e46c2eda9aec1f8a8e48444d00fd2">TVM_DECLARE_BASE_OBJECT_INFO</a>(BaseFuncNode, RelayExprNode)</td><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html">tvm::BaseFuncNode</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html#a89eb638258551ea1ae2d0e578335474a">tvm::RelayExprNode::TVM_DECLARE_BASE_OBJECT_INFO</a>(RelayExprNode, BaseExprNode)</td><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html">tvm::RelayExprNode</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1BaseExprNode.html#a831794c879d47c30cdd9cefd4f05d533">tvm::BaseExprNode::TVM_DECLARE_BASE_OBJECT_INFO</a>(BaseExprNode, Object)</td><td class="entry"><a class="el" href="classtvm_1_1BaseExprNode.html">tvm::BaseExprNode</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html#a60c73bac632a728a2a669bb34a1c3008">type_as</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html">tvm::RelayExprNode</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/doxygen/classtvm_1_1BaseFuncNode.html b/docs/doxygen/classtvm_1_1BaseFuncNode.html
index b6257ba..16314b2 100644
--- a/docs/doxygen/classtvm_1_1BaseFuncNode.html
+++ b/docs/doxygen/classtvm_1_1BaseFuncNode.html
@@ -104,22 +104,25 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="dynheader">
 Inheritance diagram for tvm::BaseFuncNode:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1BaseFuncNode__inherit__graph.svg" width="582" height="868"><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_1BaseFuncNode__inherit__graph.svg" width="582" height="883"><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::BaseFuncNode:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1BaseFuncNode__coll__graph.svg" width="955" height="642"><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_1BaseFuncNode__coll__graph.svg" width="955" height="656"><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">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a6f177158609cf9da9a4e0a9d3187e3d2"><td class="memTemplParams" colspan="2">template&lt;typename TObjectRef &gt; </td></tr>
-<tr class="memitem:a6f177158609cf9da9a4e0a9d3187e3d2"><td class="memTemplItemLeft" align="right" valign="top">TObjectRef&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classtvm_1_1BaseFuncNode.html#a6f177158609cf9da9a4e0a9d3187e3d2">GetAttr</a> (const std::string &amp;attr_key, TObjectRef default_value=<a class="el" href="namespacetvm.html#ab6c242e8ac09beb463fba306948b7f15">NullValue</a>&lt; TObjectRef &gt;()) const </td></tr>
-<tr class="memdesc:a6f177158609cf9da9a4e0a9d3187e3d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a function attribute.  <a href="#a6f177158609cf9da9a4e0a9d3187e3d2">More...</a><br /></td></tr>
-<tr class="separator:a6f177158609cf9da9a4e0a9d3187e3d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a48c2541f7824bcbdf24e63a891f20e19"><td class="memTemplParams" colspan="2">template&lt;typename TObjectRef &gt; </td></tr>
+<tr class="memitem:a48c2541f7824bcbdf24e63a891f20e19"><td class="memTemplItemLeft" align="right" valign="top">Optional&lt; TObjectRef &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classtvm_1_1BaseFuncNode.html#a48c2541f7824bcbdf24e63a891f20e19">GetAttr</a> (const std::string &amp;attr_key, Optional&lt; TObjectRef &gt; default_value=Optional&lt; TObjectRef &gt;(nullptr)) const </td></tr>
+<tr class="memdesc:a48c2541f7824bcbdf24e63a891f20e19"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a function attribute.  <a href="#a48c2541f7824bcbdf24e63a891f20e19">More...</a><br /></td></tr>
+<tr class="separator:a48c2541f7824bcbdf24e63a891f20e19"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab6b5ca0e4f080893e6295653e90f41a6"><td class="memTemplParams" colspan="2">template&lt;typename TObjectRef &gt; </td></tr>
+<tr class="memitem:ab6b5ca0e4f080893e6295653e90f41a6"><td class="memTemplItemLeft" align="right" valign="top">Optional&lt; TObjectRef &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classtvm_1_1BaseFuncNode.html#ab6b5ca0e4f080893e6295653e90f41a6">GetAttr</a> (const std::string &amp;attr_key, TObjectRef default_value) const </td></tr>
+<tr class="separator:ab6b5ca0e4f080893e6295653e90f41a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a11694119d77e8d04a9fffd5e9a8b0766"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1BaseFuncNode.html#a11694119d77e8d04a9fffd5e9a8b0766">HasNonzeroAttr</a> (const std::string &amp;attr_key) const </td></tr>
 <tr class="memdesc:a11694119d77e8d04a9fffd5e9a8b0766"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check whether the function has an non-zero integer attr.  <a href="#a11694119d77e8d04a9fffd5e9a8b0766">More...</a><br /></td></tr>
 <tr class="separator:a11694119d77e8d04a9fffd5e9a8b0766"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -171,7 +174,7 @@ Static Public Attributes</h2></td></tr>
 <p>We support several variants of functions throughout the stack. All of the functions share the same type system(via checked_type) to support cross variant calls.</p>
 <dl class="section see"><dt>See also</dt><dd><a class="el" href="classtvm_1_1BaseFunc.html" title="Managed reference to BaseFuncNode. ">BaseFunc</a> </dd></dl>
 </div><h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a6f177158609cf9da9a4e0a9d3187e3d2"></a>
+<a class="anchor" id="a48c2541f7824bcbdf24e63a891f20e19"></a>
 <div class="memitem">
 <div class="memproto">
 <div class="memtemplate">
@@ -181,7 +184,7 @@ template&lt;typename TObjectRef &gt; </div>
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">TObjectRef tvm::BaseFuncNode::GetAttr </td>
+          <td class="memname">Optional&lt;TObjectRef&gt; tvm::BaseFuncNode::GetAttr </td>
           <td>(</td>
           <td class="paramtype">const std::string &amp;&#160;</td>
           <td class="paramname"><em>attr_key</em>, </td>
@@ -189,8 +192,8 @@ template&lt;typename TObjectRef &gt; </div>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype">TObjectRef&#160;</td>
-          <td class="paramname"><em>default_value</em> = <code><a class="el" href="namespacetvm.html#ab6c242e8ac09beb463fba306948b7f15">NullValue</a>&lt;TObjectRef&gt;()</code>&#160;</td>
+          <td class="paramtype">Optional&lt; TObjectRef &gt;&#160;</td>
+          <td class="paramname"><em>default_value</em> = <code>Optional&lt;TObjectRef&gt;(nullptr)</code>&#160;</td>
         </tr>
         <tr>
           <td></td>
@@ -226,7 +229,43 @@ template&lt;typename TObjectRef &gt; </div>
   </table>
   </dd>
 </dl>
-<div class="fragment"><div class="line"><span class="keywordtype">void</span> GetAttrExample(<span class="keyword">const</span> <a class="code" href="namespacetvm_1_1relay.html#acbaff2ae7feec23fea55e025a9cc1b76">BaseFunc</a>&amp; f) {</div><div class="line">  Integer value = f-&gt;GetAttr&lt;Integer&gt;(<span class="stringliteral">&quot;AttrKey&quot;</span>, 0);</div><div class="line">}</div></div><!-- fragment --> 
+<div class="fragment"><div class="line"><span class="keywordtype">void</span> GetAttrExample(<span class="keyword">const</span> <a class="code" href="namespacetvm_1_1relay.html#acbaff2ae7feec23fea55e025a9cc1b76">BaseFunc</a>&amp; f) {</div><div class="line">  <span class="keyword">auto</span> value = f-&gt;GetAttr&lt;Integer&gt;(<span class="stringliteral">&quot;AttrKey&quot;</span>, 0);</div><div class="line">}</div></div><!-- fragment --> 
+</div>
+</div>
+<a class="anchor" id="ab6b5ca0e4f080893e6295653e90f41a6"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename TObjectRef &gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">Optional&lt;TObjectRef&gt; tvm::BaseFuncNode::GetAttr </td>
+          <td>(</td>
+          <td class="paramtype">const std::string &amp;&#160;</td>
+          <td class="paramname"><em>attr_key</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">TObjectRef&#160;</td>
+          <td class="paramname"><em>default_value</em>&#160;</td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
 </div>
 </div>
 <a class="anchor" id="a11694119d77e8d04a9fffd5e9a8b0766"></a>
diff --git a/docs/doxygen/classtvm_1_1BaseFuncNode__coll__graph.svg b/docs/doxygen/classtvm_1_1BaseFuncNode__coll__graph.svg
index e7e7907..3a38a0d 100644
--- a/docs/doxygen/classtvm_1_1BaseFuncNode__coll__graph.svg
+++ b/docs/doxygen/classtvm_1_1BaseFuncNode__coll__graph.svg
@@ -4,18 +4,19 @@
 <!-- Generated by graphviz version 2.38.0 (20140413.2041)
  -->
 <!-- Title: tvm::BaseFuncNode Pages: 1 -->
-<svg width="716pt" height="481pt"
- viewBox="0.00 0.00 716.00 481.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 477)">
+<svg width="716pt" height="492pt"
+ viewBox="0.00 0.00 716.00 492.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 488)">
 <title>tvm::BaseFuncNode</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-477 712,-477 712,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-488 712,-488 712,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node"><title>Node1</title>
-<polygon fill="#bfbfbf" stroke="black" points="278,-0.5 278,-79.5 482,-79.5 482,-0.5 278,-0.5"/>
-<text text-anchor="middle" x="380" y="-67.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseFuncNode</text>
-<polyline fill="none" stroke="black" points="278,-60.5 482,-60.5 "/>
-<text text-anchor="start" x="286" y="-48.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<polyline fill="none" stroke="black" points="278,-41.5 482,-41.5 "/>
+<polygon fill="#bfbfbf" stroke="black" points="278,-0.5 278,-90.5 482,-90.5 482,-0.5 278,-0.5"/>
+<text text-anchor="middle" x="380" y="-78.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseFuncNode</text>
+<polyline fill="none" stroke="black" points="278,-71.5 482,-71.5 "/>
+<text text-anchor="start" x="286" y="-59.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<polyline fill="none" stroke="black" points="278,-52.5 482,-52.5 "/>
+<text text-anchor="start" x="286" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetAttr()</text>
 <text text-anchor="start" x="286" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetAttr()</text>
 <text text-anchor="start" x="286" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasNonzeroAttr()</text>
 <text text-anchor="start" x="286" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_INFO()</text>
@@ -23,158 +24,158 @@
 <!-- Node2 -->
 <g id="node2" class="node"><title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1RelayExprNode.html" target="_top" xlink:title="Base node of all non&#45;primitive expressions. ">
-<polygon fill="white" stroke="black" points="222,-138.5 222,-217.5 426,-217.5 426,-138.5 222,-138.5"/>
-<text text-anchor="middle" x="324" y="-205.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::RelayExprNode</text>
-<polyline fill="none" stroke="black" points="222,-198.5 426,-198.5 "/>
-<text text-anchor="start" x="230" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<polyline fill="none" stroke="black" points="222,-179.5 426,-179.5 "/>
-<text text-anchor="start" x="230" y="-167.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ checked_type()</text>
-<text text-anchor="start" x="230" y="-156.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ type_as()</text>
-<text text-anchor="start" x="230" y="-145.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_INFO()</text>
+<polygon fill="white" stroke="black" points="222,-149.5 222,-228.5 426,-228.5 426,-149.5 222,-149.5"/>
+<text text-anchor="middle" x="324" y="-216.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::RelayExprNode</text>
+<polyline fill="none" stroke="black" points="222,-209.5 426,-209.5 "/>
+<text text-anchor="start" x="230" y="-197.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<polyline fill="none" stroke="black" points="222,-190.5 426,-190.5 "/>
+<text text-anchor="start" x="230" y="-178.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ checked_type()</text>
+<text text-anchor="start" x="230" y="-167.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ type_as()</text>
+<text text-anchor="start" x="230" y="-156.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_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="M343.727,-129.092C350.387,-112.917 357.733,-95.0765 364.063,-79.7049"/>
-<polygon fill="none" stroke="midnightblue" points="340.469,-127.812 339.898,-138.392 346.941,-130.477 340.469,-127.812"/>
+<path fill="none" stroke="midnightblue" d="M343.122,-139.684C349.415,-123.781 356.377,-106.191 362.54,-90.6168"/>
+<polygon fill="none" stroke="midnightblue" points="339.728,-138.748 339.302,-149.335 346.237,-141.324 339.728,-138.748"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node"><title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1BaseExprNode.html" target="_top" xlink:title="Base type of all the expressions. ">
-<polygon fill="white" stroke="black" points="0,-276.5 0,-377.5 204,-377.5 204,-276.5 0,-276.5"/>
-<text text-anchor="middle" x="102" y="-365.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseExprNode</text>
-<polyline fill="none" stroke="black" points="0,-358.5 204,-358.5 "/>
-<text text-anchor="start" x="8" y="-346.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<text text-anchor="start" x="8" y="-335.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_sequal</text>
-<text text-anchor="start" x="8" y="-324.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
-<text text-anchor="start" x="8" y="-313.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_shash</text>
-<text text-anchor="start" x="8" y="-302.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
-<polyline fill="none" stroke="black" points="0,-295.5 204,-295.5 "/>
-<text text-anchor="start" x="8" y="-283.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_INFO()</text>
+<polygon fill="white" stroke="black" points="0,-287.5 0,-388.5 204,-388.5 204,-287.5 0,-287.5"/>
+<text text-anchor="middle" x="102" y="-376.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseExprNode</text>
+<polyline fill="none" stroke="black" points="0,-369.5 204,-369.5 "/>
+<text text-anchor="start" x="8" y="-357.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<text text-anchor="start" x="8" y="-346.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_sequal</text>
+<text text-anchor="start" x="8" y="-335.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
+<text text-anchor="start" x="8" y="-324.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_shash</text>
+<text text-anchor="start" x="8" y="-313.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
+<polyline fill="none" stroke="black" points="0,-306.5 204,-306.5 "/>
+<text text-anchor="start" x="8" y="-294.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_INFO()</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="M185.428,-270.757C212.123,-253.081 241.089,-233.9 265.603,-217.668"/>
-<polygon fill="none" stroke="midnightblue" points="183.255,-267.998 176.85,-276.437 187.12,-273.835 183.255,-267.998"/>
+<path fill="none" stroke="midnightblue" d="M185.428,-281.757C212.123,-264.081 241.089,-244.9 265.603,-228.668"/>
+<polygon fill="none" stroke="midnightblue" points="183.255,-278.998 176.85,-287.437 187.12,-284.835 183.255,-278.998"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node"><title>Node4</title>
-<polygon fill="white" stroke="#bfbfbf" points="78.5,-415.5 78.5,-472.5 125.5,-472.5 125.5,-415.5 78.5,-415.5"/>
-<text text-anchor="middle" x="102" y="-460.5" font-family="Helvetica,sans-Serif" font-size="10.00">Object</text>
-<polyline fill="none" stroke="#bfbfbf" points="78.5,-453.5 125.5,-453.5 "/>
-<text text-anchor="middle" x="102" y="-441.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="#bfbfbf" points="78.5,-434.5 125.5,-434.5 "/>
-<text text-anchor="middle" x="102" y="-422.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polygon fill="white" stroke="#bfbfbf" points="78.5,-426.5 78.5,-483.5 125.5,-483.5 125.5,-426.5 78.5,-426.5"/>
+<text text-anchor="middle" x="102" y="-471.5" font-family="Helvetica,sans-Serif" font-size="10.00">Object</text>
+<polyline fill="none" stroke="#bfbfbf" points="78.5,-464.5 125.5,-464.5 "/>
+<text text-anchor="middle" x="102" y="-452.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="#bfbfbf" points="78.5,-445.5 125.5,-445.5 "/>
+<text text-anchor="middle" x="102" y="-433.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
 </g>
 <!-- Node4&#45;&gt;Node3 -->
 <g id="edge3" class="edge"><title>Node4&#45;&gt;Node3</title>
-<path fill="none" stroke="midnightblue" d="M102,-405.187C102,-396.435 102,-386.99 102,-377.812"/>
-<polygon fill="none" stroke="midnightblue" points="98.5001,-405.455 102,-415.455 105.5,-405.455 98.5001,-405.455"/>
+<path fill="none" stroke="midnightblue" d="M102,-416.187C102,-407.435 102,-397.99 102,-388.812"/>
+<polygon fill="none" stroke="midnightblue" points="98.5001,-416.455 102,-426.455 105.5,-416.455 98.5001,-416.455"/>
 </g>
 <!-- Node5 -->
 <g id="node5" class="node"><title>Node5</title>
 <g id="a_node5"><a xlink:href="classtvm_1_1Span.html" target="_top" xlink:title="{tvm::Span\n||+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
-<polygon fill="white" stroke="black" points="222,-293 222,-361 372,-361 372,-293 222,-293"/>
-<text text-anchor="middle" x="297" y="-349" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Span</text>
-<polyline fill="none" stroke="black" points="222,-342 372,-342 "/>
-<text text-anchor="middle" x="297" y="-330" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="222,-323 372,-323 "/>
-<text text-anchor="start" x="230" y="-311" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="230" y="-300" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="222,-304 222,-372 372,-372 372,-304 222,-304"/>
+<text text-anchor="middle" x="297" y="-360" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Span</text>
+<polyline fill="none" stroke="black" points="222,-353 372,-353 "/>
+<text text-anchor="middle" x="297" y="-341" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="222,-334 372,-334 "/>
+<text text-anchor="start" x="230" y="-322" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="230" y="-311" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node5&#45;&gt;Node2 -->
 <g id="edge4" class="edge"><title>Node5&#45;&gt;Node2</title>
-<path fill="none" stroke="#404040" d="M303.127,-292.643C306.547,-274.02 310.879,-250.436 314.709,-229.586"/>
-<polygon fill="none" stroke="#404040" points="314.727,-229.487 311.877,-222.863 316.895,-217.684 319.745,-224.308 314.727,-229.487"/>
-<text text-anchor="middle" x="329.5" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00"> +span</text>
+<path fill="none" stroke="#404040" d="M303.127,-303.643C306.547,-285.02 310.879,-261.436 314.709,-240.586"/>
+<polygon fill="none" stroke="#404040" points="314.727,-240.487 311.877,-233.863 316.895,-228.684 319.745,-235.308 314.727,-240.487"/>
+<text text-anchor="middle" x="329.5" y="-261" font-family="Helvetica,sans-Serif" font-size="10.00"> +span</text>
 </g>
 <!-- Node6 -->
 <g id="node6" class="node"><title>Node6</title>
-<polygon fill="white" stroke="#bfbfbf" points="434,-415.5 434,-472.5 496,-472.5 496,-415.5 434,-415.5"/>
-<text text-anchor="middle" x="465" y="-460.5" font-family="Helvetica,sans-Serif" font-size="10.00">ObjectRef</text>
-<polyline fill="none" stroke="#bfbfbf" points="434,-453.5 496,-453.5 "/>
-<text text-anchor="middle" x="465" y="-441.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="#bfbfbf" points="434,-434.5 496,-434.5 "/>
-<text text-anchor="middle" x="465" y="-422.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polygon fill="white" stroke="#bfbfbf" points="434,-426.5 434,-483.5 496,-483.5 496,-426.5 434,-426.5"/>
+<text text-anchor="middle" x="465" y="-471.5" font-family="Helvetica,sans-Serif" font-size="10.00">ObjectRef</text>
+<polyline fill="none" stroke="#bfbfbf" points="434,-464.5 496,-464.5 "/>
+<text text-anchor="middle" x="465" y="-452.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="#bfbfbf" points="434,-445.5 496,-445.5 "/>
+<text text-anchor="middle" x="465" y="-433.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
 </g>
 <!-- Node6&#45;&gt;Node5 -->
 <g id="edge5" class="edge"><title>Node6&#45;&gt;Node5</title>
-<path fill="none" stroke="midnightblue" d="M425.287,-415.815C401.305,-399.399 370.58,-378.367 345.211,-361.001"/>
-<polygon fill="none" stroke="midnightblue" points="423.565,-418.878 433.794,-421.639 427.519,-413.102 423.565,-418.878"/>
+<path fill="none" stroke="midnightblue" d="M425.287,-426.815C401.305,-410.399 370.58,-389.367 345.211,-372.001"/>
+<polygon fill="none" stroke="midnightblue" points="423.565,-429.878 433.794,-432.639 427.519,-424.102 423.565,-429.878"/>
 </g>
 <!-- Node7 -->
 <g id="node7" class="node"><title>Node7</title>
 <g id="a_node7"><a xlink:href="classtvm_1_1Type.html" target="_top" xlink:title="Managed reference to TypeNode. ">
-<polygon fill="white" stroke="black" points="390,-293 390,-361 540,-361 540,-293 390,-293"/>
-<text text-anchor="middle" x="465" y="-349" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Type</text>
-<polyline fill="none" stroke="black" points="390,-342 540,-342 "/>
-<text text-anchor="middle" x="465" y="-330" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="390,-323 540,-323 "/>
-<text text-anchor="start" x="398" y="-311" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="398" y="-300" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="390,-304 390,-372 540,-372 540,-304 390,-304"/>
+<text text-anchor="middle" x="465" y="-360" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Type</text>
+<polyline fill="none" stroke="black" points="390,-353 540,-353 "/>
+<text text-anchor="middle" x="465" y="-341" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="390,-334 540,-334 "/>
+<text text-anchor="start" x="398" y="-322" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="398" y="-311" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node6&#45;&gt;Node7 -->
 <g id="edge7" class="edge"><title>Node6&#45;&gt;Node7</title>
-<path fill="none" stroke="midnightblue" d="M465,-405.424C465,-391.11 465,-374.916 465,-361.052"/>
-<polygon fill="none" stroke="midnightblue" points="461.5,-405.455 465,-415.455 468.5,-405.455 461.5,-405.455"/>
+<path fill="none" stroke="midnightblue" d="M465,-416.424C465,-402.11 465,-385.916 465,-372.052"/>
+<polygon fill="none" stroke="midnightblue" points="461.5,-416.455 465,-426.455 468.5,-416.455 461.5,-416.455"/>
 </g>
 <!-- Node9 -->
 <g id="node9" class="node"><title>Node9</title>
 <g id="a_node9"><a xlink:href="classtvm_1_1Attrs.html" target="_top" xlink:title="Managed reference to BaseAttrsNode. ">
-<polygon fill="white" stroke="black" points="558,-293 558,-361 708,-361 708,-293 558,-293"/>
-<text text-anchor="middle" x="633" y="-349" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Attrs</text>
-<polyline fill="none" stroke="black" points="558,-342 708,-342 "/>
-<text text-anchor="middle" x="633" y="-330" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="558,-323 708,-323 "/>
-<text text-anchor="start" x="566" y="-311" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="566" y="-300" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="558,-304 558,-372 708,-372 708,-304 558,-304"/>
+<text text-anchor="middle" x="633" y="-360" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Attrs</text>
+<polyline fill="none" stroke="black" points="558,-353 708,-353 "/>
+<text text-anchor="middle" x="633" y="-341" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="558,-334 708,-334 "/>
+<text text-anchor="start" x="566" y="-322" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="566" y="-311" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node6&#45;&gt;Node9 -->
 <g id="edge10" class="edge"><title>Node6&#45;&gt;Node9</title>
-<path fill="none" stroke="midnightblue" d="M504.713,-415.815C528.695,-399.399 559.42,-378.367 584.789,-361.001"/>
-<polygon fill="none" stroke="midnightblue" points="502.481,-413.102 496.206,-421.639 506.435,-418.878 502.481,-413.102"/>
+<path fill="none" stroke="midnightblue" d="M504.713,-426.815C528.695,-410.399 559.42,-389.367 584.789,-372.001"/>
+<polygon fill="none" stroke="midnightblue" points="502.481,-424.102 496.206,-432.639 506.435,-429.878 502.481,-424.102"/>
 </g>
 <!-- Node7&#45;&gt;Node2 -->
 <g id="edge6" class="edge"><title>Node7&#45;&gt;Node2</title>
-<path fill="none" stroke="#404040" d="M433.005,-292.643C414.223,-273.063 390.183,-247.999 369.459,-226.394"/>
-<polygon fill="none" stroke="#404040" points="369.412,-226.344 362.372,-224.783 361.105,-217.684 368.145,-219.245 369.412,-226.344"/>
-<text text-anchor="middle" x="440.5" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00"> +checked_type_</text>
+<path fill="none" stroke="#404040" d="M433.005,-303.643C414.223,-284.063 390.183,-258.999 369.459,-237.394"/>
+<polygon fill="none" stroke="#404040" points="369.412,-237.344 362.372,-235.783 361.105,-228.684 368.145,-230.245 369.412,-237.344"/>
+<text text-anchor="middle" x="440.5" y="-261" font-family="Helvetica,sans-Serif" font-size="10.00"> +checked_type_</text>
 </g>
 <!-- Node8 -->
 <g id="node8" class="node"><title>Node8</title>
 <g id="a_node8"><a xlink:href="classtvm_1_1DictAttrs.html" target="_top" xlink:title="Managed reference to DictAttrsNode. ">
-<polygon fill="white" stroke="black" points="479,-127.5 479,-228.5 629,-228.5 629,-127.5 479,-127.5"/>
-<text text-anchor="middle" x="554" y="-216.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::DictAttrs</text>
-<polyline fill="none" stroke="black" points="479,-209.5 629,-209.5 "/>
-<text text-anchor="middle" x="554" y="-197.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="479,-190.5 629,-190.5 "/>
-<text text-anchor="start" x="487" y="-178.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ DictAttrs()</text>
-<text text-anchor="start" x="487" y="-167.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="487" y="-156.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
-<text text-anchor="start" x="487" y="-145.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="487" y="-134.5" font-family="Helvetica,sans-Serif" font-size="10.00">_COW_METHOD()</text>
+<polygon fill="white" stroke="black" points="479,-138.5 479,-239.5 629,-239.5 629,-138.5 479,-138.5"/>
+<text text-anchor="middle" x="554" y="-227.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::DictAttrs</text>
+<polyline fill="none" stroke="black" points="479,-220.5 629,-220.5 "/>
+<text text-anchor="middle" x="554" y="-208.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="479,-201.5 629,-201.5 "/>
+<text text-anchor="start" x="487" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ DictAttrs()</text>
+<text text-anchor="start" x="487" y="-178.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="487" y="-167.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<text text-anchor="start" x="487" y="-156.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="487" y="-145.5" font-family="Helvetica,sans-Serif" font-size="10.00">_COW_METHOD()</text>
 </a>
 </g>
 </g>
 <!-- Node8&#45;&gt;Node1 -->
 <g id="edge8" class="edge"><title>Node8&#45;&gt;Node1</title>
-<path fill="none" stroke="#404040" d="M490.197,-127.131C473.414,-114.013 455.388,-99.9238 438.876,-87.0184"/>
-<polygon fill="none" stroke="#404040" points="438.805,-86.9628 431.615,-86.4194 429.351,-79.5729 436.541,-80.1163 438.805,-86.9628"/>
-<text text-anchor="middle" x="484" y="-101" font-family="Helvetica,sans-Serif" font-size="10.00"> +attrs</text>
+<path fill="none" stroke="#404040" d="M492.654,-138.112C476.854,-125.263 459.814,-111.406 443.888,-98.4551"/>
+<polygon fill="none" stroke="#404040" points="443.447,-98.0965 436.268,-97.4143 434.137,-90.5253 441.316,-91.2075 443.447,-98.0965"/>
+<text text-anchor="middle" x="484" y="-112" font-family="Helvetica,sans-Serif" font-size="10.00"> +attrs</text>
 </g>
 <!-- Node9&#45;&gt;Node8 -->
 <g id="edge9" class="edge"><title>Node9&#45;&gt;Node8</title>
-<path fill="none" stroke="midnightblue" d="M610.131,-283.446C600.931,-266.327 590.258,-246.468 580.705,-228.692"/>
-<polygon fill="none" stroke="midnightblue" points="607.257,-285.492 615.074,-292.643 613.423,-282.178 607.257,-285.492"/>
+<path fill="none" stroke="midnightblue" d="M610.131,-294.446C600.931,-277.327 590.258,-257.468 580.705,-239.692"/>
+<polygon fill="none" stroke="midnightblue" points="607.257,-296.492 615.074,-303.643 613.423,-293.178 607.257,-296.492"/>
 </g>
 </g>
 </svg>
diff --git a/docs/doxygen/classtvm_1_1BaseFuncNode__inherit__graph.svg b/docs/doxygen/classtvm_1_1BaseFuncNode__inherit__graph.svg
index 657620d..85de3c1 100644
--- a/docs/doxygen/classtvm_1_1BaseFuncNode__inherit__graph.svg
+++ b/docs/doxygen/classtvm_1_1BaseFuncNode__inherit__graph.svg
@@ -4,19 +4,20 @@
 <!-- Generated by graphviz version 2.38.0 (20140413.2041)
  -->
 <!-- Title: tvm::BaseFuncNode Pages: 1 -->
-<svg width="436pt" height="651pt"
- viewBox="0.00 0.00 436.00 651.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 647)">
+<svg width="436pt" height="662pt"
+ viewBox="0.00 0.00 436.00 662.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 658)">
 <title>tvm::BaseFuncNode</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-647 432,-647 432,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-658 432,-658 432,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node"><title>Node1</title>
-<polygon fill="#bfbfbf" stroke="black" points="111.5,-182.5 111.5,-272.5 315.5,-272.5 315.5,-182.5 111.5,-182.5"/>
-<text text-anchor="middle" x="213.5" y="-260.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseFuncNode</text>
-<polyline fill="none" stroke="black" points="111.5,-253.5 315.5,-253.5 "/>
-<text text-anchor="start" x="119.5" y="-241.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ attrs</text>
-<text text-anchor="start" x="119.5" y="-230.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<polyline fill="none" stroke="black" points="111.5,-223.5 315.5,-223.5 "/>
+<polygon fill="#bfbfbf" stroke="black" points="111.5,-182.5 111.5,-283.5 315.5,-283.5 315.5,-182.5 111.5,-182.5"/>
+<text text-anchor="middle" x="213.5" y="-271.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseFuncNode</text>
+<polyline fill="none" stroke="black" points="111.5,-264.5 315.5,-264.5 "/>
+<text text-anchor="start" x="119.5" y="-252.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ attrs</text>
+<text text-anchor="start" x="119.5" y="-241.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<polyline fill="none" stroke="black" points="111.5,-234.5 315.5,-234.5 "/>
+<text text-anchor="start" x="119.5" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetAttr()</text>
 <text text-anchor="start" x="119.5" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetAttr()</text>
 <text text-anchor="start" x="119.5" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasNonzeroAttr()</text>
 <text text-anchor="start" x="119.5" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_INFO()</text>
@@ -43,8 +44,8 @@
 </g>
 <!-- Node1&#45;&gt;Node5 -->
 <g id="edge4" class="edge"><title>Node1&#45;&gt;Node5</title>
-<path fill="none" stroke="midnightblue" d="M175.366,-174.108C168.672,-164.913 161.605,-155.202 154.609,-145.591"/>
-<polygon fill="none" stroke="midnightblue" points="172.68,-176.365 181.394,-182.391 178.339,-172.246 172.68,-176.365"/>
+<path fill="none" stroke="midnightblue" d="M172.812,-174.084C166.317,-164.839 159.53,-155.178 152.844,-145.66"/>
+<polygon fill="none" stroke="midnightblue" points="170.071,-176.271 178.683,-182.441 175.799,-172.247 170.071,-176.271"/>
 </g>
 <!-- Node6 -->
 <g id="node6" class="node"><title>Node6</title>
@@ -68,64 +69,64 @@
 </g>
 <!-- Node1&#45;&gt;Node6 -->
 <g id="edge5" class="edge"><title>Node1&#45;&gt;Node6</title>
-<path fill="none" stroke="midnightblue" d="M251.978,-174.108C258.731,-164.913 265.863,-155.202 272.922,-145.591"/>
-<polygon fill="none" stroke="midnightblue" points="248.993,-172.259 245.895,-182.391 254.635,-176.403 248.993,-172.259"/>
+<path fill="none" stroke="midnightblue" d="M254.555,-174.084C261.108,-164.839 267.956,-155.178 274.703,-145.66"/>
+<polygon fill="none" stroke="midnightblue" points="251.558,-172.259 248.63,-182.441 257.269,-176.307 251.558,-172.259"/>
 </g>
 <!-- Node2 -->
 <g id="node2" class="node"><title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1RelayExprNode.html" target="_top" xlink:title="Base node of all non&#45;primitive expressions. ">
-<polygon fill="white" stroke="black" points="111.5,-309.5 111.5,-410.5 315.5,-410.5 315.5,-309.5 111.5,-309.5"/>
-<text text-anchor="middle" x="213.5" y="-398.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::RelayExprNode</text>
-<polyline fill="none" stroke="black" points="111.5,-391.5 315.5,-391.5 "/>
-<text text-anchor="start" x="119.5" y="-379.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ span</text>
-<text text-anchor="start" x="119.5" y="-368.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ checked_type_</text>
-<text text-anchor="start" x="119.5" y="-357.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<polyline fill="none" stroke="black" points="111.5,-350.5 315.5,-350.5 "/>
-<text text-anchor="start" x="119.5" y="-338.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ checked_type()</text>
-<text text-anchor="start" x="119.5" y="-327.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ type_as()</text>
-<text text-anchor="start" x="119.5" y="-316.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_INFO()</text>
+<polygon fill="white" stroke="black" points="111.5,-320.5 111.5,-421.5 315.5,-421.5 315.5,-320.5 111.5,-320.5"/>
+<text text-anchor="middle" x="213.5" y="-409.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::RelayExprNode</text>
+<polyline fill="none" stroke="black" points="111.5,-402.5 315.5,-402.5 "/>
+<text text-anchor="start" x="119.5" y="-390.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ span</text>
+<text text-anchor="start" x="119.5" y="-379.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ checked_type_</text>
+<text text-anchor="start" x="119.5" y="-368.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<polyline fill="none" stroke="black" points="111.5,-361.5 315.5,-361.5 "/>
+<text text-anchor="start" x="119.5" y="-349.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ checked_type()</text>
+<text text-anchor="start" x="119.5" y="-338.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ type_as()</text>
+<text text-anchor="start" x="119.5" y="-327.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_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="M213.5,-299.232C213.5,-290.236 213.5,-281.101 213.5,-272.516"/>
-<polygon fill="none" stroke="midnightblue" points="210,-299.291 213.5,-309.291 217,-299.291 210,-299.291"/>
+<path fill="none" stroke="midnightblue" d="M213.5,-310C213.5,-301.271 213.5,-292.363 213.5,-283.863"/>
+<polygon fill="none" stroke="midnightblue" points="210,-310.131 213.5,-320.131 217,-310.131 210,-310.131"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node"><title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1BaseExprNode.html" target="_top" xlink:title="Base type of all the expressions. ">
-<polygon fill="white" stroke="black" points="111.5,-447.5 111.5,-548.5 315.5,-548.5 315.5,-447.5 111.5,-447.5"/>
-<text text-anchor="middle" x="213.5" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseExprNode</text>
-<polyline fill="none" stroke="black" points="111.5,-529.5 315.5,-529.5 "/>
-<text text-anchor="start" x="119.5" y="-517.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<text text-anchor="start" x="119.5" y="-506.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_sequal</text>
-<text text-anchor="start" x="119.5" y="-495.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
-<text text-anchor="start" x="119.5" y="-484.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_shash</text>
-<text text-anchor="start" x="119.5" y="-473.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
-<polyline fill="none" stroke="black" points="111.5,-466.5 315.5,-466.5 "/>
-<text text-anchor="start" x="119.5" y="-454.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_INFO()</text>
+<polygon fill="white" stroke="black" points="111.5,-458.5 111.5,-559.5 315.5,-559.5 315.5,-458.5 111.5,-458.5"/>
+<text text-anchor="middle" x="213.5" y="-547.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseExprNode</text>
+<polyline fill="none" stroke="black" points="111.5,-540.5 315.5,-540.5 "/>
+<text text-anchor="start" x="119.5" y="-528.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<text text-anchor="start" x="119.5" y="-517.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_sequal</text>
+<text text-anchor="start" x="119.5" y="-506.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
+<text text-anchor="start" x="119.5" y="-495.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_shash</text>
+<text text-anchor="start" x="119.5" y="-484.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
+<polyline fill="none" stroke="black" points="111.5,-477.5 315.5,-477.5 "/>
+<text text-anchor="start" x="119.5" y="-465.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_INFO()</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="M213.5,-437C213.5,-428.271 213.5,-419.363 213.5,-410.863"/>
-<polygon fill="none" stroke="midnightblue" points="210,-437.131 213.5,-447.131 217,-437.131 210,-437.131"/>
+<path fill="none" stroke="midnightblue" d="M213.5,-448C213.5,-439.271 213.5,-430.363 213.5,-421.863"/>
+<polygon fill="none" stroke="midnightblue" points="210,-448.131 213.5,-458.131 217,-448.131 210,-448.131"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node"><title>Node4</title>
-<polygon fill="white" stroke="#bfbfbf" points="190,-585.5 190,-642.5 237,-642.5 237,-585.5 190,-585.5"/>
-<text text-anchor="middle" x="213.5" y="-630.5" font-family="Helvetica,sans-Serif" font-size="10.00">Object</text>
-<polyline fill="none" stroke="#bfbfbf" points="190,-623.5 237,-623.5 "/>
-<text text-anchor="middle" x="213.5" y="-611.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="#bfbfbf" points="190,-604.5 237,-604.5 "/>
-<text text-anchor="middle" x="213.5" y="-592.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polygon fill="white" stroke="#bfbfbf" points="190,-596.5 190,-653.5 237,-653.5 237,-596.5 190,-596.5"/>
+<text text-anchor="middle" x="213.5" y="-641.5" font-family="Helvetica,sans-Serif" font-size="10.00">Object</text>
+<polyline fill="none" stroke="#bfbfbf" points="190,-634.5 237,-634.5 "/>
+<text text-anchor="middle" x="213.5" y="-622.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="#bfbfbf" points="190,-615.5 237,-615.5 "/>
+<text text-anchor="middle" x="213.5" y="-603.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
 </g>
 <!-- Node4&#45;&gt;Node3 -->
 <g id="edge3" class="edge"><title>Node4&#45;&gt;Node3</title>
-<path fill="none" stroke="midnightblue" d="M213.5,-575.354C213.5,-566.796 213.5,-557.578 213.5,-548.608"/>
-<polygon fill="none" stroke="midnightblue" points="210,-575.404 213.5,-585.404 217,-575.404 210,-575.404"/>
+<path fill="none" stroke="midnightblue" d="M213.5,-586.354C213.5,-577.796 213.5,-568.578 213.5,-559.608"/>
+<polygon fill="none" stroke="midnightblue" points="210,-586.404 213.5,-596.404 217,-586.404 210,-586.404"/>
 </g>
 </g>
 </svg>
diff --git a/docs/doxygen/classtvm_1_1Integer-members.html b/docs/doxygen/classtvm_1_1Bool-members.html
similarity index 60%
copy from docs/doxygen/classtvm_1_1Integer-members.html
copy to docs/doxygen/classtvm_1_1Bool-members.html
index 6c94a8c..086bd23 100644
--- a/docs/doxygen/classtvm_1_1Integer-members.html
+++ b/docs/doxygen/classtvm_1_1Bool-members.html
@@ -83,31 +83,28 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="namespacetvm.html">tvm</a></li><li class="navelem"><a class="el" href="classtvm_1_1Integer.html">Integer</a></li>  </ul>
+<li class="navelem"><a class="el" href="namespacetvm.html">tvm</a></li><li class="navelem"><a class="el" href="classtvm_1_1Bool.html">Bool</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tvm::Integer Member List</div>  </div>
+<div class="title">tvm::Bool Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="classtvm_1_1Integer.html">tvm::Integer</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="classtvm_1_1Bool.html">tvm::Bool</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1PrimExpr.html#a1098008618699c33adfbd19e582f9ffd">dtype</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1PrimExpr.html">tvm::PrimExpr</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1Integer.html#a2d3969d98441b5b2ee5d8a986a56c410">Integer</a>()</td><td class="entry"><a class="el" href="classtvm_1_1Integer.html">tvm::Integer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1Integer.html#a262bc171fdf52db5f34e3c8446fb81aa">Integer</a>(ObjectPtr&lt; Object &gt; node)</td><td class="entry"><a class="el" href="classtvm_1_1Integer.html">tvm::Integer</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_1Integer.html#a1f58cf3c6dab32f1822b9cbccb5569e8">Integer</a>(int value)</td><td class="entry"><a class="el" href="classtvm_1_1Integer.html">tvm::Integer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1Integer.html#a962f080ada680921fbfff0846553ec33">Integer</a>(IntImm other)</td><td class="entry"><a class="el" href="classtvm_1_1Integer.html">tvm::Integer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1Integer.html#abddd0de9406285ff558cc83111ae37bd">Integer</a>(ENum value)</td><td class="entry"><a class="el" href="classtvm_1_1Integer.html">tvm::Integer</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_1Bool.html#a9c6936456a86dc3e806e1cf82b06f94d">Bool</a>(bool value)</td><td class="entry"><a class="el" href="classtvm_1_1Bool.html">tvm::Bool</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_1PrimExpr.html#a1098008618699c33adfbd19e582f9ffd">dtype</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1PrimExpr.html">tvm::PrimExpr</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1IntImm.html#ac168017343d2153f801adb31338fafce">IntImm</a>(DataType dtype, int64_t value)</td><td class="entry"><a class="el" href="classtvm_1_1IntImm.html">tvm::IntImm</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1Integer.html#ab12102b4412b34faa459408d1fc8ba0e">operator int64_t</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1Integer.html">tvm::Integer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1Integer.html#ad538a2ae6f636b3ce38fb4162b1c2549">operator=</a>(const IntImm &amp;other)</td><td class="entry"><a class="el" href="classtvm_1_1Integer.html">tvm::Integer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1Bool.html#a33aec360654d33c5a4fe6568895b0c1f">operator bool</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1Bool.html">tvm::Bool</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1Bool.html#a4154ec9cafe292aaecb6884b67f784b4">operator!</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1Bool.html">tvm::Bool</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1PrimExpr.html#a7f0ca30e951608a0b36a77a66d4d19e0">PrimExpr</a>(int32_t value)</td><td class="entry"><a class="el" href="classtvm_1_1PrimExpr.html">tvm::PrimExpr</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1PrimExpr.html#a756d3f8b17b019560946524951ae6118">PrimExpr</a>(float value)</td><td class="entry"><a class="el" href="classtvm_1_1PrimExpr.html">tvm::PrimExpr</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1IntImm.html#a9ce59db1a112fb10b7f384b68a3afc9f">TVM_DEFINE_OBJECT_REF_METHODS</a>(IntImm, PrimExpr, IntImmNode)</td><td class="entry"><a class="el" href="classtvm_1_1IntImm.html">tvm::IntImm</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1PrimExpr.html#a3ad47a31c4ce693077a93f154b2b1e12">tvm::PrimExpr::TVM_DEFINE_OBJECT_REF_METHODS</a>(PrimExpr, BaseExpr, PrimExprNode)</td><td class="entry"><a class="el" href="classtvm_1_1PrimExpr.html">tvm::PrimExpr</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1BaseExpr.html#aa513c6abed6e5b76c7fc9441649b3e4c">tvm::BaseExpr::TVM_DEFINE_OBJECT_REF_METHODS</a>(BaseExpr, ObjectRef, BaseExprNode)</td><td class="entry"><a class="el" href="classtvm_1_1BaseExpr.html">tvm::BaseExpr</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1Bool.html#a39544ffed214f2c456c727f45ea7e88d">TVM_DEFINE_NOTNULLABLE_OBJECT_REF_METHODS</a>(Bool, IntImm, IntImmNode)</td><td class="entry"><a class="el" href="classtvm_1_1Bool.html">tvm::Bool</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1IntImm.html#a9ce59db1a112fb10b7f384b68a3afc9f">TVM_DEFINE_OBJECT_REF_METHODS</a>(IntImm, PrimExpr, IntImmNode)</td><td class="entry"><a class="el" href="classtvm_1_1IntImm.html">tvm::IntImm</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1PrimExpr.html#a3ad47a31c4ce693077a93f154b2b1e12">tvm::PrimExpr::TVM_DEFINE_OBJECT_REF_METHODS</a>(PrimExpr, BaseExpr, PrimExprNode)</td><td class="entry"><a class="el" href="classtvm_1_1PrimExpr.html">tvm::PrimExpr</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1BaseExpr.html#aa513c6abed6e5b76c7fc9441649b3e4c">tvm::BaseExpr::TVM_DEFINE_OBJECT_REF_METHODS</a>(BaseExpr, ObjectRef, BaseExprNode)</td><td class="entry"><a class="el" href="classtvm_1_1BaseExpr.html">tvm::BaseExpr</a></td><td class="entry"></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/doxygen/classtvm_1_1IntImm.html b/docs/doxygen/classtvm_1_1Bool.html
similarity index 61%
copy from docs/doxygen/classtvm_1_1IntImm.html
copy to docs/doxygen/classtvm_1_1Bool.html
index 4bc08b1..283f292 100644
--- a/docs/doxygen/classtvm_1_1IntImm.html
+++ b/docs/doxygen/classtvm_1_1Bool.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.11"/>
-<title>tvm: tvm::IntImm Class Reference</title>
+<title>tvm: tvm::Bool Class Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -83,42 +83,51 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="namespacetvm.html">tvm</a></li><li class="navelem"><a class="el" href="classtvm_1_1IntImm.html">IntImm</a></li>  </ul>
+<li class="navelem"><a class="el" href="namespacetvm.html">tvm</a></li><li class="navelem"><a class="el" href="classtvm_1_1Bool.html">Bool</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
 <a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="classtvm_1_1IntImm-members.html">List of all members</a>  </div>
+<a href="classtvm_1_1Bool-members.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tvm::IntImm Class Reference</div>  </div>
+<div class="title">tvm::Bool Class Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Managed reference class to <a class="el" href="classtvm_1_1IntImmNode.html" title="Constant integer literals in the program. ">IntImmNode</a>.  
- <a href="classtvm_1_1IntImm.html#details">More...</a></p>
+<p>Boolean constant.  
+ <a href="classtvm_1_1Bool.html#details">More...</a></p>
 
 <p><code>#include &lt;<a class="el" href="ir_2expr_8h_source.html">expr.h</a>&gt;</code></p>
 <div class="dynheader">
-Inheritance diagram for tvm::IntImm:</div>
+Inheritance diagram for tvm::Bool:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1IntImm__inherit__graph.svg" width="211" height="780"><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_1Bool__inherit__graph.svg" width="230" height="751"><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::IntImm:</div>
+Collaboration diagram for tvm::Bool:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1IntImm__coll__graph.svg" width="211" height="567"><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_1Bool__coll__graph.svg" width="230" height="751"><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">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:ac168017343d2153f801adb31338fafce"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1IntImm.html#ac168017343d2153f801adb31338fafce">IntImm</a> (<a class="el" href="namespacetvm.html#a41918af1a1dc386388639a9d3ad06c5d">DataType</a> <a class="el" href="classtvm_1_1PrimExpr.html#a1098008618699c33adfbd19e582f9ffd">dtype</a>, int64_t value)</td></tr>
-<tr class="memdesc:ac168017343d2153f801adb31338fafce"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classtvm_1_1Constructor.html" title="Managed reference to ConstructorNode. ">Constructor</a>.  <a href="#ac168017343d2153f801adb31338fafce">More...</a><br /></td></tr>
-<tr class="separator:ac168017343d2153f801adb31338fafce"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9ce59db1a112fb10b7f384b68a3afc9f"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1IntImm.html#a9ce59db1a112fb10b7f384b68a3afc9f">TVM_DEFINE_OBJECT_REF_METHODS</a> (<a class="el" href="classtvm_1_1IntImm.html">IntImm</a>, <a class="el" href="classtvm_1_1PrimExpr.html">PrimExpr</a>, <a class="el" href="classtvm_1_1IntImmNode.html">IntImmNode</a>)</td></tr>
-<tr class="separator:a9ce59db1a112fb10b7f384b68a3afc9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9c6936456a86dc3e806e1cf82b06f94d"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1Bool.html#a9c6936456a86dc3e806e1cf82b06f94d">Bool</a> (bool value)</td></tr>
+<tr class="separator:a9c6936456a86dc3e806e1cf82b06f94d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4154ec9cafe292aaecb6884b67f784b4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1Bool.html">Bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1Bool.html#a4154ec9cafe292aaecb6884b67f784b4">operator!</a> () const </td></tr>
+<tr class="separator:a4154ec9cafe292aaecb6884b67f784b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a33aec360654d33c5a4fe6568895b0c1f"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1Bool.html#a33aec360654d33c5a4fe6568895b0c1f">operator bool</a> () const </td></tr>
+<tr class="separator:a33aec360654d33c5a4fe6568895b0c1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a39544ffed214f2c456c727f45ea7e88d"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1Bool.html#a39544ffed214f2c456c727f45ea7e88d">TVM_DEFINE_NOTNULLABLE_OBJECT_REF_METHODS</a> (<a class="el" href="classtvm_1_1Bool.html">Bool</a>, <a class="el" href="classtvm_1_1IntImm.html">IntImm</a>, <a class="el" href="classtvm_1_1IntImmNode.html">IntImmNode</a>)</td></tr>
+<tr class="separator:a39544ffed214f2c456c727f45ea7e88d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_methods_classtvm_1_1IntImm"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classtvm_1_1IntImm')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classtvm_1_1IntImm.html">tvm::IntImm</a></td></tr>
+<tr class="memitem:ac168017343d2153f801adb31338fafce inherit pub_methods_classtvm_1_1IntImm"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1IntImm.html#ac168017343d2153f801adb31338fafce">IntImm</a> (<a class="el" href="namespacetvm.html#a41918af1a1dc386388639a9d3ad06c5d">DataType</a> <a class="el" href="classtvm_1_1PrimExpr.html#a1098008618699c33adfbd19e582f9ffd">dtype</a>, int64_t value)</td></tr>
+<tr class="memdesc:ac168017343d2153f801adb31338fafce inherit pub_methods_classtvm_1_1IntImm"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classtvm_1_1Constructor.html" title="Managed reference to ConstructorNode. ">Constructor</a>.  <a href="#ac168017343d2153f801adb31338fafce">More...</a><br /></td></tr>
+<tr class="separator:ac168017343d2153f801adb31338fafce inherit pub_methods_classtvm_1_1IntImm"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a9ce59db1a112fb10b7f384b68a3afc9f inherit pub_methods_classtvm_1_1IntImm"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1IntImm.html#a9ce59db1a112fb10b7f384b68a3afc9f">TVM_DEFINE_OBJECT_REF_METHODS</a> (<a class="el" href="classtvm_1_1IntImm.html">IntImm</a>, <a class="el" href="classtvm_1_1PrimExpr.html">PrimExpr</a>, <a class="el" href="classtvm_1_1IntImmNode.html">IntImmNode</a>) [...]
+<tr class="separator:a9ce59db1a112fb10b7f384b68a3afc9f inherit pub_methods_classtvm_1_1IntImm"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="inherit_header pub_methods_classtvm_1_1PrimExpr"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classtvm_1_1PrimExpr')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classtvm_1_1PrimExpr.html">tvm::PrimExpr</a></td></tr>
 <tr class="memitem:a7f0ca30e951608a0b36a77a66d4d19e0 inherit pub_methods_classtvm_1_1PrimExpr"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1PrimExpr.html#a7f0ca30e951608a0b36a77a66d4d19e0">PrimExpr</a> (int32_t value)</td></tr>
 <tr class="memdesc:a7f0ca30e951608a0b36a77a66d4d19e0 inherit pub_methods_classtvm_1_1PrimExpr"><td class="mdescLeft">&#160;</td><td class="mdescRight">construct from integer.  <a href="#a7f0ca30e951608a0b36a77a66d4d19e0">More...</a><br /></td></tr>
@@ -135,59 +144,94 @@ Public Member Functions</h2></td></tr>
 <tr class="separator:aa513c6abed6e5b76c7fc9441649b3e4c inherit pub_methods_classtvm_1_1BaseExpr"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Managed reference class to <a class="el" href="classtvm_1_1IntImmNode.html" title="Constant integer literals in the program. ">IntImmNode</a>. </p>
-<dl class="section see"><dt>See also</dt><dd><a class="el" href="classtvm_1_1IntImmNode.html" title="Constant integer literals in the program. ">IntImmNode</a> </dd></dl>
+<div class="textblock"><p>Boolean constant. </p>
+<p>This reference type is useful to add additional compile-time type checks and helper functions for <a class="el" href="classtvm_1_1Integer.html" title="Container of constant int that adds more constructors. ">Integer</a> equal comparisons. </p>
 </div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
-<a class="anchor" id="ac168017343d2153f801adb31338fafce"></a>
+<a class="anchor" id="a9c6936456a86dc3e806e1cf82b06f94d"></a>
 <div class="memitem">
 <div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">tvm::IntImm::IntImm </td>
+          <td class="memname">tvm::Bool::Bool </td>
           <td>(</td>
-          <td class="paramtype"><a class="el" href="namespacetvm.html#a41918af1a1dc386388639a9d3ad06c5d">DataType</a>&#160;</td>
-          <td class="paramname"><em>dtype</em>, </td>
-        </tr>
-        <tr>
-          <td class="paramkey"></td>
+          <td class="paramtype">bool&#160;</td>
+          <td class="paramname"><em>value</em></td><td>)</td>
           <td></td>
-          <td class="paramtype">int64_t&#160;</td>
-          <td class="paramname"><em>value</em>&#160;</td>
         </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">explicit</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Member Function Documentation</h2>
+<a class="anchor" id="a33aec360654d33c5a4fe6568895b0c1f"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
         <tr>
-          <td></td>
-          <td>)</td>
-          <td></td><td></td>
+          <td class="memname">tvm::Bool::operator bool </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
         </tr>
       </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
 </div><div class="memdoc">
 
-<p><a class="el" href="classtvm_1_1Constructor.html" title="Managed reference to ConstructorNode. ">Constructor</a>. </p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">dtype</td><td>The data type of the value. </td></tr>
-    <tr><td class="paramname">value</td><td>The internal value. </td></tr>
-  </table>
-  </dd>
-</dl>
+</div>
+</div>
+<a class="anchor" id="a4154ec9cafe292aaecb6884b67f784b4"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtvm_1_1Bool.html">Bool</a> tvm::Bool::operator! </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
 
 </div>
 </div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a9ce59db1a112fb10b7f384b68a3afc9f"></a>
+<a class="anchor" id="a39544ffed214f2c456c727f45ea7e88d"></a>
 <div class="memitem">
 <div class="memproto">
       <table class="memname">
         <tr>
-          <td class="memname">tvm::IntImm::TVM_DEFINE_OBJECT_REF_METHODS </td>
+          <td class="memname">tvm::Bool::TVM_DEFINE_NOTNULLABLE_OBJECT_REF_METHODS </td>
           <td>(</td>
-          <td class="paramtype"><a class="el" href="classtvm_1_1IntImm.html">IntImm</a>&#160;</td>
+          <td class="paramtype"><a class="el" href="classtvm_1_1Bool.html">Bool</a>&#160;</td>
           <td class="paramname">, </td>
         </tr>
         <tr>
           <td class="paramkey"></td>
           <td></td>
-          <td class="paramtype"><a class="el" href="classtvm_1_1PrimExpr.html">PrimExpr</a>&#160;</td>
+          <td class="paramtype"><a class="el" href="classtvm_1_1IntImm.html">IntImm</a>&#160;</td>
           <td class="paramname">, </td>
         </tr>
         <tr>
diff --git a/docs/doxygen/classtvm_1_1Bool__coll__graph.svg b/docs/doxygen/classtvm_1_1Bool__coll__graph.svg
new file mode 100644
index 0000000..a190e7c
--- /dev/null
+++ b/docs/doxygen/classtvm_1_1Bool__coll__graph.svg
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.38.0 (20140413.2041)
+ -->
+<!-- Title: tvm::Bool Pages: 1 -->
+<svg width="172pt" height="563pt"
+ viewBox="0.00 0.00 172.00 563.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 559)">
+<title>tvm::Bool</title>
+<polygon fill="white" stroke="none" points="-4,4 -4,-559 168,-559 168,4 -4,4"/>
+<!-- Node1 -->
+<g id="node1" class="node"><title>Node1</title>
+<polygon fill="#bfbfbf" stroke="black" points="0,-0.5 0,-101.5 164,-101.5 164,-0.5 0,-0.5"/>
+<text text-anchor="middle" x="82" y="-89.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Bool</text>
+<polyline fill="none" stroke="black" points="0,-82.5 164,-82.5 "/>
+<text text-anchor="middle" x="82" y="-70.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-63.5 164,-63.5 "/>
+<text text-anchor="start" x="8" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Bool()</text>
+<text text-anchor="start" x="8" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!()</text>
+<text text-anchor="start" x="8" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator bool()</text>
+<text text-anchor="start" x="8" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_NOTNULLABLE</text>
+<text text-anchor="start" x="8" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">_OBJECT_REF_METHODS()</text>
+</g>
+<!-- Node2 -->
+<g id="node2" class="node"><title>Node2</title>
+<g id="a_node2"><a xlink:href="classtvm_1_1IntImm.html" target="_top" xlink:title="Managed reference class to IntImmNode. ">
+<polygon fill="white" stroke="black" points="7,-138.5 7,-217.5 157,-217.5 157,-138.5 7,-138.5"/>
+<text text-anchor="middle" x="82" y="-205.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::IntImm</text>
+<polyline fill="none" stroke="black" points="7,-198.5 157,-198.5 "/>
+<text text-anchor="middle" x="82" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="7,-179.5 157,-179.5 "/>
+<text text-anchor="start" x="15" y="-167.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ IntImm()</text>
+<text text-anchor="start" x="15" y="-156.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="15" y="-145.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</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="M82,-128.406C82,-119.639 82,-110.488 82,-101.691"/>
+<polygon fill="none" stroke="midnightblue" points="78.5001,-128.476 82,-138.476 85.5001,-128.476 78.5001,-128.476"/>
+</g>
+<!-- Node3 -->
+<g id="node3" class="node"><title>Node3</title>
+<g id="a_node3"><a xlink:href="classtvm_1_1PrimExpr.html" target="_top" xlink:title="Reference to PrimExprNode. ">
+<polygon fill="white" stroke="black" points="7,-254.5 7,-355.5 157,-355.5 157,-254.5 7,-254.5"/>
+<text text-anchor="middle" x="82" y="-343.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::PrimExpr</text>
+<polyline fill="none" stroke="black" points="7,-336.5 157,-336.5 "/>
+<text text-anchor="middle" x="82" y="-324.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="7,-317.5 157,-317.5 "/>
+<text text-anchor="start" x="15" y="-305.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
+<text text-anchor="start" x="15" y="-294.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
+<text text-anchor="start" x="15" y="-283.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ dtype()</text>
+<text text-anchor="start" x="15" y="-272.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="15" y="-261.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</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="M82,-244.186C82,-235.221 82,-226.181 82,-217.808"/>
+<polygon fill="none" stroke="midnightblue" points="78.5001,-244.237 82,-254.238 85.5001,-244.238 78.5001,-244.237"/>
+</g>
+<!-- Node4 -->
+<g id="node4" class="node"><title>Node4</title>
+<g id="a_node4"><a xlink:href="classtvm_1_1BaseExpr.html" target="_top" xlink:title="Managed reference to BaseExprNode. ">
+<polygon fill="white" stroke="black" points="7,-392.5 7,-460.5 157,-460.5 157,-392.5 7,-392.5"/>
+<text text-anchor="middle" x="82" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseExpr</text>
+<polyline fill="none" stroke="black" points="7,-441.5 157,-441.5 "/>
+<text text-anchor="middle" x="82" y="-429.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="7,-422.5 157,-422.5 "/>
+<text text-anchor="start" x="15" y="-410.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="15" y="-399.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+</a>
+</g>
+</g>
+<!-- Node4&#45;&gt;Node3 -->
+<g id="edge3" class="edge"><title>Node4&#45;&gt;Node3</title>
+<path fill="none" stroke="midnightblue" d="M82,-382.045C82,-373.469 82,-364.408 82,-355.646"/>
+<polygon fill="none" stroke="midnightblue" points="78.5001,-382.213 82,-392.213 85.5001,-382.213 78.5001,-382.213"/>
+</g>
+<!-- Node5 -->
+<g id="node5" class="node"><title>Node5</title>
+<polygon fill="white" stroke="#bfbfbf" points="51,-497.5 51,-554.5 113,-554.5 113,-497.5 51,-497.5"/>
+<text text-anchor="middle" x="82" y="-542.5" font-family="Helvetica,sans-Serif" font-size="10.00">ObjectRef</text>
+<polyline fill="none" stroke="#bfbfbf" points="51,-535.5 113,-535.5 "/>
+<text text-anchor="middle" x="82" y="-523.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="#bfbfbf" points="51,-516.5 113,-516.5 "/>
+<text text-anchor="middle" x="82" y="-504.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+</g>
+<!-- Node5&#45;&gt;Node4 -->
+<g id="edge4" class="edge"><title>Node5&#45;&gt;Node4</title>
+<path fill="none" stroke="midnightblue" d="M82,-487.063C82,-478.393 82,-469.243 82,-460.786"/>
+<polygon fill="none" stroke="midnightblue" points="78.5001,-487.321 82,-497.321 85.5001,-487.321 78.5001,-487.321"/>
+</g>
+</g>
+</svg>
diff --git a/docs/doxygen/classtvm_1_1Bool__inherit__graph.svg b/docs/doxygen/classtvm_1_1Bool__inherit__graph.svg
new file mode 100644
index 0000000..a190e7c
--- /dev/null
+++ b/docs/doxygen/classtvm_1_1Bool__inherit__graph.svg
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.38.0 (20140413.2041)
+ -->
+<!-- Title: tvm::Bool Pages: 1 -->
+<svg width="172pt" height="563pt"
+ viewBox="0.00 0.00 172.00 563.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 559)">
+<title>tvm::Bool</title>
+<polygon fill="white" stroke="none" points="-4,4 -4,-559 168,-559 168,4 -4,4"/>
+<!-- Node1 -->
+<g id="node1" class="node"><title>Node1</title>
+<polygon fill="#bfbfbf" stroke="black" points="0,-0.5 0,-101.5 164,-101.5 164,-0.5 0,-0.5"/>
+<text text-anchor="middle" x="82" y="-89.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Bool</text>
+<polyline fill="none" stroke="black" points="0,-82.5 164,-82.5 "/>
+<text text-anchor="middle" x="82" y="-70.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-63.5 164,-63.5 "/>
+<text text-anchor="start" x="8" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Bool()</text>
+<text text-anchor="start" x="8" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!()</text>
+<text text-anchor="start" x="8" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator bool()</text>
+<text text-anchor="start" x="8" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_NOTNULLABLE</text>
+<text text-anchor="start" x="8" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">_OBJECT_REF_METHODS()</text>
+</g>
+<!-- Node2 -->
+<g id="node2" class="node"><title>Node2</title>
+<g id="a_node2"><a xlink:href="classtvm_1_1IntImm.html" target="_top" xlink:title="Managed reference class to IntImmNode. ">
+<polygon fill="white" stroke="black" points="7,-138.5 7,-217.5 157,-217.5 157,-138.5 7,-138.5"/>
+<text text-anchor="middle" x="82" y="-205.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::IntImm</text>
+<polyline fill="none" stroke="black" points="7,-198.5 157,-198.5 "/>
+<text text-anchor="middle" x="82" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="7,-179.5 157,-179.5 "/>
+<text text-anchor="start" x="15" y="-167.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ IntImm()</text>
+<text text-anchor="start" x="15" y="-156.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="15" y="-145.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</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="M82,-128.406C82,-119.639 82,-110.488 82,-101.691"/>
+<polygon fill="none" stroke="midnightblue" points="78.5001,-128.476 82,-138.476 85.5001,-128.476 78.5001,-128.476"/>
+</g>
+<!-- Node3 -->
+<g id="node3" class="node"><title>Node3</title>
+<g id="a_node3"><a xlink:href="classtvm_1_1PrimExpr.html" target="_top" xlink:title="Reference to PrimExprNode. ">
+<polygon fill="white" stroke="black" points="7,-254.5 7,-355.5 157,-355.5 157,-254.5 7,-254.5"/>
+<text text-anchor="middle" x="82" y="-343.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::PrimExpr</text>
+<polyline fill="none" stroke="black" points="7,-336.5 157,-336.5 "/>
+<text text-anchor="middle" x="82" y="-324.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="7,-317.5 157,-317.5 "/>
+<text text-anchor="start" x="15" y="-305.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
+<text text-anchor="start" x="15" y="-294.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
+<text text-anchor="start" x="15" y="-283.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ dtype()</text>
+<text text-anchor="start" x="15" y="-272.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="15" y="-261.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</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="M82,-244.186C82,-235.221 82,-226.181 82,-217.808"/>
+<polygon fill="none" stroke="midnightblue" points="78.5001,-244.237 82,-254.238 85.5001,-244.238 78.5001,-244.237"/>
+</g>
+<!-- Node4 -->
+<g id="node4" class="node"><title>Node4</title>
+<g id="a_node4"><a xlink:href="classtvm_1_1BaseExpr.html" target="_top" xlink:title="Managed reference to BaseExprNode. ">
+<polygon fill="white" stroke="black" points="7,-392.5 7,-460.5 157,-460.5 157,-392.5 7,-392.5"/>
+<text text-anchor="middle" x="82" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseExpr</text>
+<polyline fill="none" stroke="black" points="7,-441.5 157,-441.5 "/>
+<text text-anchor="middle" x="82" y="-429.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="7,-422.5 157,-422.5 "/>
+<text text-anchor="start" x="15" y="-410.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="15" y="-399.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+</a>
+</g>
+</g>
+<!-- Node4&#45;&gt;Node3 -->
+<g id="edge3" class="edge"><title>Node4&#45;&gt;Node3</title>
+<path fill="none" stroke="midnightblue" d="M82,-382.045C82,-373.469 82,-364.408 82,-355.646"/>
+<polygon fill="none" stroke="midnightblue" points="78.5001,-382.213 82,-392.213 85.5001,-382.213 78.5001,-382.213"/>
+</g>
+<!-- Node5 -->
+<g id="node5" class="node"><title>Node5</title>
+<polygon fill="white" stroke="#bfbfbf" points="51,-497.5 51,-554.5 113,-554.5 113,-497.5 51,-497.5"/>
+<text text-anchor="middle" x="82" y="-542.5" font-family="Helvetica,sans-Serif" font-size="10.00">ObjectRef</text>
+<polyline fill="none" stroke="#bfbfbf" points="51,-535.5 113,-535.5 "/>
+<text text-anchor="middle" x="82" y="-523.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="#bfbfbf" points="51,-516.5 113,-516.5 "/>
+<text text-anchor="middle" x="82" y="-504.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+</g>
+<!-- Node5&#45;&gt;Node4 -->
+<g id="edge4" class="edge"><title>Node5&#45;&gt;Node4</title>
+<path fill="none" stroke="midnightblue" d="M82,-487.063C82,-478.393 82,-469.243 82,-460.786"/>
+<polygon fill="none" stroke="midnightblue" points="78.5001,-487.321 82,-497.321 85.5001,-487.321 78.5001,-487.321"/>
+</g>
+</g>
+</svg>
diff --git a/docs/doxygen/classtvm_1_1IntImm.html b/docs/doxygen/classtvm_1_1IntImm.html
index 4bc08b1..a2f7145 100644
--- a/docs/doxygen/classtvm_1_1IntImm.html
+++ b/docs/doxygen/classtvm_1_1IntImm.html
@@ -102,7 +102,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="dynheader">
 Inheritance diagram for tvm::IntImm:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1IntImm__inherit__graph.svg" width="211" height="780"><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_1IntImm__inherit__graph.svg" width="406" height="839"><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/doxygen/classtvm_1_1IntImm__inherit__graph.svg b/docs/doxygen/classtvm_1_1IntImm__inherit__graph.svg
index 3438de3..d4e123f 100644
--- a/docs/doxygen/classtvm_1_1IntImm__inherit__graph.svg
+++ b/docs/doxygen/classtvm_1_1IntImm__inherit__graph.svg
@@ -4,97 +4,122 @@
 <!-- Generated by graphviz version 2.38.0 (20140413.2041)
  -->
 <!-- Title: tvm::IntImm Pages: 1 -->
-<svg width="158pt" height="585pt"
- viewBox="0.00 0.00 158.00 585.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 581)">
+<svg width="304pt" height="629pt"
+ viewBox="0.00 0.00 303.50 629.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 625)">
 <title>tvm::IntImm</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-581 154,-581 154,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-625 299.5,-625 299.5,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node"><title>Node1</title>
-<polygon fill="#bfbfbf" stroke="black" points="-1.42109e-14,-160.5 -1.42109e-14,-239.5 150,-239.5 150,-160.5 -1.42109e-14,-160.5"/>
-<text text-anchor="middle" x="75" y="-227.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::IntImm</text>
-<polyline fill="none" stroke="black" points="-1.42109e-14,-220.5 150,-220.5 "/>
-<text text-anchor="middle" x="75" y="-208.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="-1.42109e-14,-201.5 150,-201.5 "/>
-<text text-anchor="start" x="8" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ IntImm()</text>
-<text text-anchor="start" x="8" y="-178.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="8" y="-167.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="#bfbfbf" stroke="black" points="85,-204.5 85,-283.5 235,-283.5 235,-204.5 85,-204.5"/>
+<text text-anchor="middle" x="160" y="-271.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::IntImm</text>
+<polyline fill="none" stroke="black" points="85,-264.5 235,-264.5 "/>
+<text text-anchor="middle" x="160" y="-252.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="85,-245.5 235,-245.5 "/>
+<text text-anchor="start" x="93" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ IntImm()</text>
+<text text-anchor="start" x="93" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="93" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </g>
 <!-- Node5 -->
 <g id="node5" class="node"><title>Node5</title>
-<g id="a_node5"><a xlink:href="classtvm_1_1Integer.html" target="_top" xlink:title="Container of constant int that adds more constructors. ">
-<polygon fill="white" stroke="black" points="18.5,-0.5 18.5,-123.5 131.5,-123.5 131.5,-0.5 18.5,-0.5"/>
-<text text-anchor="middle" x="75" y="-111.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Integer</text>
-<polyline fill="none" stroke="black" points="18.5,-104.5 131.5,-104.5 "/>
-<text text-anchor="middle" x="75" y="-92.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="18.5,-85.5 131.5,-85.5 "/>
-<text text-anchor="start" x="26.5" y="-73.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="26.5" y="-62.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="26.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="26.5" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="26.5" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="26.5" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
-<text text-anchor="start" x="26.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator int64_t()</text>
+<g id="a_node5"><a xlink:href="classtvm_1_1Bool.html" target="_top" xlink:title="Boolean constant. ">
+<polygon fill="white" stroke="black" points="0,-33.5 0,-134.5 164,-134.5 164,-33.5 0,-33.5"/>
+<text text-anchor="middle" x="82" y="-122.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Bool</text>
+<polyline fill="none" stroke="black" points="0,-115.5 164,-115.5 "/>
+<text text-anchor="middle" x="82" y="-103.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-96.5 164,-96.5 "/>
+<text text-anchor="start" x="8" y="-84.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Bool()</text>
+<text text-anchor="start" x="8" y="-73.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!()</text>
+<text text-anchor="start" x="8" y="-62.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator bool()</text>
+<text text-anchor="start" x="8" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_NOTNULLABLE</text>
+<text text-anchor="start" x="8" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">_OBJECT_REF_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node5 -->
 <g id="edge4" class="edge"><title>Node1&#45;&gt;Node5</title>
-<path fill="none" stroke="midnightblue" d="M75,-150.144C75,-141.528 75,-132.465 75,-123.574"/>
-<polygon fill="none" stroke="midnightblue" points="71.5001,-150.392 75,-160.392 78.5001,-150.392 71.5001,-150.392"/>
+<path fill="none" stroke="midnightblue" d="M136.403,-195.2C126.942,-176.036 116.04,-153.953 106.492,-134.611"/>
+<polygon fill="none" stroke="midnightblue" points="133.354,-196.931 140.919,-204.349 139.631,-193.833 133.354,-196.931"/>
+</g>
+<!-- Node6 -->
+<g id="node6" class="node"><title>Node6</title>
+<g id="a_node6"><a xlink:href="classtvm_1_1Integer.html" target="_top" xlink:title="Container of constant int that adds more constructors. ">
+<polygon fill="white" stroke="black" points="182.5,-0.5 182.5,-167.5 295.5,-167.5 295.5,-0.5 182.5,-0.5"/>
+<text text-anchor="middle" x="239" y="-155.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Integer</text>
+<polyline fill="none" stroke="black" points="182.5,-148.5 295.5,-148.5 "/>
+<text text-anchor="middle" x="239" y="-136.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="182.5,-129.5 295.5,-129.5 "/>
+<text text-anchor="start" x="190.5" y="-117.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
+<text text-anchor="start" x="190.5" y="-106.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
+<text text-anchor="start" x="190.5" y="-95.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
+<text text-anchor="start" x="190.5" y="-84.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
+<text text-anchor="start" x="190.5" y="-73.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
+<text text-anchor="start" x="190.5" y="-62.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
+<text text-anchor="start" x="190.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator int64_t()</text>
+<text text-anchor="start" x="190.5" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="190.5" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="190.5" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="190.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+</a>
+</g>
+</g>
+<!-- Node1&#45;&gt;Node6 -->
+<g id="edge5" class="edge"><title>Node1&#45;&gt;Node6</title>
+<path fill="none" stroke="midnightblue" d="M183.808,-195.384C188.229,-186.542 192.964,-177.073 197.733,-167.535"/>
+<polygon fill="none" stroke="midnightblue" points="180.667,-193.839 179.326,-204.349 186.928,-196.97 180.667,-193.839"/>
 </g>
 <!-- Node2 -->
 <g id="node2" class="node"><title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1PrimExpr.html" target="_top" xlink:title="Reference to PrimExprNode. ">
-<polygon fill="white" stroke="black" points="-1.42109e-14,-276.5 -1.42109e-14,-377.5 150,-377.5 150,-276.5 -1.42109e-14,-276.5"/>
-<text text-anchor="middle" x="75" y="-365.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::PrimExpr</text>
-<polyline fill="none" stroke="black" points="-1.42109e-14,-358.5 150,-358.5 "/>
-<text text-anchor="middle" x="75" y="-346.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="-1.42109e-14,-339.5 150,-339.5 "/>
-<text text-anchor="start" x="8" y="-327.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
-<text text-anchor="start" x="8" y="-316.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
-<text text-anchor="start" x="8" y="-305.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ dtype()</text>
-<text text-anchor="start" x="8" y="-294.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="8" y="-283.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="85,-320.5 85,-421.5 235,-421.5 235,-320.5 85,-320.5"/>
+<text text-anchor="middle" x="160" y="-409.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::PrimExpr</text>
+<polyline fill="none" stroke="black" points="85,-402.5 235,-402.5 "/>
+<text text-anchor="middle" x="160" y="-390.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="85,-383.5 235,-383.5 "/>
+<text text-anchor="start" x="93" y="-371.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
+<text text-anchor="start" x="93" y="-360.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
+<text text-anchor="start" x="93" y="-349.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ dtype()</text>
+<text text-anchor="start" x="93" y="-338.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="93" y="-327.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</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="M75,-266.186C75,-257.221 75,-248.181 75,-239.808"/>
-<polygon fill="none" stroke="midnightblue" points="71.5001,-266.237 75,-276.238 78.5001,-266.238 71.5001,-266.237"/>
+<path fill="none" stroke="midnightblue" d="M160,-310.186C160,-301.221 160,-292.181 160,-283.808"/>
+<polygon fill="none" stroke="midnightblue" points="156.5,-310.237 160,-320.238 163.5,-310.238 156.5,-310.237"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node"><title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1BaseExpr.html" target="_top" xlink:title="Managed reference to BaseExprNode. ">
-<polygon fill="white" stroke="black" points="-1.42109e-14,-414.5 -1.42109e-14,-482.5 150,-482.5 150,-414.5 -1.42109e-14,-414.5"/>
-<text text-anchor="middle" x="75" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseExpr</text>
-<polyline fill="none" stroke="black" points="-1.42109e-14,-463.5 150,-463.5 "/>
-<text text-anchor="middle" x="75" y="-451.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="-1.42109e-14,-444.5 150,-444.5 "/>
-<text text-anchor="start" x="8" y="-432.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="8" y="-421.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="85,-458.5 85,-526.5 235,-526.5 235,-458.5 85,-458.5"/>
+<text text-anchor="middle" x="160" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseExpr</text>
+<polyline fill="none" stroke="black" points="85,-507.5 235,-507.5 "/>
+<text text-anchor="middle" x="160" y="-495.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="85,-488.5 235,-488.5 "/>
+<text text-anchor="start" x="93" y="-476.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="93" y="-465.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</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="M75,-404.045C75,-395.469 75,-386.408 75,-377.646"/>
-<polygon fill="none" stroke="midnightblue" points="71.5001,-404.213 75,-414.213 78.5001,-404.213 71.5001,-404.213"/>
+<path fill="none" stroke="midnightblue" d="M160,-448.045C160,-439.469 160,-430.408 160,-421.646"/>
+<polygon fill="none" stroke="midnightblue" points="156.5,-448.213 160,-458.213 163.5,-448.213 156.5,-448.213"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node"><title>Node4</title>
-<polygon fill="white" stroke="#bfbfbf" points="44,-519.5 44,-576.5 106,-576.5 106,-519.5 44,-519.5"/>
-<text text-anchor="middle" x="75" y="-564.5" font-family="Helvetica,sans-Serif" font-size="10.00">ObjectRef</text>
-<polyline fill="none" stroke="#bfbfbf" points="44,-557.5 106,-557.5 "/>
-<text text-anchor="middle" x="75" y="-545.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="#bfbfbf" points="44,-538.5 106,-538.5 "/>
-<text text-anchor="middle" x="75" y="-526.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polygon fill="white" stroke="#bfbfbf" points="129,-563.5 129,-620.5 191,-620.5 191,-563.5 129,-563.5"/>
+<text text-anchor="middle" x="160" y="-608.5" font-family="Helvetica,sans-Serif" font-size="10.00">ObjectRef</text>
+<polyline fill="none" stroke="#bfbfbf" points="129,-601.5 191,-601.5 "/>
+<text text-anchor="middle" x="160" y="-589.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="#bfbfbf" points="129,-582.5 191,-582.5 "/>
+<text text-anchor="middle" x="160" y="-570.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
 </g>
 <!-- Node4&#45;&gt;Node3 -->
 <g id="edge3" class="edge"><title>Node4&#45;&gt;Node3</title>
-<path fill="none" stroke="midnightblue" d="M75,-509.063C75,-500.393 75,-491.243 75,-482.786"/>
-<polygon fill="none" stroke="midnightblue" points="71.5001,-509.321 75,-519.321 78.5001,-509.321 71.5001,-509.321"/>
+<path fill="none" stroke="midnightblue" d="M160,-553.063C160,-544.393 160,-535.243 160,-526.786"/>
+<polygon fill="none" stroke="midnightblue" points="156.5,-553.321 160,-563.321 163.5,-553.321 156.5,-553.321"/>
 </g>
 </g>
 </svg>
diff --git a/docs/doxygen/classtvm_1_1Integer-members.html b/docs/doxygen/classtvm_1_1Integer-members.html
index 6c94a8c..1298e0b 100644
--- a/docs/doxygen/classtvm_1_1Integer-members.html
+++ b/docs/doxygen/classtvm_1_1Integer-members.html
@@ -99,10 +99,14 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1Integer.html#a262bc171fdf52db5f34e3c8446fb81aa">Integer</a>(ObjectPtr&lt; Object &gt; node)</td><td class="entry"><a class="el" href="classtvm_1_1Integer.html">tvm::Integer</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_1Integer.html#a1f58cf3c6dab32f1822b9cbccb5569e8">Integer</a>(int value)</td><td class="entry"><a class="el" href="classtvm_1_1Integer.html">tvm::Integer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1Integer.html#a962f080ada680921fbfff0846553ec33">Integer</a>(IntImm other)</td><td class="entry"><a class="el" href="classtvm_1_1Integer.html">tvm::Integer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1Integer.html#abddd0de9406285ff558cc83111ae37bd">Integer</a>(ENum value)</td><td class="entry"><a class="el" href="classtvm_1_1Integer.html">tvm::Integer</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_1Integer.html#a4bdb4edd6acf99ecfca13bf34da04fae">Integer</a>(Enum value)</td><td class="entry"><a class="el" href="classtvm_1_1Integer.html">tvm::Integer</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_1IntImm.html#ac168017343d2153f801adb31338fafce">IntImm</a>(DataType dtype, int64_t value)</td><td class="entry"><a class="el" href="classtvm_1_1IntImm.html">tvm::IntImm</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1Integer.html#ab12102b4412b34faa459408d1fc8ba0e">operator int64_t</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1Integer.html">tvm::Integer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1Integer.html#a8391d24f722dd3795995f3eebc1129b0">operator!=</a>(int other) const </td><td class="entry"><a class="el" href="classtvm_1_1Integer.html">tvm::Integer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1Integer.html#a8924d79df4414d035aafc92310fbc335">operator!=</a>(Enum other) const </td><td class="entry"><a class="el" href="classtvm_1_1Integer.html">tvm::Integer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1Integer.html#ad538a2ae6f636b3ce38fb4162b1c2549">operator=</a>(const IntImm &amp;other)</td><td class="entry"><a class="el" href="classtvm_1_1Integer.html">tvm::Integer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1Integer.html#ad71119ff42add763e11fafe4f4194f6a">operator==</a>(int other) const </td><td class="entry"><a class="el" href="classtvm_1_1Integer.html">tvm::Integer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1Integer.html#ae395bcab691d3bdd0fc5978fe5addea3">operator==</a>(Enum other) const </td><td class="entry"><a class="el" href="classtvm_1_1Integer.html">tvm::Integer</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1PrimExpr.html#a7f0ca30e951608a0b36a77a66d4d19e0">PrimExpr</a>(int32_t value)</td><td class="entry"><a class="el" href="classtvm_1_1PrimExpr.html">tvm::PrimExpr</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1PrimExpr.html#a756d3f8b17b019560946524951ae6118">PrimExpr</a>(float value)</td><td class="entry"><a class="el" href="classtvm_1_1PrimExpr.html">tvm::PrimExpr</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1IntImm.html#a9ce59db1a112fb10b7f384b68a3afc9f">TVM_DEFINE_OBJECT_REF_METHODS</a>(IntImm, PrimExpr, IntImmNode)</td><td class="entry"><a class="el" href="classtvm_1_1IntImm.html">tvm::IntImm</a></td><td class="entry"></td></tr>
diff --git a/docs/doxygen/classtvm_1_1Integer.html b/docs/doxygen/classtvm_1_1Integer.html
index 3ab663d..ceca2d6 100644
--- a/docs/doxygen/classtvm_1_1Integer.html
+++ b/docs/doxygen/classtvm_1_1Integer.html
@@ -102,13 +102,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="dynheader">
 Inheritance diagram for tvm::Integer:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1Integer__inherit__graph.svg" width="211" height="780"><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_1Integer__inherit__graph.svg" width="211" height="839"><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::Integer:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1Integer__coll__graph.svg" width="211" height="780"><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_1Integer__coll__graph.svg" width="211" height="839"><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">
@@ -125,16 +125,26 @@ Public Member Functions</h2></td></tr>
 <tr class="memitem:a962f080ada680921fbfff0846553ec33"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1Integer.html#a962f080ada680921fbfff0846553ec33">Integer</a> (<a class="el" href="classtvm_1_1IntImm.html">IntImm</a> other)</td></tr>
 <tr class="memdesc:a962f080ada680921fbfff0846553ec33"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct integer from int imm.  <a href="#a962f080ada680921fbfff0846553ec33">More...</a><br /></td></tr>
 <tr class="separator:a962f080ada680921fbfff0846553ec33"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:abddd0de9406285ff558cc83111ae37bd"><td class="memTemplParams" colspan="2">template&lt;typename ENum , typename  = typename std::enable_if&lt;std::is_enum&lt;ENum&gt;::value&gt;::type&gt; </td></tr>
-<tr class="memitem:abddd0de9406285ff558cc83111ae37bd"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classtvm_1_1Integer.html#abddd0de9406285ff558cc83111ae37bd">Integer</a> (ENum value)</td></tr>
-<tr class="memdesc:abddd0de9406285ff558cc83111ae37bd"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classtvm_1_1Constructor.html" title="Managed reference to ConstructorNode. ">Constructor</a> from enum.  <a href="#abddd0de9406285ff558cc83111ae37bd">More...</a><br /></td></tr>
-<tr class="separator:abddd0de9406285ff558cc83111ae37bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4bdb4edd6acf99ecfca13bf34da04fae"><td class="memTemplParams" colspan="2">template&lt;typename Enum , typename  = typename std::enable_if&lt;std::is_enum&lt;Enum&gt;::value&gt;::type&gt; </td></tr>
+<tr class="memitem:a4bdb4edd6acf99ecfca13bf34da04fae"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classtvm_1_1Integer.html#a4bdb4edd6acf99ecfca13bf34da04fae">Integer</a> (Enum value)</td></tr>
+<tr class="memdesc:a4bdb4edd6acf99ecfca13bf34da04fae"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classtvm_1_1Constructor.html" title="Managed reference to ConstructorNode. ">Constructor</a> from enum.  <a href="#a4bdb4edd6acf99ecfca13bf34da04fae">More...</a><br /></td></tr>
+<tr class="separator:a4bdb4edd6acf99ecfca13bf34da04fae"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ad538a2ae6f636b3ce38fb4162b1c2549"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1Integer.html">Integer</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1Integer.html#ad538a2ae6f636b3ce38fb4162b1c2549">operator=</a> (const <a class="el" href="classtvm_1_1IntImm.html">IntImm</a> &amp;other)</td></tr>
 <tr class="memdesc:ad538a2ae6f636b3ce38fb4162b1c2549"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assign an expression to integer.  <a href="#ad538a2ae6f636b3ce38fb4162b1c2549">More...</a><br /></td></tr>
 <tr class="separator:ad538a2ae6f636b3ce38fb4162b1c2549"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:ab12102b4412b34faa459408d1fc8ba0e"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1Integer.html#ab12102b4412b34faa459408d1fc8ba0e">operator int64_t</a> () const </td></tr>
 <tr class="memdesc:ab12102b4412b34faa459408d1fc8ba0e"><td class="mdescLeft">&#160;</td><td class="mdescRight">convert to int64_t  <a href="#ab12102b4412b34faa459408d1fc8ba0e">More...</a><br /></td></tr>
 <tr class="separator:ab12102b4412b34faa459408d1fc8ba0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ad71119ff42add763e11fafe4f4194f6a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1Bool.html">Bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1Integer.html#ad71119ff42add763e11fafe4f4194f6a">operator==</a> (int other) const </td></tr>
+<tr class="separator:ad71119ff42add763e11fafe4f4194f6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8391d24f722dd3795995f3eebc1129b0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1Bool.html">Bool</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1Integer.html#a8391d24f722dd3795995f3eebc1129b0">operator!=</a> (int other) const </td></tr>
+<tr class="separator:a8391d24f722dd3795995f3eebc1129b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae395bcab691d3bdd0fc5978fe5addea3"><td class="memTemplParams" colspan="2">template&lt;typename Enum , typename  = typename std::enable_if&lt;std::is_enum&lt;Enum&gt;::value&gt;::type&gt; </td></tr>
+<tr class="memitem:ae395bcab691d3bdd0fc5978fe5addea3"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1Bool.html">Bool</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classtvm_1_1Integer.html#ae395bcab691d3bdd0fc5978fe5addea3">operator==</a> (Enum other) const </td></tr>
+<tr class="separator:ae395bcab691d3bdd0fc5978fe5addea3"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8924d79df4414d035aafc92310fbc335"><td class="memTemplParams" colspan="2">template&lt;typename Enum , typename  = typename std::enable_if&lt;std::is_enum&lt;Enum&gt;::value&gt;::type&gt; </td></tr>
+<tr class="memitem:a8924d79df4414d035aafc92310fbc335"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1Bool.html">Bool</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classtvm_1_1Integer.html#a8924d79df4414d035aafc92310fbc335">operator!=</a> (Enum other) const </td></tr>
+<tr class="separator:a8924d79df4414d035aafc92310fbc335"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="inherit_header pub_methods_classtvm_1_1IntImm"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classtvm_1_1IntImm')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classtvm_1_1IntImm.html">tvm::IntImm</a></td></tr>
 <tr class="memitem:ac168017343d2153f801adb31338fafce inherit pub_methods_classtvm_1_1IntImm"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1IntImm.html#ac168017343d2153f801adb31338fafce">IntImm</a> (<a class="el" href="namespacetvm.html#a41918af1a1dc386388639a9d3ad06c5d">DataType</a> <a class="el" href="classtvm_1_1PrimExpr.html#a1098008618699c33adfbd19e582f9ffd">dtype</a>, int64_t value)</td></tr>
 <tr class="memdesc:ac168017343d2153f801adb31338fafce inherit pub_methods_classtvm_1_1IntImm"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classtvm_1_1Constructor.html" title="Managed reference to ConstructorNode. ">Constructor</a>.  <a href="#ac168017343d2153f801adb31338fafce">More...</a><br /></td></tr>
@@ -268,11 +278,11 @@ Public Member Functions</h2></td></tr>
 
 </div>
 </div>
-<a class="anchor" id="abddd0de9406285ff558cc83111ae37bd"></a>
+<a class="anchor" id="a4bdb4edd6acf99ecfca13bf34da04fae"></a>
 <div class="memitem">
 <div class="memproto">
 <div class="memtemplate">
-template&lt;typename ENum , typename  = typename std::enable_if&lt;std::is_enum&lt;ENum&gt;::value&gt;::type&gt; </div>
+template&lt;typename Enum , typename  = typename std::enable_if&lt;std::is_enum&lt;Enum&gt;::value&gt;::type&gt; </div>
 <table class="mlabels">
   <tr>
   <td class="mlabels-left">
@@ -280,7 +290,7 @@ template&lt;typename ENum , typename  = typename std::enable_if&lt;std::is_enum&
         <tr>
           <td class="memname">tvm::Integer::Integer </td>
           <td>(</td>
-          <td class="paramtype">ENum&#160;</td>
+          <td class="paramtype">Enum&#160;</td>
           <td class="paramname"><em>value</em></td><td>)</td>
           <td></td>
         </tr>
@@ -334,6 +344,56 @@ template&lt;typename ENum , typename  = typename std::enable_if&lt;std::is_enum&
 
 </div>
 </div>
+<a class="anchor" id="a8391d24f722dd3795995f3eebc1129b0"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtvm_1_1Bool.html">Bool</a> tvm::Integer::operator!= </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>other</em></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8924d79df4414d035aafc92310fbc335"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Enum , typename  = typename std::enable_if&lt;std::is_enum&lt;Enum&gt;::value&gt;::type&gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtvm_1_1Bool.html">Bool</a> tvm::Integer::operator!= </td>
+          <td>(</td>
+          <td class="paramtype">Enum&#160;</td>
+          <td class="paramname"><em>other</em></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
 <a class="anchor" id="ad538a2ae6f636b3ce38fb4162b1c2549"></a>
 <div class="memitem">
 <div class="memproto">
@@ -366,6 +426,56 @@ template&lt;typename ENum , typename  = typename std::enable_if&lt;std::is_enum&
 
 </div>
 </div>
+<a class="anchor" id="ad71119ff42add763e11fafe4f4194f6a"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtvm_1_1Bool.html">Bool</a> tvm::Integer::operator== </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>other</em></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="ae395bcab691d3bdd0fc5978fe5addea3"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename Enum , typename  = typename std::enable_if&lt;std::is_enum&lt;Enum&gt;::value&gt;::type&gt; </div>
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname"><a class="el" href="classtvm_1_1Bool.html">Bool</a> tvm::Integer::operator== </td>
+          <td>(</td>
+          <td class="paramtype">Enum&#160;</td>
+          <td class="paramname"><em>other</em></td><td>)</td>
+          <td> const</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
 <hr/>The documentation for this class was generated from the following file:<ul>
 <li>include/tvm/ir/<a class="el" href="ir_2expr_8h_source.html">expr.h</a></li>
 </ul>
diff --git a/docs/doxygen/classtvm_1_1Integer__coll__graph.svg b/docs/doxygen/classtvm_1_1Integer__coll__graph.svg
index 233afb5..11e2f3b 100644
--- a/docs/doxygen/classtvm_1_1Integer__coll__graph.svg
+++ b/docs/doxygen/classtvm_1_1Integer__coll__graph.svg
@@ -4,97 +4,101 @@
 <!-- Generated by graphviz version 2.38.0 (20140413.2041)
  -->
 <!-- Title: tvm::Integer Pages: 1 -->
-<svg width="158pt" height="585pt"
- viewBox="0.00 0.00 158.00 585.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 581)">
+<svg width="158pt" height="629pt"
+ viewBox="0.00 0.00 158.00 629.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 625)">
 <title>tvm::Integer</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-581 154,-581 154,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-625 154,-625 154,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node"><title>Node1</title>
-<polygon fill="#bfbfbf" stroke="black" points="18.5,-0.5 18.5,-123.5 131.5,-123.5 131.5,-0.5 18.5,-0.5"/>
-<text text-anchor="middle" x="75" y="-111.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Integer</text>
-<polyline fill="none" stroke="black" points="18.5,-104.5 131.5,-104.5 "/>
-<text text-anchor="middle" x="75" y="-92.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="18.5,-85.5 131.5,-85.5 "/>
+<polygon fill="#bfbfbf" stroke="black" points="18.5,-0.5 18.5,-167.5 131.5,-167.5 131.5,-0.5 18.5,-0.5"/>
+<text text-anchor="middle" x="75" y="-155.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Integer</text>
+<polyline fill="none" stroke="black" points="18.5,-148.5 131.5,-148.5 "/>
+<text text-anchor="middle" x="75" y="-136.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="18.5,-129.5 131.5,-129.5 "/>
+<text text-anchor="start" x="26.5" y="-117.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
+<text text-anchor="start" x="26.5" y="-106.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
+<text text-anchor="start" x="26.5" y="-95.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
+<text text-anchor="start" x="26.5" y="-84.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
 <text text-anchor="start" x="26.5" y="-73.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="26.5" y="-62.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="26.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="26.5" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="26.5" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="26.5" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
-<text text-anchor="start" x="26.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator int64_t()</text>
+<text text-anchor="start" x="26.5" y="-62.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
+<text text-anchor="start" x="26.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator int64_t()</text>
+<text text-anchor="start" x="26.5" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="26.5" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="26.5" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="26.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
 </g>
 <!-- Node2 -->
 <g id="node2" class="node"><title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1IntImm.html" target="_top" xlink:title="Managed reference class to IntImmNode. ">
-<polygon fill="white" stroke="black" points="-1.42109e-14,-160.5 -1.42109e-14,-239.5 150,-239.5 150,-160.5 -1.42109e-14,-160.5"/>
-<text text-anchor="middle" x="75" y="-227.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::IntImm</text>
-<polyline fill="none" stroke="black" points="-1.42109e-14,-220.5 150,-220.5 "/>
-<text text-anchor="middle" x="75" y="-208.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="-1.42109e-14,-201.5 150,-201.5 "/>
-<text text-anchor="start" x="8" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ IntImm()</text>
-<text text-anchor="start" x="8" y="-178.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="8" y="-167.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="-1.42109e-14,-204.5 -1.42109e-14,-283.5 150,-283.5 150,-204.5 -1.42109e-14,-204.5"/>
+<text text-anchor="middle" x="75" y="-271.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::IntImm</text>
+<polyline fill="none" stroke="black" points="-1.42109e-14,-264.5 150,-264.5 "/>
+<text text-anchor="middle" x="75" y="-252.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="-1.42109e-14,-245.5 150,-245.5 "/>
+<text text-anchor="start" x="8" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ IntImm()</text>
+<text text-anchor="start" x="8" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="8" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</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="M75,-150.144C75,-141.528 75,-132.465 75,-123.574"/>
-<polygon fill="none" stroke="midnightblue" points="71.5001,-150.392 75,-160.392 78.5001,-150.392 71.5001,-150.392"/>
+<path fill="none" stroke="midnightblue" d="M75,-194.264C75,-185.744 75,-176.671 75,-167.535"/>
+<polygon fill="none" stroke="midnightblue" points="71.5001,-194.349 75,-204.349 78.5001,-194.349 71.5001,-194.349"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node"><title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1PrimExpr.html" target="_top" xlink:title="Reference to PrimExprNode. ">
-<polygon fill="white" stroke="black" points="-1.42109e-14,-276.5 -1.42109e-14,-377.5 150,-377.5 150,-276.5 -1.42109e-14,-276.5"/>
-<text text-anchor="middle" x="75" y="-365.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::PrimExpr</text>
-<polyline fill="none" stroke="black" points="-1.42109e-14,-358.5 150,-358.5 "/>
-<text text-anchor="middle" x="75" y="-346.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="-1.42109e-14,-339.5 150,-339.5 "/>
-<text text-anchor="start" x="8" y="-327.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
-<text text-anchor="start" x="8" y="-316.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
-<text text-anchor="start" x="8" y="-305.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ dtype()</text>
-<text text-anchor="start" x="8" y="-294.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="8" y="-283.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="-1.42109e-14,-320.5 -1.42109e-14,-421.5 150,-421.5 150,-320.5 -1.42109e-14,-320.5"/>
+<text text-anchor="middle" x="75" y="-409.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::PrimExpr</text>
+<polyline fill="none" stroke="black" points="-1.42109e-14,-402.5 150,-402.5 "/>
+<text text-anchor="middle" x="75" y="-390.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="-1.42109e-14,-383.5 150,-383.5 "/>
+<text text-anchor="start" x="8" y="-371.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
+<text text-anchor="start" x="8" y="-360.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
+<text text-anchor="start" x="8" y="-349.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ dtype()</text>
+<text text-anchor="start" x="8" y="-338.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="8" y="-327.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</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="M75,-266.186C75,-257.221 75,-248.181 75,-239.808"/>
-<polygon fill="none" stroke="midnightblue" points="71.5001,-266.237 75,-276.238 78.5001,-266.238 71.5001,-266.237"/>
+<path fill="none" stroke="midnightblue" d="M75,-310.186C75,-301.221 75,-292.181 75,-283.808"/>
+<polygon fill="none" stroke="midnightblue" points="71.5001,-310.237 75,-320.238 78.5001,-310.238 71.5001,-310.237"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node"><title>Node4</title>
 <g id="a_node4"><a xlink:href="classtvm_1_1BaseExpr.html" target="_top" xlink:title="Managed reference to BaseExprNode. ">
-<polygon fill="white" stroke="black" points="-1.42109e-14,-414.5 -1.42109e-14,-482.5 150,-482.5 150,-414.5 -1.42109e-14,-414.5"/>
-<text text-anchor="middle" x="75" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseExpr</text>
-<polyline fill="none" stroke="black" points="-1.42109e-14,-463.5 150,-463.5 "/>
-<text text-anchor="middle" x="75" y="-451.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="-1.42109e-14,-444.5 150,-444.5 "/>
-<text text-anchor="start" x="8" y="-432.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="8" y="-421.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="-1.42109e-14,-458.5 -1.42109e-14,-526.5 150,-526.5 150,-458.5 -1.42109e-14,-458.5"/>
+<text text-anchor="middle" x="75" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseExpr</text>
+<polyline fill="none" stroke="black" points="-1.42109e-14,-507.5 150,-507.5 "/>
+<text text-anchor="middle" x="75" y="-495.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="-1.42109e-14,-488.5 150,-488.5 "/>
+<text text-anchor="start" x="8" y="-476.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="8" y="-465.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node4&#45;&gt;Node3 -->
 <g id="edge3" class="edge"><title>Node4&#45;&gt;Node3</title>
-<path fill="none" stroke="midnightblue" d="M75,-404.045C75,-395.469 75,-386.408 75,-377.646"/>
-<polygon fill="none" stroke="midnightblue" points="71.5001,-404.213 75,-414.213 78.5001,-404.213 71.5001,-404.213"/>
+<path fill="none" stroke="midnightblue" d="M75,-448.045C75,-439.469 75,-430.408 75,-421.646"/>
+<polygon fill="none" stroke="midnightblue" points="71.5001,-448.213 75,-458.213 78.5001,-448.213 71.5001,-448.213"/>
 </g>
 <!-- Node5 -->
 <g id="node5" class="node"><title>Node5</title>
-<polygon fill="white" stroke="#bfbfbf" points="44,-519.5 44,-576.5 106,-576.5 106,-519.5 44,-519.5"/>
-<text text-anchor="middle" x="75" y="-564.5" font-family="Helvetica,sans-Serif" font-size="10.00">ObjectRef</text>
-<polyline fill="none" stroke="#bfbfbf" points="44,-557.5 106,-557.5 "/>
-<text text-anchor="middle" x="75" y="-545.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="#bfbfbf" points="44,-538.5 106,-538.5 "/>
-<text text-anchor="middle" x="75" y="-526.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polygon fill="white" stroke="#bfbfbf" points="44,-563.5 44,-620.5 106,-620.5 106,-563.5 44,-563.5"/>
+<text text-anchor="middle" x="75" y="-608.5" font-family="Helvetica,sans-Serif" font-size="10.00">ObjectRef</text>
+<polyline fill="none" stroke="#bfbfbf" points="44,-601.5 106,-601.5 "/>
+<text text-anchor="middle" x="75" y="-589.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="#bfbfbf" points="44,-582.5 106,-582.5 "/>
+<text text-anchor="middle" x="75" y="-570.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
 </g>
 <!-- Node5&#45;&gt;Node4 -->
 <g id="edge4" class="edge"><title>Node5&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M75,-509.063C75,-500.393 75,-491.243 75,-482.786"/>
-<polygon fill="none" stroke="midnightblue" points="71.5001,-509.321 75,-519.321 78.5001,-509.321 71.5001,-509.321"/>
+<path fill="none" stroke="midnightblue" d="M75,-553.063C75,-544.393 75,-535.243 75,-526.786"/>
+<polygon fill="none" stroke="midnightblue" points="71.5001,-553.321 75,-563.321 78.5001,-553.321 71.5001,-553.321"/>
 </g>
 </g>
 </svg>
diff --git a/docs/doxygen/classtvm_1_1Integer__inherit__graph.svg b/docs/doxygen/classtvm_1_1Integer__inherit__graph.svg
index 233afb5..11e2f3b 100644
--- a/docs/doxygen/classtvm_1_1Integer__inherit__graph.svg
+++ b/docs/doxygen/classtvm_1_1Integer__inherit__graph.svg
@@ -4,97 +4,101 @@
 <!-- Generated by graphviz version 2.38.0 (20140413.2041)
  -->
 <!-- Title: tvm::Integer Pages: 1 -->
-<svg width="158pt" height="585pt"
- viewBox="0.00 0.00 158.00 585.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 581)">
+<svg width="158pt" height="629pt"
+ viewBox="0.00 0.00 158.00 629.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 625)">
 <title>tvm::Integer</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-581 154,-581 154,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-625 154,-625 154,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node"><title>Node1</title>
-<polygon fill="#bfbfbf" stroke="black" points="18.5,-0.5 18.5,-123.5 131.5,-123.5 131.5,-0.5 18.5,-0.5"/>
-<text text-anchor="middle" x="75" y="-111.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Integer</text>
-<polyline fill="none" stroke="black" points="18.5,-104.5 131.5,-104.5 "/>
-<text text-anchor="middle" x="75" y="-92.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="18.5,-85.5 131.5,-85.5 "/>
+<polygon fill="#bfbfbf" stroke="black" points="18.5,-0.5 18.5,-167.5 131.5,-167.5 131.5,-0.5 18.5,-0.5"/>
+<text text-anchor="middle" x="75" y="-155.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Integer</text>
+<polyline fill="none" stroke="black" points="18.5,-148.5 131.5,-148.5 "/>
+<text text-anchor="middle" x="75" y="-136.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="18.5,-129.5 131.5,-129.5 "/>
+<text text-anchor="start" x="26.5" y="-117.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
+<text text-anchor="start" x="26.5" y="-106.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
+<text text-anchor="start" x="26.5" y="-95.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
+<text text-anchor="start" x="26.5" y="-84.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
 <text text-anchor="start" x="26.5" y="-73.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="26.5" y="-62.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="26.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="26.5" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="26.5" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="26.5" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
-<text text-anchor="start" x="26.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator int64_t()</text>
+<text text-anchor="start" x="26.5" y="-62.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
+<text text-anchor="start" x="26.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator int64_t()</text>
+<text text-anchor="start" x="26.5" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="26.5" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="26.5" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="26.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
 </g>
 <!-- Node2 -->
 <g id="node2" class="node"><title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1IntImm.html" target="_top" xlink:title="Managed reference class to IntImmNode. ">
-<polygon fill="white" stroke="black" points="-1.42109e-14,-160.5 -1.42109e-14,-239.5 150,-239.5 150,-160.5 -1.42109e-14,-160.5"/>
-<text text-anchor="middle" x="75" y="-227.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::IntImm</text>
-<polyline fill="none" stroke="black" points="-1.42109e-14,-220.5 150,-220.5 "/>
-<text text-anchor="middle" x="75" y="-208.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="-1.42109e-14,-201.5 150,-201.5 "/>
-<text text-anchor="start" x="8" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ IntImm()</text>
-<text text-anchor="start" x="8" y="-178.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="8" y="-167.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="-1.42109e-14,-204.5 -1.42109e-14,-283.5 150,-283.5 150,-204.5 -1.42109e-14,-204.5"/>
+<text text-anchor="middle" x="75" y="-271.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::IntImm</text>
+<polyline fill="none" stroke="black" points="-1.42109e-14,-264.5 150,-264.5 "/>
+<text text-anchor="middle" x="75" y="-252.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="-1.42109e-14,-245.5 150,-245.5 "/>
+<text text-anchor="start" x="8" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ IntImm()</text>
+<text text-anchor="start" x="8" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="8" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</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="M75,-150.144C75,-141.528 75,-132.465 75,-123.574"/>
-<polygon fill="none" stroke="midnightblue" points="71.5001,-150.392 75,-160.392 78.5001,-150.392 71.5001,-150.392"/>
+<path fill="none" stroke="midnightblue" d="M75,-194.264C75,-185.744 75,-176.671 75,-167.535"/>
+<polygon fill="none" stroke="midnightblue" points="71.5001,-194.349 75,-204.349 78.5001,-194.349 71.5001,-194.349"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node"><title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1PrimExpr.html" target="_top" xlink:title="Reference to PrimExprNode. ">
-<polygon fill="white" stroke="black" points="-1.42109e-14,-276.5 -1.42109e-14,-377.5 150,-377.5 150,-276.5 -1.42109e-14,-276.5"/>
-<text text-anchor="middle" x="75" y="-365.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::PrimExpr</text>
-<polyline fill="none" stroke="black" points="-1.42109e-14,-358.5 150,-358.5 "/>
-<text text-anchor="middle" x="75" y="-346.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="-1.42109e-14,-339.5 150,-339.5 "/>
-<text text-anchor="start" x="8" y="-327.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
-<text text-anchor="start" x="8" y="-316.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
-<text text-anchor="start" x="8" y="-305.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ dtype()</text>
-<text text-anchor="start" x="8" y="-294.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="8" y="-283.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="-1.42109e-14,-320.5 -1.42109e-14,-421.5 150,-421.5 150,-320.5 -1.42109e-14,-320.5"/>
+<text text-anchor="middle" x="75" y="-409.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::PrimExpr</text>
+<polyline fill="none" stroke="black" points="-1.42109e-14,-402.5 150,-402.5 "/>
+<text text-anchor="middle" x="75" y="-390.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="-1.42109e-14,-383.5 150,-383.5 "/>
+<text text-anchor="start" x="8" y="-371.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
+<text text-anchor="start" x="8" y="-360.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
+<text text-anchor="start" x="8" y="-349.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ dtype()</text>
+<text text-anchor="start" x="8" y="-338.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="8" y="-327.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</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="M75,-266.186C75,-257.221 75,-248.181 75,-239.808"/>
-<polygon fill="none" stroke="midnightblue" points="71.5001,-266.237 75,-276.238 78.5001,-266.238 71.5001,-266.237"/>
+<path fill="none" stroke="midnightblue" d="M75,-310.186C75,-301.221 75,-292.181 75,-283.808"/>
+<polygon fill="none" stroke="midnightblue" points="71.5001,-310.237 75,-320.238 78.5001,-310.238 71.5001,-310.237"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node"><title>Node4</title>
 <g id="a_node4"><a xlink:href="classtvm_1_1BaseExpr.html" target="_top" xlink:title="Managed reference to BaseExprNode. ">
-<polygon fill="white" stroke="black" points="-1.42109e-14,-414.5 -1.42109e-14,-482.5 150,-482.5 150,-414.5 -1.42109e-14,-414.5"/>
-<text text-anchor="middle" x="75" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseExpr</text>
-<polyline fill="none" stroke="black" points="-1.42109e-14,-463.5 150,-463.5 "/>
-<text text-anchor="middle" x="75" y="-451.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="-1.42109e-14,-444.5 150,-444.5 "/>
-<text text-anchor="start" x="8" y="-432.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="8" y="-421.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="-1.42109e-14,-458.5 -1.42109e-14,-526.5 150,-526.5 150,-458.5 -1.42109e-14,-458.5"/>
+<text text-anchor="middle" x="75" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseExpr</text>
+<polyline fill="none" stroke="black" points="-1.42109e-14,-507.5 150,-507.5 "/>
+<text text-anchor="middle" x="75" y="-495.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="-1.42109e-14,-488.5 150,-488.5 "/>
+<text text-anchor="start" x="8" y="-476.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="8" y="-465.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node4&#45;&gt;Node3 -->
 <g id="edge3" class="edge"><title>Node4&#45;&gt;Node3</title>
-<path fill="none" stroke="midnightblue" d="M75,-404.045C75,-395.469 75,-386.408 75,-377.646"/>
-<polygon fill="none" stroke="midnightblue" points="71.5001,-404.213 75,-414.213 78.5001,-404.213 71.5001,-404.213"/>
+<path fill="none" stroke="midnightblue" d="M75,-448.045C75,-439.469 75,-430.408 75,-421.646"/>
+<polygon fill="none" stroke="midnightblue" points="71.5001,-448.213 75,-458.213 78.5001,-448.213 71.5001,-448.213"/>
 </g>
 <!-- Node5 -->
 <g id="node5" class="node"><title>Node5</title>
-<polygon fill="white" stroke="#bfbfbf" points="44,-519.5 44,-576.5 106,-576.5 106,-519.5 44,-519.5"/>
-<text text-anchor="middle" x="75" y="-564.5" font-family="Helvetica,sans-Serif" font-size="10.00">ObjectRef</text>
-<polyline fill="none" stroke="#bfbfbf" points="44,-557.5 106,-557.5 "/>
-<text text-anchor="middle" x="75" y="-545.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="#bfbfbf" points="44,-538.5 106,-538.5 "/>
-<text text-anchor="middle" x="75" y="-526.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polygon fill="white" stroke="#bfbfbf" points="44,-563.5 44,-620.5 106,-620.5 106,-563.5 44,-563.5"/>
+<text text-anchor="middle" x="75" y="-608.5" font-family="Helvetica,sans-Serif" font-size="10.00">ObjectRef</text>
+<polyline fill="none" stroke="#bfbfbf" points="44,-601.5 106,-601.5 "/>
+<text text-anchor="middle" x="75" y="-589.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="#bfbfbf" points="44,-582.5 106,-582.5 "/>
+<text text-anchor="middle" x="75" y="-570.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
 </g>
 <!-- Node5&#45;&gt;Node4 -->
 <g id="edge4" class="edge"><title>Node5&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M75,-509.063C75,-500.393 75,-491.243 75,-482.786"/>
-<polygon fill="none" stroke="midnightblue" points="71.5001,-509.321 75,-519.321 78.5001,-509.321 71.5001,-509.321"/>
+<path fill="none" stroke="midnightblue" d="M75,-553.063C75,-544.393 75,-535.243 75,-526.786"/>
+<polygon fill="none" stroke="midnightblue" points="71.5001,-553.321 75,-563.321 78.5001,-553.321 71.5001,-553.321"/>
 </g>
 </g>
 </svg>
diff --git a/docs/doxygen/classtvm_1_1PrimExpr.html b/docs/doxygen/classtvm_1_1PrimExpr.html
index a31ad6b..b739ef9 100644
--- a/docs/doxygen/classtvm_1_1PrimExpr.html
+++ b/docs/doxygen/classtvm_1_1PrimExpr.html
@@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="dynheader">
 Inheritance diagram for tvm::PrimExpr:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1PrimExpr__inherit__graph.svg" width="1056" height="824"><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_1PrimExpr__inherit__graph.svg" width="1056" height="883"><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/doxygen/classtvm_1_1PrimExpr__inherit__graph.svg b/docs/doxygen/classtvm_1_1PrimExpr__inherit__graph.svg
index 92868c9..fa49742 100644
--- a/docs/doxygen/classtvm_1_1PrimExpr__inherit__graph.svg
+++ b/docs/doxygen/classtvm_1_1PrimExpr__inherit__graph.svg
@@ -4,195 +4,220 @@
 <!-- Generated by graphviz version 2.38.0 (20140413.2041)
  -->
 <!-- Title: tvm::PrimExpr Pages: 1 -->
-<svg width="792pt" height="618pt"
- viewBox="0.00 0.00 792.00 618.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 614)">
+<svg width="792pt" height="662pt"
+ viewBox="0.00 0.00 792.00 662.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 658)">
 <title>tvm::PrimExpr</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-614 788,-614 788,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-658 788,-658 788,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node"><title>Node1</title>
-<polygon fill="#bfbfbf" stroke="black" points="336,-309.5 336,-410.5 486,-410.5 486,-309.5 336,-309.5"/>
-<text text-anchor="middle" x="411" y="-398.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::PrimExpr</text>
-<polyline fill="none" stroke="black" points="336,-391.5 486,-391.5 "/>
-<text text-anchor="middle" x="411" y="-379.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="336,-372.5 486,-372.5 "/>
-<text text-anchor="start" x="344" y="-360.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
-<text text-anchor="start" x="344" y="-349.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
-<text text-anchor="start" x="344" y="-338.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ dtype()</text>
-<text text-anchor="start" x="344" y="-327.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="344" y="-316.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="#bfbfbf" stroke="black" points="336,-353.5 336,-454.5 486,-454.5 486,-353.5 336,-353.5"/>
+<text text-anchor="middle" x="411" y="-442.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::PrimExpr</text>
+<polyline fill="none" stroke="black" points="336,-435.5 486,-435.5 "/>
+<text text-anchor="middle" x="411" y="-423.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="336,-416.5 486,-416.5 "/>
+<text text-anchor="start" x="344" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
+<text text-anchor="start" x="344" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ PrimExpr()</text>
+<text text-anchor="start" x="344" y="-382.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ dtype()</text>
+<text text-anchor="start" x="344" y="-371.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="344" y="-360.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node"><title>Node4</title>
 <g id="a_node4"><a xlink:href="classtvm_1_1FloatImm.html" target="_top" xlink:title="Managed reference class to FloatImmNode. ">
-<polygon fill="white" stroke="black" points="0,-177 0,-256 150,-256 150,-177 0,-177"/>
-<text text-anchor="middle" x="75" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::FloatImm</text>
-<polyline fill="none" stroke="black" points="0,-237 150,-237 "/>
-<text text-anchor="middle" x="75" y="-225" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="0,-218 150,-218 "/>
-<text text-anchor="start" x="8" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">+ FloatImm()</text>
-<text text-anchor="start" x="8" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="8" y="-184" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="0,-221 0,-300 150,-300 150,-221 0,-221"/>
+<text text-anchor="middle" x="75" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::FloatImm</text>
+<polyline fill="none" stroke="black" points="0,-281 150,-281 "/>
+<text text-anchor="middle" x="75" y="-269" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-262 150,-262 "/>
+<text text-anchor="start" x="8" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ FloatImm()</text>
+<text text-anchor="start" x="8" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="8" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node4 -->
 <g id="edge3" class="edge"><title>Node1&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M326.163,-335.956C276.239,-320.959 212.589,-299.309 159,-273 148.958,-268.07 138.687,-262.136 128.93,-256.009"/>
-<polygon fill="none" stroke="midnightblue" points="325.375,-339.373 335.957,-338.866 327.368,-332.663 325.375,-339.373"/>
+<path fill="none" stroke="midnightblue" d="M326.163,-379.956C276.239,-364.959 212.589,-343.309 159,-317 148.958,-312.07 138.687,-306.136 128.93,-300.009"/>
+<polygon fill="none" stroke="midnightblue" points="325.375,-383.373 335.957,-382.866 327.368,-376.663 325.375,-383.373"/>
 </g>
 <!-- Node5 -->
 <g id="node5" class="node"><title>Node5</title>
 <g id="a_node5"><a xlink:href="classtvm_1_1IntImm.html" target="_top" xlink:title="Managed reference class to IntImmNode. ">
-<polygon fill="white" stroke="black" points="168,-177 168,-256 318,-256 318,-177 168,-177"/>
-<text text-anchor="middle" x="243" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::IntImm</text>
-<polyline fill="none" stroke="black" points="168,-237 318,-237 "/>
-<text text-anchor="middle" x="243" y="-225" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="168,-218 318,-218 "/>
-<text text-anchor="start" x="176" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">+ IntImm()</text>
-<text text-anchor="start" x="176" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="176" y="-184" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="168,-221 168,-300 318,-300 318,-221 168,-221"/>
+<text text-anchor="middle" x="243" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::IntImm</text>
+<polyline fill="none" stroke="black" points="168,-281 318,-281 "/>
+<text text-anchor="middle" x="243" y="-269" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="168,-262 318,-262 "/>
+<text text-anchor="start" x="176" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ IntImm()</text>
+<text text-anchor="start" x="176" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="176" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node5 -->
 <g id="edge4" class="edge"><title>Node1&#45;&gt;Node5</title>
-<path fill="none" stroke="midnightblue" d="M343.919,-302.5C325.412,-286.913 305.763,-270.363 288.767,-256.048"/>
-<polygon fill="none" stroke="midnightblue" points="341.866,-305.347 351.769,-309.112 346.376,-299.993 341.866,-305.347"/>
-</g>
-<!-- Node7 -->
-<g id="node7" class="node"><title>Node7</title>
-<g id="a_node7"><a xlink:href="classtvm_1_1tir_1_1BufferLoad.html" target="_top" xlink:title="{tvm::tir::BufferLoad\n||+ BufferLoad()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
-<polygon fill="white" stroke="black" points="336,-177 336,-256 486,-256 486,-177 336,-177"/>
-<text text-anchor="middle" x="411" y="-244" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::tir::BufferLoad</text>
-<polyline fill="none" stroke="black" points="336,-237 486,-237 "/>
-<text text-anchor="middle" x="411" y="-225" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="336,-218 486,-218 "/>
-<text text-anchor="start" x="344" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">+ BufferLoad()</text>
-<text text-anchor="start" x="344" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="344" y="-184" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
-</a>
-</g>
-</g>
-<!-- Node1&#45;&gt;Node7 -->
-<g id="edge6" class="edge"><title>Node1&#45;&gt;Node7</title>
-<path fill="none" stroke="midnightblue" d="M411,-298.774C411,-284.383 411,-269.398 411,-256.272"/>
-<polygon fill="none" stroke="midnightblue" points="407.5,-299.112 411,-309.112 414.5,-299.112 407.5,-299.112"/>
+<path fill="none" stroke="midnightblue" d="M343.919,-346.5C325.412,-330.913 305.763,-314.363 288.767,-300.048"/>
+<polygon fill="none" stroke="midnightblue" points="341.866,-349.347 351.769,-353.112 346.376,-343.993 341.866,-349.347"/>
 </g>
 <!-- Node8 -->
 <g id="node8" class="node"><title>Node8</title>
-<g id="a_node8"><a xlink:href="classtvm_1_1tir_1_1StringImm.html" target="_top" xlink:title="{tvm::tir::StringImm\n||+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
-<polygon fill="white" stroke="black" points="504,-182.5 504,-250.5 654,-250.5 654,-182.5 504,-182.5"/>
-<text text-anchor="middle" x="579" y="-238.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::tir::StringImm</text>
-<polyline fill="none" stroke="black" points="504,-231.5 654,-231.5 "/>
-<text text-anchor="middle" x="579" y="-219.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="504,-212.5 654,-212.5 "/>
-<text text-anchor="start" x="512" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="512" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<g id="a_node8"><a xlink:href="classtvm_1_1tir_1_1BufferLoad.html" target="_top" xlink:title="{tvm::tir::BufferLoad\n||+ BufferLoad()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
+<polygon fill="white" stroke="black" points="336,-221 336,-300 486,-300 486,-221 336,-221"/>
+<text text-anchor="middle" x="411" y="-288" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::tir::BufferLoad</text>
+<polyline fill="none" stroke="black" points="336,-281 486,-281 "/>
+<text text-anchor="middle" x="411" y="-269" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="336,-262 486,-262 "/>
+<text text-anchor="start" x="344" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ BufferLoad()</text>
+<text text-anchor="start" x="344" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="344" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node8 -->
 <g id="edge7" class="edge"><title>Node1&#45;&gt;Node8</title>
-<path fill="none" stroke="midnightblue" d="M477.882,-302.668C498.86,-284.999 521.326,-266.077 539.741,-250.567"/>
-<polygon fill="none" stroke="midnightblue" points="475.624,-299.993 470.231,-309.112 480.134,-305.347 475.624,-299.993"/>
+<path fill="none" stroke="midnightblue" d="M411,-342.774C411,-328.383 411,-313.398 411,-300.272"/>
+<polygon fill="none" stroke="midnightblue" points="407.5,-343.112 411,-353.112 414.5,-343.112 407.5,-343.112"/>
 </g>
 <!-- Node9 -->
 <g id="node9" class="node"><title>Node9</title>
-<g id="a_node9"><a xlink:href="classtvm_1_1tir_1_1Var.html" target="_top" xlink:title="a named variable in TVM ">
-<polygon fill="white" stroke="black" points="672,-160.5 672,-272.5 784,-272.5 784,-160.5 672,-160.5"/>
-<text text-anchor="middle" x="728" y="-260.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::tir::Var</text>
-<polyline fill="none" stroke="black" points="672,-253.5 784,-253.5 "/>
-<text text-anchor="middle" x="728" y="-241.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="672,-234.5 784,-234.5 "/>
-<text text-anchor="start" x="680" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Var()</text>
-<text text-anchor="start" x="680" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Var()</text>
-<text text-anchor="start" x="680" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Var()</text>
-<text text-anchor="start" x="680" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ copy_with_suffix()</text>
-<text text-anchor="start" x="680" y="-178.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="680" y="-167.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<g id="a_node9"><a xlink:href="classtvm_1_1tir_1_1StringImm.html" target="_top" xlink:title="{tvm::tir::StringImm\n||+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
+<polygon fill="white" stroke="black" points="504,-226.5 504,-294.5 654,-294.5 654,-226.5 504,-226.5"/>
+<text text-anchor="middle" x="579" y="-282.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::tir::StringImm</text>
+<polyline fill="none" stroke="black" points="504,-275.5 654,-275.5 "/>
+<text text-anchor="middle" x="579" y="-263.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="504,-256.5 654,-256.5 "/>
+<text text-anchor="start" x="512" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="512" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node9 -->
 <g id="edge8" class="edge"><title>Node1&#45;&gt;Node9</title>
-<path fill="none" stroke="midnightblue" d="M496.007,-338.651C546.537,-324.484 610.751,-302.763 663,-273 665.965,-271.311 668.923,-269.477 671.849,-267.538"/>
-<polygon fill="none" stroke="midnightblue" points="494.802,-335.352 486.091,-341.383 496.662,-342.101 494.802,-335.352"/>
+<path fill="none" stroke="midnightblue" d="M477.882,-346.668C498.86,-328.999 521.326,-310.077 539.741,-294.567"/>
+<polygon fill="none" stroke="midnightblue" points="475.624,-343.993 470.231,-353.112 480.134,-349.347 475.624,-343.993"/>
+</g>
+<!-- Node10 -->
+<g id="node10" class="node"><title>Node10</title>
+<g id="a_node10"><a xlink:href="classtvm_1_1tir_1_1Var.html" target="_top" xlink:title="a named variable in TVM ">
+<polygon fill="white" stroke="black" points="672,-204.5 672,-316.5 784,-316.5 784,-204.5 672,-204.5"/>
+<text text-anchor="middle" x="728" y="-304.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::tir::Var</text>
+<polyline fill="none" stroke="black" points="672,-297.5 784,-297.5 "/>
+<text text-anchor="middle" x="728" y="-285.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="672,-278.5 784,-278.5 "/>
+<text text-anchor="start" x="680" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Var()</text>
+<text text-anchor="start" x="680" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Var()</text>
+<text text-anchor="start" x="680" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Var()</text>
+<text text-anchor="start" x="680" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ copy_with_suffix()</text>
+<text text-anchor="start" x="680" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="680" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+</a>
+</g>
+</g>
+<!-- Node1&#45;&gt;Node10 -->
+<g id="edge9" class="edge"><title>Node1&#45;&gt;Node10</title>
+<path fill="none" stroke="midnightblue" d="M496.007,-382.651C546.537,-368.484 610.751,-346.763 663,-317 665.965,-315.311 668.923,-313.477 671.849,-311.538"/>
+<polygon fill="none" stroke="midnightblue" points="494.802,-379.352 486.091,-385.383 496.662,-386.101 494.802,-379.352"/>
 </g>
 <!-- Node2 -->
 <g id="node2" class="node"><title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1BaseExpr.html" target="_top" xlink:title="Managed reference to BaseExprNode. ">
-<polygon fill="white" stroke="black" points="336,-447.5 336,-515.5 486,-515.5 486,-447.5 336,-447.5"/>
-<text text-anchor="middle" x="411" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseExpr</text>
-<polyline fill="none" stroke="black" points="336,-496.5 486,-496.5 "/>
-<text text-anchor="middle" x="411" y="-484.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="336,-477.5 486,-477.5 "/>
-<text text-anchor="start" x="344" y="-465.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="344" y="-454.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="336,-491.5 336,-559.5 486,-559.5 486,-491.5 336,-491.5"/>
+<text text-anchor="middle" x="411" y="-547.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseExpr</text>
+<polyline fill="none" stroke="black" points="336,-540.5 486,-540.5 "/>
+<text text-anchor="middle" x="411" y="-528.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="336,-521.5 486,-521.5 "/>
+<text text-anchor="start" x="344" y="-509.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="344" y="-498.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</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="M411,-437.045C411,-428.469 411,-419.408 411,-410.646"/>
-<polygon fill="none" stroke="midnightblue" points="407.5,-437.213 411,-447.213 414.5,-437.213 407.5,-437.213"/>
+<path fill="none" stroke="midnightblue" d="M411,-481.045C411,-472.469 411,-463.408 411,-454.646"/>
+<polygon fill="none" stroke="midnightblue" points="407.5,-481.213 411,-491.213 414.5,-481.213 407.5,-481.213"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node"><title>Node3</title>
-<polygon fill="white" stroke="#bfbfbf" points="380,-552.5 380,-609.5 442,-609.5 442,-552.5 380,-552.5"/>
-<text text-anchor="middle" x="411" y="-597.5" font-family="Helvetica,sans-Serif" font-size="10.00">ObjectRef</text>
-<polyline fill="none" stroke="#bfbfbf" points="380,-590.5 442,-590.5 "/>
-<text text-anchor="middle" x="411" y="-578.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="#bfbfbf" points="380,-571.5 442,-571.5 "/>
-<text text-anchor="middle" x="411" y="-559.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polygon fill="white" stroke="#bfbfbf" points="380,-596.5 380,-653.5 442,-653.5 442,-596.5 380,-596.5"/>
+<text text-anchor="middle" x="411" y="-641.5" font-family="Helvetica,sans-Serif" font-size="10.00">ObjectRef</text>
+<polyline fill="none" stroke="#bfbfbf" points="380,-634.5 442,-634.5 "/>
+<text text-anchor="middle" x="411" y="-622.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="#bfbfbf" points="380,-615.5 442,-615.5 "/>
+<text text-anchor="middle" x="411" y="-603.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge"><title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M411,-542.063C411,-533.393 411,-524.243 411,-515.786"/>
-<polygon fill="none" stroke="midnightblue" points="407.5,-542.321 411,-552.321 414.5,-542.321 407.5,-542.321"/>
+<path fill="none" stroke="midnightblue" d="M411,-586.063C411,-577.393 411,-568.243 411,-559.786"/>
+<polygon fill="none" stroke="midnightblue" points="407.5,-586.321 411,-596.321 414.5,-586.321 407.5,-586.321"/>
 </g>
 <!-- Node6 -->
 <g id="node6" class="node"><title>Node6</title>
-<g id="a_node6"><a xlink:href="classtvm_1_1Integer.html" target="_top" xlink:title="Container of constant int that adds more constructors. ">
-<polygon fill="white" stroke="black" points="186.5,-0.5 186.5,-123.5 299.5,-123.5 299.5,-0.5 186.5,-0.5"/>
-<text text-anchor="middle" x="243" y="-111.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Integer</text>
-<polyline fill="none" stroke="black" points="186.5,-104.5 299.5,-104.5 "/>
-<text text-anchor="middle" x="243" y="-92.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="186.5,-85.5 299.5,-85.5 "/>
-<text text-anchor="start" x="194.5" y="-73.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="194.5" y="-62.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="194.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="194.5" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="194.5" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
-<text text-anchor="start" x="194.5" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
-<text text-anchor="start" x="194.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator int64_t()</text>
+<g id="a_node6"><a xlink:href="classtvm_1_1Bool.html" target="_top" xlink:title="Boolean constant. ">
+<polygon fill="white" stroke="black" points="83,-33.5 83,-134.5 247,-134.5 247,-33.5 83,-33.5"/>
+<text text-anchor="middle" x="165" y="-122.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Bool</text>
+<polyline fill="none" stroke="black" points="83,-115.5 247,-115.5 "/>
+<text text-anchor="middle" x="165" y="-103.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="83,-96.5 247,-96.5 "/>
+<text text-anchor="start" x="91" y="-84.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Bool()</text>
+<text text-anchor="start" x="91" y="-73.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!()</text>
+<text text-anchor="start" x="91" y="-62.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator bool()</text>
+<text text-anchor="start" x="91" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_NOTNULLABLE</text>
+<text text-anchor="start" x="91" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">_OBJECT_REF_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node5&#45;&gt;Node6 -->
 <g id="edge5" class="edge"><title>Node5&#45;&gt;Node6</title>
-<path fill="none" stroke="midnightblue" d="M243,-166.507C243,-152.892 243,-137.943 243,-123.743"/>
-<polygon fill="none" stroke="midnightblue" points="239.5,-166.623 243,-176.623 246.5,-166.623 239.5,-166.623"/>
+<path fill="none" stroke="midnightblue" d="M221.559,-211.533C210.867,-187.614 197.95,-158.715 187.161,-134.578"/>
+<polygon fill="none" stroke="midnightblue" points="218.413,-213.072 225.689,-220.773 224.804,-210.215 218.413,-213.072"/>
 </g>
-<!-- Node10 -->
-<g id="node10" class="node"><title>Node10</title>
-<g id="a_node10"><a xlink:href="classtvm_1_1tir_1_1SizeVar.html" target="_top" xlink:title="a named variable represents a tensor index size ">
-<polygon fill="white" stroke="black" points="681.5,-17 681.5,-107 774.5,-107 774.5,-17 681.5,-17"/>
-<text text-anchor="middle" x="728" y="-95" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::tir::SizeVar</text>
-<polyline fill="none" stroke="black" points="681.5,-88 774.5,-88 "/>
-<text text-anchor="middle" x="728" y="-76" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="681.5,-69 774.5,-69 "/>
-<text text-anchor="start" x="689.5" y="-57" font-family="Helvetica,sans-Serif" font-size="10.00">+ SizeVar()</text>
-<text text-anchor="start" x="689.5" y="-46" font-family="Helvetica,sans-Serif" font-size="10.00">+ SizeVar()</text>
-<text text-anchor="start" x="689.5" y="-35" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="689.5" y="-24" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<!-- Node7 -->
+<g id="node7" class="node"><title>Node7</title>
+<g id="a_node7"><a xlink:href="classtvm_1_1Integer.html" target="_top" xlink:title="Container of constant int that adds more constructors. ">
+<polygon fill="white" stroke="black" points="265.5,-0.5 265.5,-167.5 378.5,-167.5 378.5,-0.5 265.5,-0.5"/>
+<text text-anchor="middle" x="322" y="-155.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Integer</text>
+<polyline fill="none" stroke="black" points="265.5,-148.5 378.5,-148.5 "/>
+<text text-anchor="middle" x="322" y="-136.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="265.5,-129.5 378.5,-129.5 "/>
+<text text-anchor="start" x="273.5" y="-117.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
+<text text-anchor="start" x="273.5" y="-106.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
+<text text-anchor="start" x="273.5" y="-95.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
+<text text-anchor="start" x="273.5" y="-84.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
+<text text-anchor="start" x="273.5" y="-73.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Integer()</text>
+<text text-anchor="start" x="273.5" y="-62.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
+<text text-anchor="start" x="273.5" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator int64_t()</text>
+<text text-anchor="start" x="273.5" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="273.5" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="273.5" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="273.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+</a>
+</g>
+</g>
+<!-- Node5&#45;&gt;Node7 -->
+<g id="edge6" class="edge"><title>Node5&#45;&gt;Node7</title>
+<path fill="none" stroke="midnightblue" d="M264.685,-211.601C270.867,-197.945 277.786,-182.662 284.62,-167.567"/>
+<polygon fill="none" stroke="midnightblue" points="261.469,-210.219 260.533,-220.773 267.845,-213.106 261.469,-210.219"/>
+</g>
+<!-- Node11 -->
+<g id="node11" class="node"><title>Node11</title>
+<g id="a_node11"><a xlink:href="classtvm_1_1tir_1_1SizeVar.html" target="_top" xlink:title="a named variable represents a tensor index size ">
+<polygon fill="white" stroke="black" points="681.5,-39 681.5,-129 774.5,-129 774.5,-39 681.5,-39"/>
+<text text-anchor="middle" x="728" y="-117" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::tir::SizeVar</text>
+<polyline fill="none" stroke="black" points="681.5,-110 774.5,-110 "/>
+<text text-anchor="middle" x="728" y="-98" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="681.5,-91 774.5,-91 "/>
+<text text-anchor="start" x="689.5" y="-79" font-family="Helvetica,sans-Serif" font-size="10.00">+ SizeVar()</text>
+<text text-anchor="start" x="689.5" y="-68" font-family="Helvetica,sans-Serif" font-size="10.00">+ SizeVar()</text>
+<text text-anchor="start" x="689.5" y="-57" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="689.5" y="-46" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
 </a>
 </g>
 </g>
-<!-- Node9&#45;&gt;Node10 -->
-<g id="edge9" class="edge"><title>Node9&#45;&gt;Node10</title>
-<path fill="none" stroke="midnightblue" d="M728,-150.093C728,-135.709 728,-120.799 728,-107.468"/>
-<polygon fill="none" stroke="midnightblue" points="724.5,-150.444 728,-160.444 731.5,-150.444 724.5,-150.444"/>
+<!-- Node10&#45;&gt;Node11 -->
+<g id="edge10" class="edge"><title>Node10&#45;&gt;Node11</title>
+<path fill="none" stroke="midnightblue" d="M728,-194.143C728,-172.438 728,-148.8 728,-129.09"/>
+<polygon fill="none" stroke="midnightblue" points="724.5,-194.287 728,-204.287 731.5,-194.287 724.5,-194.287"/>
 </g>
 </g>
 </svg>
diff --git a/docs/doxygen/classtvm_1_1RelayExprNode__inherit__graph.svg b/docs/doxygen/classtvm_1_1RelayExprNode__inherit__graph.svg
index 4ce9a10..5846442 100644
--- a/docs/doxygen/classtvm_1_1RelayExprNode__inherit__graph.svg
+++ b/docs/doxygen/classtvm_1_1RelayExprNode__inherit__graph.svg
@@ -25,21 +25,22 @@
 <!-- Node4 -->
 <g id="node4" class="node"><title>Node4</title>
 <g id="a_node4"><a xlink:href="classtvm_1_1BaseFuncNode.html" target="_top" xlink:title="Base node of all functions. ">
-<polygon fill="white" stroke="black" points="111.5,-232 111.5,-322 315.5,-322 315.5,-232 111.5,-232"/>
-<text text-anchor="middle" x="213.5" y="-310" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseFuncNode</text>
-<polyline fill="none" stroke="black" points="111.5,-303 315.5,-303 "/>
-<text text-anchor="start" x="119.5" y="-291" font-family="Helvetica,sans-Serif" font-size="10.00">+ attrs</text>
-<text text-anchor="start" x="119.5" y="-280" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<polyline fill="none" stroke="black" points="111.5,-273 315.5,-273 "/>
-<text text-anchor="start" x="119.5" y="-261" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetAttr()</text>
-<text text-anchor="start" x="119.5" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasNonzeroAttr()</text>
-<text text-anchor="start" x="119.5" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_INFO()</text>
+<polygon fill="white" stroke="black" points="111.5,-226.5 111.5,-327.5 315.5,-327.5 315.5,-226.5 111.5,-226.5"/>
+<text text-anchor="middle" x="213.5" y="-315.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseFuncNode</text>
+<polyline fill="none" stroke="black" points="111.5,-308.5 315.5,-308.5 "/>
+<text text-anchor="start" x="119.5" y="-296.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ attrs</text>
+<text text-anchor="start" x="119.5" y="-285.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<polyline fill="none" stroke="black" points="111.5,-278.5 315.5,-278.5 "/>
+<text text-anchor="start" x="119.5" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetAttr()</text>
+<text text-anchor="start" x="119.5" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetAttr()</text>
+<text text-anchor="start" x="119.5" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasNonzeroAttr()</text>
+<text text-anchor="start" x="119.5" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_INFO()</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node4 -->
 <g id="edge3" class="edge"><title>Node1&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M1772.04,-455.957C1436.4,-449.284 456.793,-425.406 323.5,-372 296.567,-361.209 271.546,-341.021 252.194,-322.112"/>
+<path fill="none" stroke="midnightblue" d="M1772.04,-455.957C1436.4,-449.284 456.793,-425.406 323.5,-372 299.132,-362.237 276.329,-344.781 257.874,-327.54"/>
 <polygon fill="none" stroke="midnightblue" points="1772.2,-459.461 1782.27,-456.159 1772.34,-452.462 1772.2,-459.461"/>
 </g>
 <!-- Node7 -->
@@ -446,8 +447,8 @@
 </g>
 <!-- Node4&#45;&gt;Node5 -->
 <g id="edge4" class="edge"><title>Node4&#45;&gt;Node5</title>
-<path fill="none" stroke="midnightblue" d="M184.295,-222.853C171.313,-199.226 155.833,-171.056 141.851,-145.612"/>
-<polygon fill="none" stroke="midnightblue" points="181.257,-224.592 189.141,-231.67 187.392,-221.221 181.257,-224.592"/>
+<path fill="none" stroke="midnightblue" d="M181.231,-217.277C168.925,-194.881 154.758,-169.1 141.864,-145.635"/>
+<polygon fill="none" stroke="midnightblue" points="178.321,-219.248 186.204,-226.327 184.456,-215.877 178.321,-219.248"/>
 </g>
 <!-- Node6 -->
 <g id="node6" class="node"><title>Node6</title>
@@ -471,8 +472,8 @@
 </g>
 <!-- Node4&#45;&gt;Node6 -->
 <g id="edge5" class="edge"><title>Node4&#45;&gt;Node6</title>
-<path fill="none" stroke="midnightblue" d="M242.968,-222.853C256.068,-199.226 271.687,-171.056 285.794,-145.612"/>
-<polygon fill="none" stroke="midnightblue" points="239.867,-221.227 238.079,-231.67 245.989,-224.622 239.867,-221.227"/>
+<path fill="none" stroke="midnightblue" d="M245.894,-217.575C258.35,-195.11 272.713,-169.204 285.781,-145.635"/>
+<polygon fill="none" stroke="midnightblue" points="242.83,-215.884 241.042,-226.327 248.952,-219.278 242.83,-215.884"/>
 </g>
 </g>
 </svg>
diff --git a/docs/doxygen/classtvm_1_1relay_1_1ConstantNode__coll__graph.svg b/docs/doxygen/classtvm_1_1relay_1_1ConstantNode__coll__graph.svg
index 3cdcfd1..bbd2cba 100644
--- a/docs/doxygen/classtvm_1_1relay_1_1ConstantNode__coll__graph.svg
+++ b/docs/doxygen/classtvm_1_1relay_1_1ConstantNode__coll__graph.svg
@@ -175,7 +175,7 @@
 <polygon fill="white" stroke="black" points="558,-452.5 558,-674.5 688,-674.5 688,-452.5 558,-452.5"/>
 <text text-anchor="middle" x="623" y="-662.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
 <polyline fill="none" stroke="black" points="558,-655.5 688,-655.5 "/>
-<text text-anchor="middle" x="623" y="-643.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<text text-anchor="start" x="566" y="-643.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
 <polyline fill="none" stroke="black" points="558,-636.5 688,-636.5 "/>
 <text text-anchor="start" x="566" y="-624.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="566" y="-613.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
diff --git a/docs/doxygen/classtvm_1_1relay_1_1FunctionNode-members.html b/docs/doxygen/classtvm_1_1relay_1_1FunctionNode-members.html
index aa47ec0..6c3fbba 100644
--- a/docs/doxygen/classtvm_1_1relay_1_1FunctionNode-members.html
+++ b/docs/doxygen/classtvm_1_1relay_1_1FunctionNode-members.html
@@ -102,20 +102,21 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
   <tr><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html#a89bfd23e109a842d18240277ffaaa130">checked_type</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html">tvm::RelayExprNode</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html#ae30ca49a8b84288fbc21d5f312f02929">checked_type_</a></td><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html">tvm::RelayExprNode</a></td><td class="entry"><span class="mlabel">mutable</span></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html#a758bc467aa4dc4041b0fc7b7dbca4e67">func_type_annotation</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html">tvm::relay::FunctionNode</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html#a6f177158609cf9da9a4e0a9d3187e3d2">GetAttr</a>(const std::string &amp;attr_key, TObjectRef default_value=NullValue&lt; TObjectRef &gt;()) const </td><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html">tvm::BaseFuncNode</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html#a11694119d77e8d04a9fffd5e9a8b0766">HasNonzeroAttr</a>(const std::string &amp;attr_key) const </td><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html">tvm::BaseFuncNode</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html#a689c5078fb501798aa1d57d1825e3b5a">params</a></td><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html">tvm::relay::FunctionNode</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html#a075bcae369d873c24b7887eb7c96da40">ret_type</a></td><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html">tvm::relay::FunctionNode</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html#a8d54d444e9ea9fce2c485f52adce00bb">SEqualReduce</a>(const FunctionNode *other, SEqualReducer equal) const </td><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html">tvm::relay::FunctionNode</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html#afe0cf90285e42336eb9c1eebe793c276">SHashReduce</a>(SHashReducer hash_reduce) const </td><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html">tvm::relay::FunctionNode</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html#a904ae50be0b72eab079bed93829c9563">span</a></td><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html">tvm::RelayExprNode</a></td><td class="entry"><span class="mlabel">mutable</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html#a577e46c2eda9aec1f8a8e48444d00fd2">TVM_DECLARE_BASE_OBJECT_INFO</a>(BaseFuncNode, RelayExprNode)</td><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html">tvm::BaseFuncNode</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html#a89eb638258551ea1ae2d0e578335474a">tvm::RelayExprNode::TVM_DECLARE_BASE_OBJECT_INFO</a>(RelayExprNode, BaseExprNode)</td><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html">tvm::RelayExprNode</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1BaseExprNode.html#a831794c879d47c30cdd9cefd4f05d533">tvm::BaseExprNode::TVM_DECLARE_BASE_OBJECT_INFO</a>(BaseExprNode, Object)</td><td class="entry"><a class="el" href="classtvm_1_1BaseExprNode.html">tvm::BaseExprNode</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html#a303e82499e8931d3b63aea0ad29df5f2">TVM_DECLARE_FINAL_OBJECT_INFO</a>(FunctionNode, BaseFuncNode)</td><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html">tvm::relay::FunctionNode</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html#a60c73bac632a728a2a669bb34a1c3008">type_as</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html">tvm::RelayExprNode</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html#a558ecb3ab57111b1a0f347764054d5e1">type_params</a></td><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html">tvm::relay::FunctionNode</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html#a7f6fba6dde1c0edaa9989e018b8bbb4f">VisitAttrs</a>(tvm::AttrVisitor *v)</td><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html">tvm::relay::FunctionNode</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html#a48c2541f7824bcbdf24e63a891f20e19">GetAttr</a>(const std::string &amp;attr_key, Optional&lt; TObjectRef &gt; default_value=Optional&lt; TObjectRef &gt;(nullptr)) const </td><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html">tvm::BaseFuncNode</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html#ab6b5ca0e4f080893e6295653e90f41a6">GetAttr</a>(const std::string &amp;attr_key, TObjectRef default_value) const </td><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html">tvm::BaseFuncNode</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html#a11694119d77e8d04a9fffd5e9a8b0766">HasNonzeroAttr</a>(const std::string &amp;attr_key) const </td><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html">tvm::BaseFuncNode</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html#a689c5078fb501798aa1d57d1825e3b5a">params</a></td><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html">tvm::relay::FunctionNode</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html#a075bcae369d873c24b7887eb7c96da40">ret_type</a></td><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html">tvm::relay::FunctionNode</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html#a8d54d444e9ea9fce2c485f52adce00bb">SEqualReduce</a>(const FunctionNode *other, SEqualReducer equal) const </td><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html">tvm::relay::FunctionNode</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html#afe0cf90285e42336eb9c1eebe793c276">SHashReduce</a>(SHashReducer hash_reduce) const </td><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html">tvm::relay::FunctionNode</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html#a904ae50be0b72eab079bed93829c9563">span</a></td><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html">tvm::RelayExprNode</a></td><td class="entry"><span class="mlabel">mutable</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html#a577e46c2eda9aec1f8a8e48444d00fd2">TVM_DECLARE_BASE_OBJECT_INFO</a>(BaseFuncNode, RelayExprNode)</td><td class="entry"><a class="el" href="classtvm_1_1BaseFuncNode.html">tvm::BaseFuncNode</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html#a89eb638258551ea1ae2d0e578335474a">tvm::RelayExprNode::TVM_DECLARE_BASE_OBJECT_INFO</a>(RelayExprNode, BaseExprNode)</td><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html">tvm::RelayExprNode</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1BaseExprNode.html#a831794c879d47c30cdd9cefd4f05d533">tvm::BaseExprNode::TVM_DECLARE_BASE_OBJECT_INFO</a>(BaseExprNode, Object)</td><td class="entry"><a class="el" href="classtvm_1_1BaseExprNode.html">tvm::BaseExprNode</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html#a303e82499e8931d3b63aea0ad29df5f2">TVM_DECLARE_FINAL_OBJECT_INFO</a>(FunctionNode, BaseFuncNode)</td><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html">tvm::relay::FunctionNode</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html#a60c73bac632a728a2a669bb34a1c3008">type_as</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1RelayExprNode.html">tvm::RelayExprNode</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html#a558ecb3ab57111b1a0f347764054d5e1">type_params</a></td><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html">tvm::relay::FunctionNode</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html#a7f6fba6dde1c0edaa9989e018b8bbb4f">VisitAttrs</a>(tvm::AttrVisitor *v)</td><td class="entry"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html">tvm::relay::FunctionNode</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/doxygen/classtvm_1_1relay_1_1FunctionNode.html b/docs/doxygen/classtvm_1_1relay_1_1FunctionNode.html
index 357db19..9f4cbd7 100644
--- a/docs/doxygen/classtvm_1_1relay_1_1FunctionNode.html
+++ b/docs/doxygen/classtvm_1_1relay_1_1FunctionNode.html
@@ -104,13 +104,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="dynheader">
 Inheritance diagram for tvm::relay::FunctionNode:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relay_1_1FunctionNode__inherit__graph.svg" width="284" height="868"><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_1relay_1_1FunctionNode__inherit__graph.svg" width="284" height="883"><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::relay::FunctionNode:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relay_1_1FunctionNode__coll__graph.svg" width="1448" height="1128"><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_1relay_1_1FunctionNode__coll__graph.svg" width="1448" height="1143"><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">
@@ -128,10 +128,13 @@ Public Member Functions</h2></td></tr>
 <tr class="memitem:a303e82499e8931d3b63aea0ad29df5f2"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1relay_1_1FunctionNode.html#a303e82499e8931d3b63aea0ad29df5f2">TVM_DECLARE_FINAL_OBJECT_INFO</a> (<a class="el" href="classtvm_1_1relay_1_1FunctionNode.html">FunctionNode</a>, <a class="el" href="namespacetvm_1_1relay.html#a4edf28d1226abc08d28bc2fd90ce7b42">BaseFuncNode</a>)</td></tr>
 <tr class="separator:a303e82499e8931d3b63aea0ad29df5f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="inherit_header pub_methods_classtvm_1_1BaseFuncNode"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classtvm_1_1BaseFuncNode')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classtvm_1_1BaseFuncNode.html">tvm::BaseFuncNode</a></td></tr>
-<tr class="memitem:a6f177158609cf9da9a4e0a9d3187e3d2 inherit pub_methods_classtvm_1_1BaseFuncNode"><td class="memTemplParams" colspan="2">template&lt;typename TObjectRef &gt; </td></tr>
-<tr class="memitem:a6f177158609cf9da9a4e0a9d3187e3d2 inherit pub_methods_classtvm_1_1BaseFuncNode"><td class="memTemplItemLeft" align="right" valign="top">TObjectRef&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classtvm_1_1BaseFuncNode.html#a6f177158609cf9da9a4e0a9d3187e3d2">GetAttr</a> (const std::string &amp;attr_key, TObjectRef default_value=<a class="el" href="namespacetvm.html#ab6c242e8ac09beb463fba306948b7f15">NullValue</a>&lt; TObjectRef &gt;()) cons [...]
-<tr class="memdesc:a6f177158609cf9da9a4e0a9d3187e3d2 inherit pub_methods_classtvm_1_1BaseFuncNode"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a function attribute.  <a href="#a6f177158609cf9da9a4e0a9d3187e3d2">More...</a><br /></td></tr>
-<tr class="separator:a6f177158609cf9da9a4e0a9d3187e3d2 inherit pub_methods_classtvm_1_1BaseFuncNode"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a48c2541f7824bcbdf24e63a891f20e19 inherit pub_methods_classtvm_1_1BaseFuncNode"><td class="memTemplParams" colspan="2">template&lt;typename TObjectRef &gt; </td></tr>
+<tr class="memitem:a48c2541f7824bcbdf24e63a891f20e19 inherit pub_methods_classtvm_1_1BaseFuncNode"><td class="memTemplItemLeft" align="right" valign="top">Optional&lt; TObjectRef &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classtvm_1_1BaseFuncNode.html#a48c2541f7824bcbdf24e63a891f20e19">GetAttr</a> (const std::string &amp;attr_key, Optional&lt; TObjectRef &gt; default_value=Optional&lt; TObjectRef &gt;(nullptr)) const </td></tr>
+<tr class="memdesc:a48c2541f7824bcbdf24e63a891f20e19 inherit pub_methods_classtvm_1_1BaseFuncNode"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get a function attribute.  <a href="#a48c2541f7824bcbdf24e63a891f20e19">More...</a><br /></td></tr>
+<tr class="separator:a48c2541f7824bcbdf24e63a891f20e19 inherit pub_methods_classtvm_1_1BaseFuncNode"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab6b5ca0e4f080893e6295653e90f41a6 inherit pub_methods_classtvm_1_1BaseFuncNode"><td class="memTemplParams" colspan="2">template&lt;typename TObjectRef &gt; </td></tr>
+<tr class="memitem:ab6b5ca0e4f080893e6295653e90f41a6 inherit pub_methods_classtvm_1_1BaseFuncNode"><td class="memTemplItemLeft" align="right" valign="top">Optional&lt; TObjectRef &gt;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classtvm_1_1BaseFuncNode.html#ab6b5ca0e4f080893e6295653e90f41a6">GetAttr</a> (const std::string &amp;attr_key, TObjectRef default_value) const </td></tr>
+<tr class="separator:ab6b5ca0e4f080893e6295653e90f41a6 inherit pub_methods_classtvm_1_1BaseFuncNode"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="memitem:a11694119d77e8d04a9fffd5e9a8b0766 inherit pub_methods_classtvm_1_1BaseFuncNode"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1BaseFuncNode.html#a11694119d77e8d04a9fffd5e9a8b0766">HasNonzeroAttr</a> (const std::string &amp;attr_key) const </td></tr>
 <tr class="memdesc:a11694119d77e8d04a9fffd5e9a8b0766 inherit pub_methods_classtvm_1_1BaseFuncNode"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check whether the function has an non-zero integer attr.  <a href="#a11694119d77e8d04a9fffd5e9a8b0766">More...</a><br /></td></tr>
 <tr class="separator:a11694119d77e8d04a9fffd5e9a8b0766 inherit pub_methods_classtvm_1_1BaseFuncNode"><td class="memSeparator" colspan="2">&#160;</td></tr>
diff --git a/docs/doxygen/classtvm_1_1relay_1_1FunctionNode__coll__graph.svg b/docs/doxygen/classtvm_1_1relay_1_1FunctionNode__coll__graph.svg
index 2a175bf..41b0d5a 100644
--- a/docs/doxygen/classtvm_1_1relay_1_1FunctionNode__coll__graph.svg
+++ b/docs/doxygen/classtvm_1_1relay_1_1FunctionNode__coll__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.38.0 (20140413.2041)
  -->
 <!-- Title: tvm::relay::FunctionNode Pages: 1 -->
-<svg width="1086pt" height="846pt"
- viewBox="0.00 0.00 1085.50 846.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 842)">
+<svg width="1086pt" height="857pt"
+ viewBox="0.00 0.00 1085.50 857.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 853)">
 <title>tvm::relay::FunctionNode</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-842 1081.5,-842 1081.5,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-853 1081.5,-853 1081.5,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node"><title>Node1</title>
 <polygon fill="#bfbfbf" stroke="black" points="662.5,-0.5 662.5,-101.5 867.5,-101.5 867.5,-0.5 662.5,-0.5"/>
@@ -25,11 +25,12 @@
 <!-- Node2 -->
 <g id="node2" class="node"><title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1BaseFuncNode.html" target="_top" xlink:title="Base node of all functions. ">
-<polygon fill="white" stroke="black" points="390,-139.5 390,-218.5 594,-218.5 594,-139.5 390,-139.5"/>
-<text text-anchor="middle" x="492" y="-206.5" font-family="Helvetica,sans-Serif" font-size="10.00">BaseFuncNode</text>
-<polyline fill="none" stroke="black" points="390,-199.5 594,-199.5 "/>
-<text text-anchor="start" x="398" y="-187.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<polyline fill="none" stroke="black" points="390,-180.5 594,-180.5 "/>
+<polygon fill="white" stroke="black" points="390,-139.5 390,-229.5 594,-229.5 594,-139.5 390,-139.5"/>
+<text text-anchor="middle" x="492" y="-217.5" font-family="Helvetica,sans-Serif" font-size="10.00">BaseFuncNode</text>
+<polyline fill="none" stroke="black" points="390,-210.5 594,-210.5 "/>
+<text text-anchor="start" x="398" y="-198.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<polyline fill="none" stroke="black" points="390,-191.5 594,-191.5 "/>
+<text text-anchor="start" x="398" y="-179.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetAttr()</text>
 <text text-anchor="start" x="398" y="-168.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetAttr()</text>
 <text text-anchor="start" x="398" y="-157.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasNonzeroAttr()</text>
 <text text-anchor="start" x="398" y="-146.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_INFO()</text>
@@ -38,159 +39,160 @@
 </g>
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge"><title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M585.153,-135.007C609.941,-123.566 636.857,-111.143 662.132,-99.4774"/>
-<polygon fill="none" stroke="midnightblue" points="583.377,-131.971 575.764,-139.34 586.311,-138.327 583.377,-131.971"/>
+<path fill="none" stroke="midnightblue" d="M588.345,-134.977C598.673,-129.88 609.041,-124.808 619,-120 632.975,-113.253 647.753,-106.236 662.329,-99.382"/>
+<polygon fill="none" stroke="midnightblue" points="586.701,-131.885 579.29,-139.457 589.805,-138.16 586.701,-131.885"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node"><title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1RelayExprNode.html" target="_top" xlink:title="Base node of all non&#45;primitive expressions. ">
-<polygon fill="white" stroke="black" points="195,-335.5 195,-414.5 399,-414.5 399,-335.5 195,-335.5"/>
-<text text-anchor="middle" x="297" y="-402.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::RelayExprNode</text>
-<polyline fill="none" stroke="black" points="195,-395.5 399,-395.5 "/>
-<text text-anchor="start" x="203" y="-383.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<polyline fill="none" stroke="black" points="195,-376.5 399,-376.5 "/>
-<text text-anchor="start" x="203" y="-364.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ checked_type()</text>
-<text text-anchor="start" x="203" y="-353.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ type_as()</text>
-<text text-anchor="start" x="203" y="-342.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_INFO()</text>
+<polygon fill="white" stroke="black" points="195,-346.5 195,-425.5 399,-425.5 399,-346.5 195,-346.5"/>
+<text text-anchor="middle" x="297" y="-413.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::RelayExprNode</text>
+<polyline fill="none" stroke="black" points="195,-406.5 399,-406.5 "/>
+<text text-anchor="start" x="203" y="-394.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<polyline fill="none" stroke="black" points="195,-387.5 399,-387.5 "/>
+<text text-anchor="start" x="203" y="-375.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ checked_type()</text>
+<text text-anchor="start" x="203" y="-364.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ type_as()</text>
+<text text-anchor="start" x="203" y="-353.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_INFO()</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="M343.38,-327.858C376.83,-294.579 421.475,-250.164 453.075,-218.725"/>
-<polygon fill="none" stroke="midnightblue" points="340.613,-325.673 335.992,-335.207 345.55,-330.636 340.613,-325.673"/>
+<path fill="none" stroke="midnightblue" d="M342.162,-338.796C374.319,-305.896 417.272,-261.953 448.943,-229.55"/>
+<polygon fill="none" stroke="midnightblue" points="339.548,-336.463 335.061,-346.061 344.554,-341.356 339.548,-336.463"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node"><title>Node4</title>
 <g id="a_node4"><a xlink:href="classtvm_1_1BaseExprNode.html" target="_top" xlink:title="Base type of all the expressions. ">
-<polygon fill="white" stroke="black" points="0,-641.5 0,-742.5 204,-742.5 204,-641.5 0,-641.5"/>
-<text text-anchor="middle" x="102" y="-730.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseExprNode</text>
-<polyline fill="none" stroke="black" points="0,-723.5 204,-723.5 "/>
-<text text-anchor="start" x="8" y="-711.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<text text-anchor="start" x="8" y="-700.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_sequal</text>
-<text text-anchor="start" x="8" y="-689.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
-<text text-anchor="start" x="8" y="-678.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_shash</text>
-<text text-anchor="start" x="8" y="-667.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
-<polyline fill="none" stroke="black" points="0,-660.5 204,-660.5 "/>
-<text text-anchor="start" x="8" y="-648.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_INFO()</text>
+<polygon fill="white" stroke="black" points="0,-652.5 0,-753.5 204,-753.5 204,-652.5 0,-652.5"/>
+<text text-anchor="middle" x="102" y="-741.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseExprNode</text>
+<polyline fill="none" stroke="black" points="0,-734.5 204,-734.5 "/>
+<text text-anchor="start" x="8" y="-722.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<text text-anchor="start" x="8" y="-711.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_sequal</text>
+<text text-anchor="start" x="8" y="-700.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
+<text text-anchor="start" x="8" y="-689.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_shash</text>
+<text text-anchor="start" x="8" y="-678.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
+<polyline fill="none" stroke="black" points="0,-671.5 204,-671.5 "/>
+<text text-anchor="start" x="8" y="-659.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_INFO()</text>
 </a>
 </g>
 </g>
 <!-- Node4&#45;&gt;Node3 -->
 <g id="edge3" class="edge"><title>Node4&#45;&gt;Node3</title>
-<path fill="none" stroke="midnightblue" d="M138.075,-632.724C177.383,-569.227 239.163,-469.429 272.951,-414.848"/>
-<polygon fill="none" stroke="midnightblue" points="134.971,-631.09 132.683,-641.435 140.923,-634.774 134.971,-631.09"/>
+<path fill="none" stroke="midnightblue" d="M138.075,-643.724C177.383,-580.227 239.163,-480.429 272.951,-425.848"/>
+<polygon fill="none" stroke="midnightblue" points="134.971,-642.09 132.683,-652.435 140.923,-645.774 134.971,-642.09"/>
 </g>
 <!-- Node5 -->
 <g id="node5" class="node"><title>Node5</title>
-<polygon fill="white" stroke="#bfbfbf" points="78.5,-780.5 78.5,-837.5 125.5,-837.5 125.5,-780.5 78.5,-780.5"/>
-<text text-anchor="middle" x="102" y="-825.5" font-family="Helvetica,sans-Serif" font-size="10.00">Object</text>
-<polyline fill="none" stroke="#bfbfbf" points="78.5,-818.5 125.5,-818.5 "/>
-<text text-anchor="middle" x="102" y="-806.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="#bfbfbf" points="78.5,-799.5 125.5,-799.5 "/>
-<text text-anchor="middle" x="102" y="-787.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polygon fill="white" stroke="#bfbfbf" points="78.5,-791.5 78.5,-848.5 125.5,-848.5 125.5,-791.5 78.5,-791.5"/>
+<text text-anchor="middle" x="102" y="-836.5" font-family="Helvetica,sans-Serif" font-size="10.00">Object</text>
+<polyline fill="none" stroke="#bfbfbf" points="78.5,-829.5 125.5,-829.5 "/>
+<text text-anchor="middle" x="102" y="-817.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="#bfbfbf" points="78.5,-810.5 125.5,-810.5 "/>
+<text text-anchor="middle" x="102" y="-798.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
 </g>
 <!-- Node5&#45;&gt;Node4 -->
 <g id="edge4" class="edge"><title>Node5&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M102,-770.187C102,-761.435 102,-751.99 102,-742.812"/>
-<polygon fill="none" stroke="midnightblue" points="98.5001,-770.455 102,-780.455 105.5,-770.455 98.5001,-770.455"/>
+<path fill="none" stroke="midnightblue" d="M102,-781.187C102,-772.435 102,-762.99 102,-753.812"/>
+<polygon fill="none" stroke="midnightblue" points="98.5001,-781.455 102,-791.455 105.5,-781.455 98.5001,-781.455"/>
 </g>
 <!-- Node6 -->
 <g id="node6" class="node"><title>Node6</title>
 <g id="a_node6"><a xlink:href="classtvm_1_1Span.html" target="_top" xlink:title="{tvm::Span\n||+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
-<polygon fill="white" stroke="black" points="222,-658 222,-726 372,-726 372,-658 222,-658"/>
-<text text-anchor="middle" x="297" y="-714" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Span</text>
-<polyline fill="none" stroke="black" points="222,-707 372,-707 "/>
-<text text-anchor="middle" x="297" y="-695" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="222,-688 372,-688 "/>
-<text text-anchor="start" x="230" y="-676" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="230" y="-665" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="222,-669 222,-737 372,-737 372,-669 222,-669"/>
+<text text-anchor="middle" x="297" y="-725" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Span</text>
+<polyline fill="none" stroke="black" points="222,-718 372,-718 "/>
+<text text-anchor="middle" x="297" y="-706" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="222,-699 372,-699 "/>
+<text text-anchor="start" x="230" y="-687" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="230" y="-676" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node6&#45;&gt;Node3 -->
 <g id="edge5" class="edge"><title>Node6&#45;&gt;Node3</title>
-<path fill="none" stroke="#404040" d="M297,-657.885C297,-602.797 297,-491.97 297,-426.896"/>
-<polygon fill="none" stroke="#404040" points="297,-426.522 293,-420.522 297,-414.522 301,-420.522 297,-426.522"/>
-<text text-anchor="middle" x="314.5" y="-531" font-family="Helvetica,sans-Serif" font-size="10.00"> +span</text>
+<path fill="none" stroke="#404040" d="M297,-668.885C297,-613.797 297,-502.97 297,-437.896"/>
+<polygon fill="none" stroke="#404040" points="297,-437.522 293,-431.522 297,-425.522 301,-431.522 297,-437.522"/>
+<text text-anchor="middle" x="314.5" y="-542" font-family="Helvetica,sans-Serif" font-size="10.00"> +span</text>
 </g>
 <!-- Node7 -->
 <g id="node7" class="node"><title>Node7</title>
-<polygon fill="white" stroke="#bfbfbf" points="668,-780.5 668,-837.5 730,-837.5 730,-780.5 668,-780.5"/>
-<text text-anchor="middle" x="699" y="-825.5" font-family="Helvetica,sans-Serif" font-size="10.00">ObjectRef</text>
-<polyline fill="none" stroke="#bfbfbf" points="668,-818.5 730,-818.5 "/>
-<text text-anchor="middle" x="699" y="-806.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="#bfbfbf" points="668,-799.5 730,-799.5 "/>
-<text text-anchor="middle" x="699" y="-787.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polygon fill="white" stroke="#bfbfbf" points="668,-791.5 668,-848.5 730,-848.5 730,-791.5 668,-791.5"/>
+<text text-anchor="middle" x="699" y="-836.5" font-family="Helvetica,sans-Serif" font-size="10.00">ObjectRef</text>
+<polyline fill="none" stroke="#bfbfbf" points="668,-829.5 730,-829.5 "/>
+<text text-anchor="middle" x="699" y="-817.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="#bfbfbf" points="668,-810.5 730,-810.5 "/>
+<text text-anchor="middle" x="699" y="-798.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
 </g>
 <!-- Node7&#45;&gt;Node6 -->
 <g id="edge6" class="edge"><title>Node7&#45;&gt;Node6</title>
-<path fill="none" stroke="midnightblue" d="M657.63,-804.014C595.735,-797.068 476.132,-779.818 381,-743 369.288,-738.467 357.328,-732.377 346.242,-726.009"/>
-<polygon fill="none" stroke="midnightblue" points="657.457,-807.516 667.777,-805.118 658.214,-800.557 657.457,-807.516"/>
+<path fill="none" stroke="midnightblue" d="M657.63,-815.014C595.735,-808.068 476.132,-790.818 381,-754 369.288,-749.467 357.328,-743.377 346.242,-737.009"/>
+<polygon fill="none" stroke="midnightblue" points="657.457,-818.516 667.777,-816.118 658.214,-811.557 657.457,-818.516"/>
 </g>
 <!-- Node8 -->
 <g id="node8" class="node"><title>Node8</title>
 <g id="a_node8"><a xlink:href="classtvm_1_1Type.html" target="_top" xlink:title="Managed reference to TypeNode. ">
-<polygon fill="white" stroke="black" points="558,-658 558,-726 708,-726 708,-658 558,-658"/>
-<text text-anchor="middle" x="633" y="-714" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Type</text>
-<polyline fill="none" stroke="black" points="558,-707 708,-707 "/>
-<text text-anchor="middle" x="633" y="-695" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="558,-688 708,-688 "/>
-<text text-anchor="start" x="566" y="-676" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="566" y="-665" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="558,-669 558,-737 708,-737 708,-669 558,-669"/>
+<text text-anchor="middle" x="633" y="-725" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Type</text>
+<polyline fill="none" stroke="black" points="558,-718 708,-718 "/>
+<text text-anchor="middle" x="633" y="-706" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="558,-699 708,-699 "/>
+<text text-anchor="start" x="566" y="-687" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="566" y="-676" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node7&#45;&gt;Node8 -->
 <g id="edge8" class="edge"><title>Node7&#45;&gt;Node8</title>
-<path fill="none" stroke="midnightblue" d="M678.15,-771.67C669.762,-757.055 660.157,-740.32 651.969,-726.052"/>
-<polygon fill="none" stroke="midnightblue" points="675.178,-773.524 683.191,-780.455 681.249,-770.039 675.178,-773.524"/>
+<path fill="none" stroke="midnightblue" d="M678.15,-782.67C669.762,-768.055 660.157,-751.32 651.969,-737.052"/>
+<polygon fill="none" stroke="midnightblue" points="675.178,-784.524 683.191,-791.455 681.249,-781.039 675.178,-784.524"/>
 </g>
 <!-- Node10 -->
 <g id="node10" class="node"><title>Node10</title>
 <g id="a_node10"><a xlink:href="classtvm_1_1Attrs.html" target="_top" xlink:title="Managed reference to BaseAttrsNode. ">
-<polygon fill="white" stroke="black" points="390,-658 390,-726 540,-726 540,-658 390,-658"/>
-<text text-anchor="middle" x="465" y="-714" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Attrs</text>
-<polyline fill="none" stroke="black" points="390,-707 540,-707 "/>
-<text text-anchor="middle" x="465" y="-695" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="390,-688 540,-688 "/>
-<text text-anchor="start" x="398" y="-676" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="398" y="-665" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="390,-669 390,-737 540,-737 540,-669 390,-669"/>
+<text text-anchor="middle" x="465" y="-725" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Attrs</text>
+<polyline fill="none" stroke="black" points="390,-718 540,-718 "/>
+<text text-anchor="middle" x="465" y="-706" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="390,-699 540,-699 "/>
+<text text-anchor="start" x="398" y="-687" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="398" y="-676" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node7&#45;&gt;Node10 -->
 <g id="edge11" class="edge"><title>Node7&#45;&gt;Node10</title>
-<path fill="none" stroke="midnightblue" d="M658.256,-791.998C627.714,-779.607 585.137,-761.489 549,-743 538.877,-737.821 528.299,-731.928 518.198,-726.049"/>
-<polygon fill="none" stroke="midnightblue" points="657.143,-795.322 667.726,-795.813 659.759,-788.829 657.143,-795.322"/>
+<path fill="none" stroke="midnightblue" d="M658.256,-802.998C627.714,-790.607 585.137,-772.489 549,-754 538.877,-748.821 528.299,-742.928 518.198,-737.049"/>
+<polygon fill="none" stroke="midnightblue" points="657.143,-806.322 667.726,-806.813 659.759,-799.829 657.143,-806.322"/>
 </g>
 <!-- Node12 -->
 <g id="node12" class="node"><title>Node12</title>
 <g id="a_node12"><a xlink:href="classtvm_1_1BaseExpr.html" target="_top" xlink:title="Managed reference to BaseExprNode. ">
-<polygon fill="white" stroke="black" points="726,-658 726,-726 876,-726 876,-658 726,-658"/>
-<text text-anchor="middle" x="801" y="-714" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseExpr</text>
-<polyline fill="none" stroke="black" points="726,-707 876,-707 "/>
-<text text-anchor="middle" x="801" y="-695" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="726,-688 876,-688 "/>
-<text text-anchor="start" x="734" y="-676" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="734" y="-665" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="726,-669 726,-737 876,-737 876,-669 726,-669"/>
+<text text-anchor="middle" x="801" y="-725" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseExpr</text>
+<polyline fill="none" stroke="black" points="726,-718 876,-718 "/>
+<text text-anchor="middle" x="801" y="-706" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="726,-699 876,-699 "/>
+<text text-anchor="start" x="734" y="-687" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="734" y="-676" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node7&#45;&gt;Node12 -->
 <g id="edge14" class="edge"><title>Node7&#45;&gt;Node12</title>
-<path fill="none" stroke="midnightblue" d="M730.127,-772.906C743.344,-758.004 758.671,-740.723 771.684,-726.052"/>
-<polygon fill="none" stroke="midnightblue" points="727.449,-770.651 723.432,-780.455 732.686,-775.296 727.449,-770.651"/>
+<path fill="none" stroke="midnightblue" d="M730.127,-783.906C743.344,-769.004 758.671,-751.723 771.684,-737.052"/>
+<polygon fill="none" stroke="midnightblue" points="727.449,-781.651 723.432,-791.455 732.686,-786.296 727.449,-781.651"/>
 </g>
 <!-- Node13 -->
 <g id="node13" class="node"><title>Node13</title>
 <g id="a_node13"><a xlink:href="classtvm_1_1Array.html" target="_top" xlink:title="{tvm::Array\&lt; tvm::relay\l::Var \&gt;\n||+ Array()\l+ Array()\l+ Array()\l+ Array()\l+ Array()\l+ Array()\l+ Array()\l+ Array()\l+ operator=()\l+ operator=()\land 13 more...\l}">
-<polygon fill="white" stroke="black" points="795,-444.5 795,-622.5 921,-622.5 921,-444.5 795,-444.5"/>
-<text text-anchor="start" x="803" y="-610.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Array&lt; tvm::relay</text>
-<text text-anchor="middle" x="858" y="-599.5" font-family="Helvetica,sans-Serif" font-size="10.00">::Var &gt;</text>
-<polyline fill="none" stroke="black" points="795,-592.5 921,-592.5 "/>
-<text text-anchor="middle" x="858" y="-580.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="795,-573.5 921,-573.5 "/>
+<polygon fill="white" stroke="black" points="795,-455.5 795,-633.5 921,-633.5 921,-455.5 795,-455.5"/>
+<text text-anchor="start" x="803" y="-621.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Array&lt; tvm::relay</text>
+<text text-anchor="middle" x="858" y="-610.5" font-family="Helvetica,sans-Serif" font-size="10.00">::Var &gt;</text>
+<polyline fill="none" stroke="black" points="795,-603.5 921,-603.5 "/>
+<text text-anchor="middle" x="858" y="-591.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="795,-584.5 921,-584.5 "/>
+<text text-anchor="start" x="803" y="-572.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Array()</text>
 <text text-anchor="start" x="803" y="-561.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Array()</text>
 <text text-anchor="start" x="803" y="-550.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Array()</text>
 <text text-anchor="start" x="803" y="-539.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Array()</text>
@@ -198,26 +200,26 @@
 <text text-anchor="start" x="803" y="-517.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Array()</text>
 <text text-anchor="start" x="803" y="-506.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Array()</text>
 <text text-anchor="start" x="803" y="-495.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Array()</text>
-<text text-anchor="start" x="803" y="-484.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Array()</text>
+<text text-anchor="start" x="803" y="-484.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
 <text text-anchor="start" x="803" y="-473.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
-<text text-anchor="start" x="803" y="-462.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
-<text text-anchor="start" x="803" y="-451.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 13 more...</text>
+<text text-anchor="start" x="803" y="-462.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 13 more...</text>
 </a>
 </g>
 </g>
 <!-- Node7&#45;&gt;Node13 -->
 <g id="edge17" class="edge"><title>Node7&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M740.213,-806.664C784.298,-802.765 852.28,-789.095 885,-743 909.455,-708.548 906.276,-662.626 895.452,-622.649"/>
-<polygon fill="none" stroke="midnightblue" points="739.81,-803.184 730.101,-807.425 740.336,-810.164 739.81,-803.184"/>
+<path fill="none" stroke="midnightblue" d="M740.213,-817.664C784.298,-813.765 852.28,-800.095 885,-754 909.455,-719.548 906.276,-673.626 895.452,-633.649"/>
+<polygon fill="none" stroke="midnightblue" points="739.81,-814.184 730.101,-818.425 740.336,-821.164 739.81,-814.184"/>
 </g>
 <!-- Node14 -->
 <g id="node14" class="node"><title>Node14</title>
 <g id="a_node14"><a xlink:href="classtvm_1_1Array.html" target="_top" xlink:title="{tvm::Array\&lt; tvm::TypeVar \&gt;\n||+ Array()\l+ Array()\l+ Array()\l+ Array()\l+ Array()\l+ Array()\l+ Array()\l+ Array()\l+ operator=()\l+ operator=()\land 13 more...\l}">
-<polygon fill="white" stroke="black" points="926.5,-450 926.5,-617 1077.5,-617 1077.5,-450 926.5,-450"/>
-<text text-anchor="middle" x="1002" y="-605" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Array&lt; tvm::TypeVar &gt;</text>
-<polyline fill="none" stroke="black" points="926.5,-598 1077.5,-598 "/>
-<text text-anchor="middle" x="1002" y="-586" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="926.5,-579 1077.5,-579 "/>
+<polygon fill="white" stroke="black" points="926.5,-461 926.5,-628 1077.5,-628 1077.5,-461 926.5,-461"/>
+<text text-anchor="middle" x="1002" y="-616" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::Array&lt; tvm::TypeVar &gt;</text>
+<polyline fill="none" stroke="black" points="926.5,-609 1077.5,-609 "/>
+<text text-anchor="middle" x="1002" y="-597" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="926.5,-590 1077.5,-590 "/>
+<text text-anchor="start" x="934.5" y="-578" font-family="Helvetica,sans-Serif" font-size="10.00">+ Array()</text>
 <text text-anchor="start" x="934.5" y="-567" font-family="Helvetica,sans-Serif" font-size="10.00">+ Array()</text>
 <text text-anchor="start" x="934.5" y="-556" font-family="Helvetica,sans-Serif" font-size="10.00">+ Array()</text>
 <text text-anchor="start" x="934.5" y="-545" font-family="Helvetica,sans-Serif" font-size="10.00">+ Array()</text>
@@ -225,92 +227,91 @@
 <text text-anchor="start" x="934.5" y="-523" font-family="Helvetica,sans-Serif" font-size="10.00">+ Array()</text>
 <text text-anchor="start" x="934.5" y="-512" font-family="Helvetica,sans-Serif" font-size="10.00">+ Array()</text>
 <text text-anchor="start" x="934.5" y="-501" font-family="Helvetica,sans-Serif" font-size="10.00">+ Array()</text>
-<text text-anchor="start" x="934.5" y="-490" font-family="Helvetica,sans-Serif" font-size="10.00">+ Array()</text>
+<text text-anchor="start" x="934.5" y="-490" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
 <text text-anchor="start" x="934.5" y="-479" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
-<text text-anchor="start" x="934.5" y="-468" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
-<text text-anchor="start" x="934.5" y="-457" font-family="Helvetica,sans-Serif" font-size="10.00">and 13 more...</text>
+<text text-anchor="start" x="934.5" y="-468" font-family="Helvetica,sans-Serif" font-size="10.00">and 13 more...</text>
 </a>
 </g>
 </g>
 <!-- Node7&#45;&gt;Node14 -->
 <g id="edge19" class="edge"><title>Node7&#45;&gt;Node14</title>
-<path fill="none" stroke="midnightblue" d="M740.348,-808.008C788.974,-805.573 868.216,-793.471 909,-743 938.894,-706.006 961.197,-657.881 976.457,-617.188"/>
-<polygon fill="none" stroke="midnightblue" points="740.024,-804.518 730.166,-808.4 740.293,-811.513 740.024,-804.518"/>
+<path fill="none" stroke="midnightblue" d="M740.348,-819.008C788.974,-816.573 868.216,-804.471 909,-754 938.894,-717.006 961.197,-668.881 976.457,-628.188"/>
+<polygon fill="none" stroke="midnightblue" points="740.024,-815.518 730.166,-819.4 740.293,-822.513 740.024,-815.518"/>
 </g>
 <!-- Node8&#45;&gt;Node1 -->
 <g id="edge15" class="edge"><title>Node8&#45;&gt;Node1</title>
-<path fill="none" stroke="#404040" d="M631.487,-657.858C627.188,-559.979 616.025,-276.555 629,-237 644.502,-189.741 677.199,-144.603 706.647,-110.745"/>
-<polygon fill="none" stroke="#404040" points="706.885,-110.477 707.875,-103.334 714.85,-101.502 713.859,-108.645 706.885,-110.477"/>
-<text text-anchor="middle" x="655" y="-269" font-family="Helvetica,sans-Serif" font-size="10.00"> +ret_type</text>
+<path fill="none" stroke="#404040" d="M631.536,-668.874C627.377,-571.039 616.567,-287.728 629,-248 644.954,-197.021 679.353,-147.66 709.561,-111.226"/>
+<polygon fill="none" stroke="#404040" points="709.799,-110.944 710.615,-103.779 717.543,-101.777 716.727,-108.942 709.799,-110.944"/>
+<text text-anchor="middle" x="655" y="-280" font-family="Helvetica,sans-Serif" font-size="10.00"> +ret_type</text>
 </g>
 <!-- Node8&#45;&gt;Node3 -->
 <g id="edge7" class="edge"><title>Node8&#45;&gt;Node3</title>
-<path fill="none" stroke="#404040" d="M582.046,-657.986C566.785,-647.389 550.312,-635.218 536,-623 461.448,-559.355 384.161,-475.683 338.348,-423.894"/>
-<polygon fill="none" stroke="#404040" points="338.099,-423.611 331.132,-421.753 330.168,-414.607 337.135,-416.465 338.099,-423.611"/>
-<text text-anchor="middle" x="577.5" y="-531" font-family="Helvetica,sans-Serif" font-size="10.00"> +checked_type_</text>
+<path fill="none" stroke="#404040" d="M582.046,-668.986C566.785,-658.389 550.312,-646.218 536,-634 461.448,-570.355 384.161,-486.683 338.348,-434.894"/>
+<polygon fill="none" stroke="#404040" points="338.099,-434.611 331.132,-432.753 330.168,-425.607 337.135,-427.465 338.099,-434.611"/>
+<text text-anchor="middle" x="577.5" y="-542" font-family="Helvetica,sans-Serif" font-size="10.00"> +checked_type_</text>
 </g>
 <!-- Node9 -->
 <g id="node9" class="node"><title>Node9</title>
 <g id="a_node9"><a xlink:href="classtvm_1_1DictAttrs.html" target="_top" xlink:title="Managed reference to DictAttrsNode. ">
-<polygon fill="white" stroke="black" points="417,-324.5 417,-425.5 567,-425.5 567,-324.5 417,-324.5"/>
-<text text-anchor="middle" x="492" y="-413.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::DictAttrs</text>
-<polyline fill="none" stroke="black" points="417,-406.5 567,-406.5 "/>
-<text text-anchor="middle" x="492" y="-394.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="417,-387.5 567,-387.5 "/>
-<text text-anchor="start" x="425" y="-375.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ DictAttrs()</text>
-<text text-anchor="start" x="425" y="-364.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="425" y="-353.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
-<text text-anchor="start" x="425" y="-342.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="425" y="-331.5" font-family="Helvetica,sans-Serif" font-size="10.00">_COW_METHOD()</text>
+<polygon fill="white" stroke="black" points="417,-335.5 417,-436.5 567,-436.5 567,-335.5 417,-335.5"/>
+<text text-anchor="middle" x="492" y="-424.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::DictAttrs</text>
+<polyline fill="none" stroke="black" points="417,-417.5 567,-417.5 "/>
+<text text-anchor="middle" x="492" y="-405.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="417,-398.5 567,-398.5 "/>
+<text text-anchor="start" x="425" y="-386.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ DictAttrs()</text>
+<text text-anchor="start" x="425" y="-375.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="425" y="-364.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<text text-anchor="start" x="425" y="-353.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="425" y="-342.5" font-family="Helvetica,sans-Serif" font-size="10.00">_COW_METHOD()</text>
 </a>
 </g>
 </g>
 <!-- Node9&#45;&gt;Node2 -->
 <g id="edge9" class="edge"><title>Node9&#45;&gt;Node2</title>
-<path fill="none" stroke="#404040" d="M492,-324.292C492,-295.639 492,-259.696 492,-230.852"/>
-<polygon fill="none" stroke="#404040" points="492,-230.56 488,-224.56 492,-218.56 496,-224.56 492,-230.56"/>
-<text text-anchor="middle" x="509" y="-269" font-family="Helvetica,sans-Serif" font-size="10.00"> +attrs</text>
+<path fill="none" stroke="#404040" d="M492,-335.429C492,-307.055 492,-271.357 492,-241.913"/>
+<polygon fill="none" stroke="#404040" points="492,-241.716 488,-235.716 492,-229.716 496,-235.716 492,-241.716"/>
+<text text-anchor="middle" x="509" y="-280" font-family="Helvetica,sans-Serif" font-size="10.00"> +attrs</text>
 </g>
 <!-- Node10&#45;&gt;Node9 -->
 <g id="edge10" class="edge"><title>Node10&#45;&gt;Node9</title>
-<path fill="none" stroke="midnightblue" d="M468.722,-647.578C473.701,-589.489 482.508,-486.735 487.745,-425.643"/>
-<polygon fill="none" stroke="midnightblue" points="465.205,-647.622 467.838,-657.885 472.18,-648.22 465.205,-647.622"/>
+<path fill="none" stroke="midnightblue" d="M468.722,-658.578C473.701,-600.489 482.508,-497.735 487.745,-436.643"/>
+<polygon fill="none" stroke="midnightblue" points="465.205,-658.622 467.838,-668.885 472.18,-659.22 465.205,-658.622"/>
 </g>
 <!-- Node11 -->
 <g id="node11" class="node"><title>Node11</title>
 <g id="a_node11"><a xlink:href="classtvm_1_1RelayExpr.html" target="_top" xlink:title="Managed reference to RelayExprNode. ">
-<polygon fill="white" stroke="black" points="690,-237.5 690,-305.5 840,-305.5 840,-237.5 690,-237.5"/>
-<text text-anchor="middle" x="765" y="-293.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::RelayExpr</text>
-<polyline fill="none" stroke="black" points="690,-286.5 840,-286.5 "/>
-<text text-anchor="middle" x="765" y="-274.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="690,-267.5 840,-267.5 "/>
-<text text-anchor="start" x="698" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="698" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<polygon fill="white" stroke="black" points="690,-248.5 690,-316.5 840,-316.5 840,-248.5 690,-248.5"/>
+<text text-anchor="middle" x="765" y="-304.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::RelayExpr</text>
+<polyline fill="none" stroke="black" points="690,-297.5 840,-297.5 "/>
+<text text-anchor="middle" x="765" y="-285.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="690,-278.5 840,-278.5 "/>
+<text text-anchor="start" x="698" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="698" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
 <!-- Node11&#45;&gt;Node1 -->
 <g id="edge12" class="edge"><title>Node11&#45;&gt;Node1</title>
-<path fill="none" stroke="#404040" d="M765,-237.315C765,-204.641 765,-153.946 765,-113.834"/>
-<polygon fill="none" stroke="#404040" points="765,-113.756 761,-107.756 765,-101.756 769,-107.756 765,-113.756"/>
-<text text-anchor="middle" x="782.5" y="-176.5" font-family="Helvetica,sans-Serif" font-size="10.00"> +body</text>
+<path fill="none" stroke="#404040" d="M765,-248.129C765,-212.977 765,-156.835 765,-113.606"/>
+<polygon fill="none" stroke="#404040" points="765,-113.5 761,-107.5 765,-101.5 769,-107.5 765,-113.5"/>
+<text text-anchor="middle" x="782.5" y="-182" font-family="Helvetica,sans-Serif" font-size="10.00"> +body</text>
 </g>
 <!-- Node12&#45;&gt;Node11 -->
 <g id="edge13" class="edge"><title>Node12&#45;&gt;Node11</title>
-<path fill="none" stroke="midnightblue" d="M792.704,-648.027C791.308,-639.746 789.992,-631.121 789,-623 774.841,-507.059 768.436,-368.446 766.106,-305.958"/>
-<polygon fill="none" stroke="midnightblue" points="789.261,-648.655 794.432,-657.903 796.156,-647.449 789.261,-648.655"/>
+<path fill="none" stroke="midnightblue" d="M792.704,-659.027C791.308,-650.746 789.992,-642.121 789,-634 774.841,-518.059 768.436,-379.446 766.106,-316.958"/>
+<polygon fill="none" stroke="midnightblue" points="789.261,-659.655 794.432,-668.903 796.156,-658.449 789.261,-659.655"/>
 </g>
 <!-- Node13&#45;&gt;Node1 -->
 <g id="edge16" class="edge"><title>Node13&#45;&gt;Node1</title>
-<path fill="none" stroke="#404040" d="M859.87,-444.298C859.435,-385.069 855.57,-305.613 841,-237 831.33,-191.459 821.752,-182.039 804,-139 800.533,-130.595 796.758,-121.791 792.968,-113.147"/>
-<polygon fill="none" stroke="#404040" points="792.856,-112.895 786.77,-109.028 788,-101.922 794.086,-105.79 792.856,-112.895"/>
-<text text-anchor="middle" x="876.5" y="-269" font-family="Helvetica,sans-Serif" font-size="10.00"> +params</text>
+<path fill="none" stroke="#404040" d="M859.111,-455.452C858.352,-396.29 854.409,-316.849 841,-248 831.22,-197.784 822.706,-186.617 804,-139 800.675,-130.537 796.982,-121.701 793.231,-113.041"/>
+<polygon fill="none" stroke="#404040" points="793.121,-112.79 787.045,-108.906 788.293,-101.804 794.369,-105.688 793.121,-112.79"/>
+<text text-anchor="middle" x="875.5" y="-280" font-family="Helvetica,sans-Serif" font-size="10.00"> +params</text>
 </g>
 <!-- Node14&#45;&gt;Node1 -->
 <g id="edge18" class="edge"><title>Node14&#45;&gt;Node1</title>
-<path fill="none" stroke="#404040" d="M982.117,-449.909C965.784,-389.135 939.697,-305.525 905,-237 880.82,-189.247 867.346,-181.647 835,-139 828.131,-129.944 820.737,-120.472 813.418,-111.25"/>
-<polygon fill="none" stroke="#404040" points="813.328,-111.138 806.459,-108.943 805.843,-101.759 812.712,-103.953 813.328,-111.138"/>
-<text text-anchor="middle" x="972.5" y="-269" font-family="Helvetica,sans-Serif" font-size="10.00"> +type_params</text>
+<path fill="none" stroke="#404040" d="M980.459,-460.84C963.316,-400.404 936.792,-317.243 904,-248 879.46,-196.182 868.358,-185.632 835,-139 828.471,-129.872 821.315,-120.424 814.149,-111.266"/>
+<polygon fill="none" stroke="#404040" points="814.149,-111.266 807.29,-109.042 806.705,-101.854 813.564,-104.079 814.149,-111.266"/>
+<text text-anchor="middle" x="970.5" y="-280" font-family="Helvetica,sans-Serif" font-size="10.00"> +type_params</text>
 </g>
 </g>
 </svg>
diff --git a/docs/doxygen/classtvm_1_1relay_1_1FunctionNode__inherit__graph.svg b/docs/doxygen/classtvm_1_1relay_1_1FunctionNode__inherit__graph.svg
index 03d534c..b2de787 100644
--- a/docs/doxygen/classtvm_1_1relay_1_1FunctionNode__inherit__graph.svg
+++ b/docs/doxygen/classtvm_1_1relay_1_1FunctionNode__inherit__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.38.0 (20140413.2041)
  -->
 <!-- Title: tvm::relay::FunctionNode Pages: 1 -->
-<svg width="213pt" height="651pt"
- viewBox="0.00 0.00 213.00 651.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 647)">
+<svg width="213pt" height="662pt"
+ viewBox="0.00 0.00 213.00 662.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 658)">
 <title>tvm::relay::FunctionNode</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-647 209,-647 209,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-658 209,-658 209,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node"><title>Node1</title>
 <polygon fill="#bfbfbf" stroke="black" points="-1.42109e-14,-0.5 -1.42109e-14,-145.5 205,-145.5 205,-0.5 -1.42109e-14,-0.5"/>
@@ -29,12 +29,13 @@
 <!-- Node2 -->
 <g id="node2" class="node"><title>Node2</title>
 <g id="a_node2"><a xlink:href="classtvm_1_1BaseFuncNode.html" target="_top" xlink:title="Base node of all functions. ">
-<polygon fill="white" stroke="black" points="0.5,-182.5 0.5,-272.5 204.5,-272.5 204.5,-182.5 0.5,-182.5"/>
-<text text-anchor="middle" x="102.5" y="-260.5" font-family="Helvetica,sans-Serif" font-size="10.00">BaseFuncNode</text>
-<polyline fill="none" stroke="black" points="0.5,-253.5 204.5,-253.5 "/>
-<text text-anchor="start" x="8.5" y="-241.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ attrs</text>
-<text text-anchor="start" x="8.5" y="-230.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<polyline fill="none" stroke="black" points="0.5,-223.5 204.5,-223.5 "/>
+<polygon fill="white" stroke="black" points="0.5,-182.5 0.5,-283.5 204.5,-283.5 204.5,-182.5 0.5,-182.5"/>
+<text text-anchor="middle" x="102.5" y="-271.5" font-family="Helvetica,sans-Serif" font-size="10.00">BaseFuncNode</text>
+<polyline fill="none" stroke="black" points="0.5,-264.5 204.5,-264.5 "/>
+<text text-anchor="start" x="8.5" y="-252.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ attrs</text>
+<text text-anchor="start" x="8.5" y="-241.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<polyline fill="none" stroke="black" points="0.5,-234.5 204.5,-234.5 "/>
+<text text-anchor="start" x="8.5" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetAttr()</text>
 <text text-anchor="start" x="8.5" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetAttr()</text>
 <text text-anchor="start" x="8.5" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HasNonzeroAttr()</text>
 <text text-anchor="start" x="8.5" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_INFO()</text>
@@ -43,64 +44,64 @@
 </g>
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge"><title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M102.5,-172.13C102.5,-163.526 102.5,-154.516 102.5,-145.591"/>
-<polygon fill="none" stroke="midnightblue" points="99.0001,-172.391 102.5,-182.391 106,-172.391 99.0001,-172.391"/>
+<path fill="none" stroke="midnightblue" d="M102.5,-172.381C102.5,-163.656 102.5,-154.595 102.5,-145.66"/>
+<polygon fill="none" stroke="midnightblue" points="99.0001,-172.441 102.5,-182.441 106,-172.441 99.0001,-172.441"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node"><title>Node3</title>
 <g id="a_node3"><a xlink:href="classtvm_1_1RelayExprNode.html" target="_top" xlink:title="Base node of all non&#45;primitive expressions. ">
-<polygon fill="white" stroke="black" points="0.5,-309.5 0.5,-410.5 204.5,-410.5 204.5,-309.5 0.5,-309.5"/>
-<text text-anchor="middle" x="102.5" y="-398.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::RelayExprNode</text>
-<polyline fill="none" stroke="black" points="0.5,-391.5 204.5,-391.5 "/>
-<text text-anchor="start" x="8.5" y="-379.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ span</text>
-<text text-anchor="start" x="8.5" y="-368.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ checked_type_</text>
-<text text-anchor="start" x="8.5" y="-357.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<polyline fill="none" stroke="black" points="0.5,-350.5 204.5,-350.5 "/>
-<text text-anchor="start" x="8.5" y="-338.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ checked_type()</text>
-<text text-anchor="start" x="8.5" y="-327.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ type_as()</text>
-<text text-anchor="start" x="8.5" y="-316.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_INFO()</text>
+<polygon fill="white" stroke="black" points="0.5,-320.5 0.5,-421.5 204.5,-421.5 204.5,-320.5 0.5,-320.5"/>
+<text text-anchor="middle" x="102.5" y="-409.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::RelayExprNode</text>
+<polyline fill="none" stroke="black" points="0.5,-402.5 204.5,-402.5 "/>
+<text text-anchor="start" x="8.5" y="-390.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ span</text>
+<text text-anchor="start" x="8.5" y="-379.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ checked_type_</text>
+<text text-anchor="start" x="8.5" y="-368.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<polyline fill="none" stroke="black" points="0.5,-361.5 204.5,-361.5 "/>
+<text text-anchor="start" x="8.5" y="-349.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ checked_type()</text>
+<text text-anchor="start" x="8.5" y="-338.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ type_as()</text>
+<text text-anchor="start" x="8.5" y="-327.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_INFO()</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="M102.5,-299.232C102.5,-290.236 102.5,-281.101 102.5,-272.516"/>
-<polygon fill="none" stroke="midnightblue" points="99.0001,-299.291 102.5,-309.291 106,-299.291 99.0001,-299.291"/>
+<path fill="none" stroke="midnightblue" d="M102.5,-310C102.5,-301.271 102.5,-292.363 102.5,-283.863"/>
+<polygon fill="none" stroke="midnightblue" points="99.0001,-310.131 102.5,-320.131 106,-310.131 99.0001,-310.131"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node"><title>Node4</title>
 <g id="a_node4"><a xlink:href="classtvm_1_1BaseExprNode.html" target="_top" xlink:title="Base type of all the expressions. ">
-<polygon fill="white" stroke="black" points="0.5,-447.5 0.5,-548.5 204.5,-548.5 204.5,-447.5 0.5,-447.5"/>
-<text text-anchor="middle" x="102.5" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseExprNode</text>
-<polyline fill="none" stroke="black" points="0.5,-529.5 204.5,-529.5 "/>
-<text text-anchor="start" x="8.5" y="-517.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
-<text text-anchor="start" x="8.5" y="-506.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_sequal</text>
-<text text-anchor="start" x="8.5" y="-495.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
-<text text-anchor="start" x="8.5" y="-484.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_shash</text>
-<text text-anchor="start" x="8.5" y="-473.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
-<polyline fill="none" stroke="black" points="0.5,-466.5 204.5,-466.5 "/>
-<text text-anchor="start" x="8.5" y="-454.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_INFO()</text>
+<polygon fill="white" stroke="black" points="0.5,-458.5 0.5,-559.5 204.5,-559.5 204.5,-458.5 0.5,-458.5"/>
+<text text-anchor="middle" x="102.5" y="-547.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::BaseExprNode</text>
+<polyline fill="none" stroke="black" points="0.5,-540.5 204.5,-540.5 "/>
+<text text-anchor="start" x="8.5" y="-528.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_key</text>
+<text text-anchor="start" x="8.5" y="-517.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_sequal</text>
+<text text-anchor="start" x="8.5" y="-506.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
+<text text-anchor="start" x="8.5" y="-495.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_has_method_shash</text>
+<text text-anchor="start" x="8.5" y="-484.5" font-family="Helvetica,sans-Serif" font-size="10.00">_reduce</text>
+<polyline fill="none" stroke="black" points="0.5,-477.5 204.5,-477.5 "/>
+<text text-anchor="start" x="8.5" y="-465.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DECLARE_BASE_OBJECT_INFO()</text>
 </a>
 </g>
 </g>
 <!-- Node4&#45;&gt;Node3 -->
 <g id="edge3" class="edge"><title>Node4&#45;&gt;Node3</title>
-<path fill="none" stroke="midnightblue" d="M102.5,-437C102.5,-428.271 102.5,-419.363 102.5,-410.863"/>
-<polygon fill="none" stroke="midnightblue" points="99.0001,-437.131 102.5,-447.131 106,-437.131 99.0001,-437.131"/>
+<path fill="none" stroke="midnightblue" d="M102.5,-448C102.5,-439.271 102.5,-430.363 102.5,-421.863"/>
+<polygon fill="none" stroke="midnightblue" points="99.0001,-448.131 102.5,-458.131 106,-448.131 99.0001,-448.131"/>
 </g>
 <!-- Node5 -->
 <g id="node5" class="node"><title>Node5</title>
-<polygon fill="white" stroke="#bfbfbf" points="79,-585.5 79,-642.5 126,-642.5 126,-585.5 79,-585.5"/>
-<text text-anchor="middle" x="102.5" y="-630.5" font-family="Helvetica,sans-Serif" font-size="10.00">Object</text>
-<polyline fill="none" stroke="#bfbfbf" points="79,-623.5 126,-623.5 "/>
-<text text-anchor="middle" x="102.5" y="-611.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="#bfbfbf" points="79,-604.5 126,-604.5 "/>
-<text text-anchor="middle" x="102.5" y="-592.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polygon fill="white" stroke="#bfbfbf" points="79,-596.5 79,-653.5 126,-653.5 126,-596.5 79,-596.5"/>
+<text text-anchor="middle" x="102.5" y="-641.5" font-family="Helvetica,sans-Serif" font-size="10.00">Object</text>
+<polyline fill="none" stroke="#bfbfbf" points="79,-634.5 126,-634.5 "/>
+<text text-anchor="middle" x="102.5" y="-622.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="#bfbfbf" points="79,-615.5 126,-615.5 "/>
+<text text-anchor="middle" x="102.5" y="-603.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
 </g>
 <!-- Node5&#45;&gt;Node4 -->
 <g id="edge4" class="edge"><title>Node5&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M102.5,-575.354C102.5,-566.796 102.5,-557.578 102.5,-548.608"/>
-<polygon fill="none" stroke="midnightblue" points="99.0001,-575.404 102.5,-585.404 106,-575.404 99.0001,-575.404"/>
+<path fill="none" stroke="midnightblue" d="M102.5,-586.354C102.5,-577.796 102.5,-568.578 102.5,-559.608"/>
+<polygon fill="none" stroke="midnightblue" points="99.0001,-586.404 102.5,-596.404 106,-586.404 99.0001,-586.404"/>
 </g>
 </g>
 </svg>
diff --git a/docs/doxygen/classtvm_1_1relay_1_1InterpreterClosure-members.html b/docs/doxygen/classtvm_1_1relay_1_1InterpreterClosure-members.html
index c394e81..5327de5 100644
--- a/docs/doxygen/classtvm_1_1relay_1_1InterpreterClosure-members.html
+++ b/docs/doxygen/classtvm_1_1relay_1_1InterpreterClosure-members.html
@@ -94,27 +94,28 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 <p>This is the complete list of members for <a class="el" href="classtvm_1_1relay_1_1InterpreterClosure.html">tvm::relay::InterpreterClosure</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ab51c99a3607ca95884d9efd978998ce8">as</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#aa5c355fbb7d2f7402ee360dba8a52cdd">ContainerType</a> typedef</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#ac261cdb80487fb29ac42b28678f8cbef">data_</a></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">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a79d0ae0a887ed5cbfa67de7d43f0ef3a">defined</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#acd04bb22a6861e9952c344ee8547411f">DowncastNoCheck</a>(ObjectRef ref)</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">protected</span><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a22e5bb9d64dbc773bb9263b70882239e">FFIClearAfterMove</a>(ObjectRef *ref)</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">protected</span><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a11ad7a277c175ee33e1551bbb77a8694">get</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#aa4604d96f4a77cc10cc1e0419758fb2c">get_mutable</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><span class="mlabel">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aed593996e4076632450de8fde776707c">GetDataPtr</a>(const ObjectRef &amp;ref)</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">protected</span><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1relay_1_1InterpreterClosure.html#a7ed5dfc275aef34ebe2d024f2652265a">InterpreterClosure</a>(tvm::Map&lt; Var, ObjectRef &gt; env, Function func)</td><td class="entry"><a class="el" href="classtvm_1_1relay_1_1InterpreterClosure.html">tvm::relay::InterpreterClosure</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_1runtime_1_1ObjectRef.html#a2ae377cc59f98b42339d76bded1c1711">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_1runtime_1_1ObjectRef.html#ab9b1ac131656be45db88e69c04bb16af">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#a17626209947c4a2f302422be451661c5">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#ac8c2b78649a428e35e279d085d509e1b">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_1runtime_1_1ObjectRef.html#a62014c9eba5cae2ab5a84963725d6a65">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_1relay_1_1InterpreterClosure.html#a586ccb5dffd732dc7b0978f287b8946c">TVM_DEFINE_OBJECT_REF_METHODS</a>(InterpreterClosure, runtime::vm::Closure, InterpreterClosureObj)</td><td class="entry"><a class="el" href="classtvm_1_1relay_1_1InterpreterClosure.html">tvm::relay::InterpreterClosure</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1vm_1_1Closure.html#a8f94c9fd761ef8cf0917d5300e23bfe8">tvm::runtime::vm::Closure::TVM_DEFINE_OBJECT_REF_METHODS</a>(Closure, ObjectRef, ClosureObj)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1vm_1_1Closure.html">tvm::runtime::vm::Closure</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4142990fd1959abc95aa0cccca4f6cda">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#a4cfef0af824ed4afb3daefa600b2aa04">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_1runtime_1_1ObjectRef.html#a3e9b0901b6e01257b060a45e159cc37e">_type_is_nullable</a></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">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ab51c99a3607ca95884d9efd978998ce8">as</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#aa5c355fbb7d2f7402ee360dba8a52cdd">ContainerType</a> typedef</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#ac261cdb80487fb29ac42b28678f8cbef">data_</a></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">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a79d0ae0a887ed5cbfa67de7d43f0ef3a">defined</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#acd04bb22a6861e9952c344ee8547411f">DowncastNoCheck</a>(ObjectRef ref)</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">protected</span><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a22e5bb9d64dbc773bb9263b70882239e">FFIClearAfterMove</a>(ObjectRef *ref)</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">protected</span><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a11ad7a277c175ee33e1551bbb77a8694">get</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#aa4604d96f4a77cc10cc1e0419758fb2c">get_mutable</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><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aed593996e4076632450de8fde776707c">GetDataPtr</a>(const ObjectRef &amp;ref)</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">protected</span><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1relay_1_1InterpreterClosure.html#a7ed5dfc275aef34ebe2d024f2652265a">InterpreterClosure</a>(tvm::Map&lt; Var, ObjectRef &gt; env, Function func)</td><td class="entry"><a class="el" href="classtvm_1_1relay_1_1InterpreterClosure.html">tvm::relay::InterpreterClosure</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_1runtime_1_1ObjectRef.html#a2ae377cc59f98b42339d76bded1c1711">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_1runtime_1_1ObjectRef.html#ab9b1ac131656be45db88e69c04bb16af">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#a17626209947c4a2f302422be451661c5">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#ac8c2b78649a428e35e279d085d509e1b">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_1runtime_1_1ObjectRef.html#a62014c9eba5cae2ab5a84963725d6a65">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_1relay_1_1InterpreterClosure.html#a586ccb5dffd732dc7b0978f287b8946c">TVM_DEFINE_OBJECT_REF_METHODS</a>(InterpreterClosure, runtime::vm::Closure, InterpreterClosureObj)</td><td class="entry"><a class="el" href="classtvm_1_1relay_1_1InterpreterClosure.html">tvm::relay::InterpreterClosure</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1vm_1_1Closure.html#a8f94c9fd761ef8cf0917d5300e23bfe8">tvm::runtime::vm::Closure::TVM_DEFINE_OBJECT_REF_METHODS</a>(Closure, ObjectRef, ClosureObj)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1vm_1_1Closure.html">tvm::runtime::vm::Closure</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4142990fd1959abc95aa0cccca4f6cda">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#a4cfef0af824ed4afb3daefa600b2aa04">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/doxygen/classtvm_1_1relay_1_1InterpreterClosure.html b/docs/doxygen/classtvm_1_1relay_1_1InterpreterClosure.html
index 7a67181..6123a2c 100644
--- a/docs/doxygen/classtvm_1_1relay_1_1InterpreterClosure.html
+++ b/docs/doxygen/classtvm_1_1relay_1_1InterpreterClosure.html
@@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="dynheader">
 Inheritance diagram for tvm::relay::InterpreterClosure:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1relay_1_1InterpreterClosure__inherit__graph.svg" width="220" height="603"><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_1relay_1_1InterpreterClosure__inherit__graph.svg" width="220" height="618"><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">
@@ -158,6 +158,9 @@ Additional Inherited Members</h2></td></tr>
 <tr class="memitem:aa5c355fbb7d2f7402ee360dba8a52cdd inherit pub_types_classtvm_1_1runtime_1_1ObjectRef"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa5c355fbb7d2f7402ee360dba8a52cdd">ContainerType</a> = <a class="el" href="classtvm_1_1runtime_1_1Object.html">Object</a></td></tr>
 <tr class="memdesc:aa5c355fbb7d2f7402ee360dba8a52cdd inherit pub_types_classtvm_1_1runtime_1_1ObjectRef"><td class="mdescLeft">&#160;</td><td class="mdescRight">type indicate the container type.  <a href="#aa5c355fbb7d2f7402ee360dba8a52cdd">More...</a><br /></td></tr>
 <tr class="separator:aa5c355fbb7d2f7402ee360dba8a52cdd inherit pub_types_classtvm_1_1runtime_1_1ObjectRef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_static_attribs_classtvm_1_1runtime_1_1ObjectRef"><td colspan="2" onclick="javascript:toggleInherit('pub_static_attribs_classtvm_1_1runtime_1_1ObjectRef')"><img src="closed.png" alt="-"/>&#160;Static Public Attributes inherited from <a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td></tr>
+<tr class="memitem:a3e9b0901b6e01257b060a45e159cc37e inherit pub_static_attribs_classtvm_1_1runtime_1_1ObjectRef"><td class="memItemLeft" align="right" valign="top">static constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3e9b0901b6e01257b060a45e159cc37e">_type_is_nullable</a> = true</td></tr>
+<tr class="separator:a3e9b0901b6e01257b060a45e159cc37e inherit pub_static_attribs_classtvm_1_1runtime_1_1ObjectRef"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="inherit_header pro_methods_classtvm_1_1runtime_1_1ObjectRef"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classtvm_1_1runtime_1_1ObjectRef')"><img src="closed.png" alt="-"/>&#160;Protected Member Functions inherited from <a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td></tr>
 <tr class="memitem:aa4604d96f4a77cc10cc1e0419758fb2c inherit pro_methods_classtvm_1_1runtime_1_1ObjectRef"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1runtime_1_1Object.html">Object</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa4604d96f4a77cc10cc1e0419758fb2c">get_mutable</a> () const </td></tr>
 <tr class="separator:aa4604d96f4a77cc10cc1e0419758fb2c inherit pro_methods_classtvm_1_1runtime_1_1ObjectRef"><td class="memSeparator" colspan="2">&#160;</td></tr>
diff --git a/docs/doxygen/classtvm_1_1relay_1_1InterpreterClosure__coll__graph.svg b/docs/doxygen/classtvm_1_1relay_1_1InterpreterClosure__coll__graph.svg
index 7af19f9..f79a183 100644
--- a/docs/doxygen/classtvm_1_1relay_1_1InterpreterClosure__coll__graph.svg
+++ b/docs/doxygen/classtvm_1_1relay_1_1InterpreterClosure__coll__graph.svg
@@ -44,7 +44,7 @@
 <polygon fill="white" stroke="black" points="13.5,-223.5 13.5,-445.5 143.5,-445.5 143.5,-223.5 13.5,-223.5"/>
 <text text-anchor="middle" x="78.5" y="-433.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
 <polyline fill="none" stroke="black" points="13.5,-426.5 143.5,-426.5 "/>
-<text text-anchor="middle" x="78.5" y="-414.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<text text-anchor="start" x="21.5" y="-414.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
 <polyline fill="none" stroke="black" points="13.5,-407.5 143.5,-407.5 "/>
 <text text-anchor="start" x="21.5" y="-395.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="21.5" y="-384.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
diff --git a/docs/doxygen/classtvm_1_1relay_1_1InterpreterClosure__inherit__graph.svg b/docs/doxygen/classtvm_1_1relay_1_1InterpreterClosure__inherit__graph.svg
index 8687e95..a0b64dc 100644
--- a/docs/doxygen/classtvm_1_1relay_1_1InterpreterClosure__inherit__graph.svg
+++ b/docs/doxygen/classtvm_1_1relay_1_1InterpreterClosure__inherit__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.38.0 (20140413.2041)
  -->
 <!-- Title: tvm::relay::InterpreterClosure Pages: 1 -->
-<svg width="165pt" height="452pt"
- viewBox="0.00 0.00 165.00 452.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 448)">
+<svg width="165pt" height="463pt"
+ viewBox="0.00 0.00 165.00 463.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 459)">
 <title>tvm::relay::InterpreterClosure</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-448 161,-448 161,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-459 161,-459 161,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node"><title>Node1</title>
 <polygon fill="#bfbfbf" stroke="black" points="0,-0.5 0,-79.5 157,-79.5 157,-0.5 0,-0.5"/>
@@ -41,9 +41,10 @@
 <!-- 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,-221.5 13.5,-443.5 143.5,-443.5 143.5,-221.5 13.5,-221.5"/>
-<text text-anchor="middle" x="78.5" y="-431.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="13.5,-424.5 143.5,-424.5 "/>
+<polygon fill="white" stroke="black" points="13.5,-221.5 13.5,-454.5 143.5,-454.5 143.5,-221.5 13.5,-221.5"/>
+<text text-anchor="middle" x="78.5" y="-442.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="13.5,-435.5 143.5,-435.5 "/>
+<text text-anchor="start" x="21.5" y="-423.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
 <text text-anchor="start" x="21.5" y="-412.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
 <polyline fill="none" stroke="black" points="13.5,-405.5 143.5,-405.5 "/>
 <text text-anchor="start" x="21.5" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
@@ -67,8 +68,8 @@
 </g>
 <!-- Node3&#45;&gt;Node2 -->
 <g id="edge2" class="edge"><title>Node3&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M78.5,-211.221C78.5,-201.66 78.5,-192.615 78.5,-184.593"/>
-<polygon fill="none" stroke="midnightblue" points="75.0001,-211.35 78.5,-221.35 82.0001,-211.35 75.0001,-211.35"/>
+<path fill="none" stroke="midnightblue" d="M78.5,-211.291C78.5,-201.788 78.5,-192.816 78.5,-184.853"/>
+<polygon fill="none" stroke="midnightblue" points="75.0001,-211.365 78.5,-221.365 82.0001,-211.365 75.0001,-211.365"/>
 </g>
 </g>
 </svg>
diff --git a/docs/doxygen/classtvm_1_1relay_1_1RecClosureObj__coll__graph.svg b/docs/doxygen/classtvm_1_1relay_1_1RecClosureObj__coll__graph.svg
index 1caa952..f6ccd7c 100644
--- a/docs/doxygen/classtvm_1_1relay_1_1RecClosureObj__coll__graph.svg
+++ b/docs/doxygen/classtvm_1_1relay_1_1RecClosureObj__coll__graph.svg
@@ -149,7 +149,7 @@
 <polygon fill="white" stroke="black" points="246.5,-361.5 246.5,-583.5 376.5,-583.5 376.5,-361.5 246.5,-361.5"/>
 <text text-anchor="middle" x="311.5" y="-571.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
 <polyline fill="none" stroke="black" points="246.5,-564.5 376.5,-564.5 "/>
-<text text-anchor="middle" x="311.5" y="-552.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<text text-anchor="start" x="254.5" y="-552.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
 <polyline fill="none" stroke="black" points="246.5,-545.5 376.5,-545.5 "/>
 <text text-anchor="start" x="254.5" y="-533.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="254.5" y="-522.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
diff --git a/docs/doxygen/classtvm_1_1runtime_1_1ADT-members.html b/docs/doxygen/classtvm_1_1runtime_1_1ADT-members.html
index 211c6d1..6d15610 100644
--- a/docs/doxygen/classtvm_1_1runtime_1_1ADT-members.html
+++ b/docs/doxygen/classtvm_1_1runtime_1_1ADT-members.html
@@ -94,32 +94,33 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 <p>This is the complete list of members for <a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html#a204397cb319fdb83a72b1d9112a09caa">ADT</a>(int32_t tag, std::vector&lt; ObjectRef &gt; fields)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html#aea0665ed087095ed39354064e5071d4f">ADT</a>(int32_t tag, Iterator begin, Iterator end)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</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_1ADT.html#a9ebe228980db0256d72fc01ba5c7ae89">ADT</a>(int32_t tag, std::initializer_list&lt; ObjectRef &gt; init)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</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#ab51c99a3607ca95884d9efd978998ce8">as</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#aa5c355fbb7d2f7402ee360dba8a52cdd">ContainerType</a> typedef</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#ac261cdb80487fb29ac42b28678f8cbef">data_</a></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">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a79d0ae0a887ed5cbfa67de7d43f0ef3a">defined</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#acd04bb22a6861e9952c344ee8547411f">DowncastNoCheck</a>(ObjectRef ref)</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">protected</span><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a22e5bb9d64dbc773bb9263b70882239e">FFIClearAfterMove</a>(ObjectRef *ref)</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">protected</span><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a11ad7a277c175ee33e1551bbb77a8694">get</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#aa4604d96f4a77cc10cc1e0419758fb2c">get_mutable</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><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aed593996e4076632450de8fde776707c">GetDataPtr</a>(const ObjectRef &amp;ref)</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">protected</span><span class="mlabel">static</span></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_1runtime_1_1ObjectRef.html#a2ae377cc59f98b42339d76bded1c1711">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_1runtime_1_1ObjectRef.html#ab9b1ac131656be45db88e69c04bb16af">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#a17626209947c4a2f302422be451661c5">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#ac8c2b78649a428e35e279d085d509e1b">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_1runtime_1_1ADT.html#a6a1dba101b18cffbd307f7c0f92a39b2">operator[]</a>(size_t idx) const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</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#a62014c9eba5cae2ab5a84963725d6a65">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_1runtime_1_1ADT.html#af8cf2f61fa9b7737718f15a018d12b84">size</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html#a1a631df56a143132d60076c8038a9a97">tag</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</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_1ADT.html#a9952c0be3e79a57cf80a3c01fd7bbe87">Tuple</a>(Args &amp;&amp;...args)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html#a5367ea22b4dab8c73d06031cd4c72dec">TVM_DEFINE_OBJECT_REF_METHODS</a>(ADT, ObjectRef, ADTObj)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4142990fd1959abc95aa0cccca4f6cda">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#a4cfef0af824ed4afb3daefa600b2aa04">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_1runtime_1_1ObjectRef.html#a3e9b0901b6e01257b060a45e159cc37e">_type_is_nullable</a></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">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html#a204397cb319fdb83a72b1d9112a09caa">ADT</a>(int32_t tag, std::vector&lt; ObjectRef &gt; fields)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</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_1ADT.html#aea0665ed087095ed39354064e5071d4f">ADT</a>(int32_t tag, Iterator begin, Iterator end)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html#a9ebe228980db0256d72fc01ba5c7ae89">ADT</a>(int32_t tag, std::initializer_list&lt; ObjectRef &gt; init)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</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#ab51c99a3607ca95884d9efd978998ce8">as</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#aa5c355fbb7d2f7402ee360dba8a52cdd">ContainerType</a> typedef</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#ac261cdb80487fb29ac42b28678f8cbef">data_</a></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">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a79d0ae0a887ed5cbfa67de7d43f0ef3a">defined</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#acd04bb22a6861e9952c344ee8547411f">DowncastNoCheck</a>(ObjectRef ref)</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">protected</span><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a22e5bb9d64dbc773bb9263b70882239e">FFIClearAfterMove</a>(ObjectRef *ref)</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">protected</span><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a11ad7a277c175ee33e1551bbb77a8694">get</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#aa4604d96f4a77cc10cc1e0419758fb2c">get_mutable</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><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aed593996e4076632450de8fde776707c">GetDataPtr</a>(const ObjectRef &amp;ref)</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">protected</span><span class="mlabel">static</span></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_1runtime_1_1ObjectRef.html#a2ae377cc59f98b42339d76bded1c1711">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_1runtime_1_1ObjectRef.html#ab9b1ac131656be45db88e69c04bb16af">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#a17626209947c4a2f302422be451661c5">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#ac8c2b78649a428e35e279d085d509e1b">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_1runtime_1_1ADT.html#a6a1dba101b18cffbd307f7c0f92a39b2">operator[]</a>(size_t idx) const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</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#a62014c9eba5cae2ab5a84963725d6a65">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_1runtime_1_1ADT.html#af8cf2f61fa9b7737718f15a018d12b84">size</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</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_1ADT.html#a1a631df56a143132d60076c8038a9a97">tag</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html#a9952c0be3e79a57cf80a3c01fd7bbe87">Tuple</a>(Args &amp;&amp;...args)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html#a5367ea22b4dab8c73d06031cd4c72dec">TVM_DEFINE_OBJECT_REF_METHODS</a>(ADT, ObjectRef, ADTObj)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4142990fd1959abc95aa0cccca4f6cda">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#a4cfef0af824ed4afb3daefa600b2aa04">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/doxygen/classtvm_1_1runtime_1_1ADT.html b/docs/doxygen/classtvm_1_1runtime_1_1ADT.html
index 3728e2e..736bea0 100644
--- a/docs/doxygen/classtvm_1_1runtime_1_1ADT.html
+++ b/docs/doxygen/classtvm_1_1runtime_1_1ADT.html
@@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="dynheader">
 Inheritance diagram for tvm::runtime::ADT:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1runtime_1_1ADT__inherit__graph.svg" width="211" height="551"><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_1runtime_1_1ADT__inherit__graph.svg" width="211" height="566"><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">
@@ -183,6 +183,9 @@ Additional Inherited Members</h2></td></tr>
 <tr class="memitem:aa5c355fbb7d2f7402ee360dba8a52cdd inherit pub_types_classtvm_1_1runtime_1_1ObjectRef"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa5c355fbb7d2f7402ee360dba8a52cdd">ContainerType</a> = <a class="el" href="classtvm_1_1runtime_1_1Object.html">Object</a></td></tr>
 <tr class="memdesc:aa5c355fbb7d2f7402ee360dba8a52cdd inherit pub_types_classtvm_1_1runtime_1_1ObjectRef"><td class="mdescLeft">&#160;</td><td class="mdescRight">type indicate the container type.  <a href="#aa5c355fbb7d2f7402ee360dba8a52cdd">More...</a><br /></td></tr>
 <tr class="separator:aa5c355fbb7d2f7402ee360dba8a52cdd inherit pub_types_classtvm_1_1runtime_1_1ObjectRef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_static_attribs_classtvm_1_1runtime_1_1ObjectRef"><td colspan="2" onclick="javascript:toggleInherit('pub_static_attribs_classtvm_1_1runtime_1_1ObjectRef')"><img src="closed.png" alt="-"/>&#160;Static Public Attributes inherited from <a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td></tr>
+<tr class="memitem:a3e9b0901b6e01257b060a45e159cc37e inherit pub_static_attribs_classtvm_1_1runtime_1_1ObjectRef"><td class="memItemLeft" align="right" valign="top">static constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3e9b0901b6e01257b060a45e159cc37e">_type_is_nullable</a> = true</td></tr>
+<tr class="separator:a3e9b0901b6e01257b060a45e159cc37e inherit pub_static_attribs_classtvm_1_1runtime_1_1ObjectRef"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="inherit_header pro_methods_classtvm_1_1runtime_1_1ObjectRef"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classtvm_1_1runtime_1_1ObjectRef')"><img src="closed.png" alt="-"/>&#160;Protected Member Functions inherited from <a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td></tr>
 <tr class="memitem:aa4604d96f4a77cc10cc1e0419758fb2c inherit pro_methods_classtvm_1_1runtime_1_1ObjectRef"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1runtime_1_1Object.html">Object</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa4604d96f4a77cc10cc1e0419758fb2c">get_mutable</a> () const </td></tr>
 <tr class="separator:aa4604d96f4a77cc10cc1e0419758fb2c inherit pro_methods_classtvm_1_1runtime_1_1ObjectRef"><td class="memSeparator" colspan="2">&#160;</td></tr>
diff --git a/docs/doxygen/classtvm_1_1runtime_1_1ADT__coll__graph.svg b/docs/doxygen/classtvm_1_1runtime_1_1ADT__coll__graph.svg
index 38529cb..95a5215 100644
--- a/docs/doxygen/classtvm_1_1runtime_1_1ADT__coll__graph.svg
+++ b/docs/doxygen/classtvm_1_1runtime_1_1ADT__coll__graph.svg
@@ -32,7 +32,7 @@
 <polygon fill="white" stroke="black" points="10,-183.5 10,-405.5 140,-405.5 140,-183.5 10,-183.5"/>
 <text text-anchor="middle" x="75" y="-393.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
 <polyline fill="none" stroke="black" points="10,-386.5 140,-386.5 "/>
-<text text-anchor="middle" x="75" y="-374.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<text text-anchor="start" x="18" y="-374.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
 <polyline fill="none" stroke="black" points="10,-367.5 140,-367.5 "/>
 <text text-anchor="start" x="18" y="-355.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="18" y="-344.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
diff --git a/docs/doxygen/classtvm_1_1runtime_1_1ADT__inherit__graph.svg b/docs/doxygen/classtvm_1_1runtime_1_1ADT__inherit__graph.svg
index d2b1d6c..a88f275 100644
--- a/docs/doxygen/classtvm_1_1runtime_1_1ADT__inherit__graph.svg
+++ b/docs/doxygen/classtvm_1_1runtime_1_1ADT__inherit__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.38.0 (20140413.2041)
  -->
 <!-- Title: tvm::runtime::ADT Pages: 1 -->
-<svg width="158pt" height="413pt"
- viewBox="0.00 0.00 158.00 413.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 409)">
+<svg width="158pt" height="424pt"
+ viewBox="0.00 0.00 158.00 424.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 420)">
 <title>tvm::runtime::ADT</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-409 154,-409 154,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-420 154,-420 154,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node"><title>Node1</title>
 <polygon fill="#bfbfbf" stroke="black" points="-1.42109e-14,-0.5 -1.42109e-14,-145.5 150,-145.5 150,-0.5 -1.42109e-14,-0.5"/>
@@ -29,9 +29,10 @@
 <!-- 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="10,-182.5 10,-404.5 140,-404.5 140,-182.5 10,-182.5"/>
-<text text-anchor="middle" x="75" y="-392.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="10,-385.5 140,-385.5 "/>
+<polygon fill="white" stroke="black" points="10,-182.5 10,-415.5 140,-415.5 140,-182.5 10,-182.5"/>
+<text text-anchor="middle" x="75" y="-403.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="10,-396.5 140,-396.5 "/>
+<text text-anchor="start" x="18" y="-384.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
 <text text-anchor="start" x="18" y="-373.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
 <polyline fill="none" stroke="black" points="10,-366.5 140,-366.5 "/>
 <text text-anchor="start" x="18" y="-354.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
@@ -55,8 +56,8 @@
 </g>
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge"><title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M75,-172.127C75,-163.153 75,-154.279 75,-145.753"/>
-<polygon fill="none" stroke="midnightblue" points="71.5001,-172.29 75,-182.29 78.5001,-172.29 71.5001,-172.29"/>
+<path fill="none" stroke="midnightblue" d="M75,-172.15C75,-163.114 75,-154.201 75,-145.649"/>
+<polygon fill="none" stroke="midnightblue" points="71.5001,-172.391 75,-182.391 78.5001,-172.391 71.5001,-172.391"/>
 </g>
 </g>
 </svg>
diff --git a/docs/doxygen/classtvm_1_1runtime_1_1DeviceAPI-members.html b/docs/doxygen/classtvm_1_1runtime_1_1DeviceAPI-members.html
index 14a82f3..6af3e47 100644
--- a/docs/doxygen/classtvm_1_1runtime_1_1DeviceAPI-members.html
+++ b/docs/doxygen/classtvm_1_1runtime_1_1DeviceAPI-members.html
@@ -103,11 +103,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html#af096fadcf68d2fad804fc8a00a4f4311">FreeWorkspace</a>(TVMContext ctx, void *ptr)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html">tvm::runtime::DeviceAPI</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html#a50365326f6a7cd2f975f72d6503933d8">Get</a>(TVMContext ctx, bool allow_missing=false)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html">tvm::runtime::DeviceAPI</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html#a2b9effd4264a7e68f12958738d5c676a">GetAttr</a>(TVMContext ctx, DeviceAttrKind kind, TVMRetValue *rv)=0</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html">tvm::runtime::DeviceAPI</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html#a507f3514110b06bb60cb1f2906f8dcf8">SetDevice</a>(TVMContext ctx)=0</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html">tvm::runtime::DeviceAPI</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html#a2bf972e88ccbb2f896b061730655cf46">SetStream</a>(TVMContext ctx, TVMStreamHandle stream)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html">tvm::runtime::DeviceAPI</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html#a359964ae5ad0fbdba18da1a0db1a7ad6">StreamSync</a>(TVMContext ctx, TVMStreamHandle stream)=0</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html">tvm::runtime::DeviceAPI</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html#ac913e53e874729157e560efc7bc32420">SyncStreamFromTo</a>(TVMContext ctx, TVMStreamHandle event_src, TVMStreamHandle event_dst)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html">tvm::runtime::DeviceAPI</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html#af3fe69d9823d7c67c86ecf247d894f27">~DeviceAPI</a>()</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html">tvm::runtime::DeviceAPI</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html#ab35f07aacd4717465f8912aeded7001c">NeedSetDeviceContext</a>(int device_type)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html">tvm::runtime::DeviceAPI</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html#a507f3514110b06bb60cb1f2906f8dcf8">SetDevice</a>(TVMContext ctx)=0</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html">tvm::runtime::DeviceAPI</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html#a2bf972e88ccbb2f896b061730655cf46">SetStream</a>(TVMContext ctx, TVMStreamHandle stream)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html">tvm::runtime::DeviceAPI</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html#a359964ae5ad0fbdba18da1a0db1a7ad6">StreamSync</a>(TVMContext ctx, TVMStreamHandle stream)=0</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html">tvm::runtime::DeviceAPI</a></td><td class="entry"><span class="mlabel">pure virtual</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html#ac913e53e874729157e560efc7bc32420">SyncStreamFromTo</a>(TVMContext ctx, TVMStreamHandle event_src, TVMStreamHandle event_dst)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html">tvm::runtime::DeviceAPI</a></td><td class="entry"><span class="mlabel">virtual</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html#af3fe69d9823d7c67c86ecf247d894f27">~DeviceAPI</a>()</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html">tvm::runtime::DeviceAPI</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">virtual</span></td></tr>
 </table></div><!-- contents -->
 <!-- start footer part -->
 <hr class="footer"/><address class="footer"><small>
diff --git a/docs/doxygen/classtvm_1_1runtime_1_1DeviceAPI.html b/docs/doxygen/classtvm_1_1runtime_1_1DeviceAPI.html
index d432975..ecf264d 100644
--- a/docs/doxygen/classtvm_1_1runtime_1_1DeviceAPI.html
+++ b/docs/doxygen/classtvm_1_1runtime_1_1DeviceAPI.html
@@ -103,7 +103,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="dynheader">
 Collaboration diagram for tvm::runtime::DeviceAPI:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1runtime_1_1DeviceAPI__coll__graph.svg" width="187" height="279"><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_1runtime_1_1DeviceAPI__coll__graph.svg" width="207" height="294"><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">
@@ -154,6 +154,9 @@ Static Public Member Functions</h2></td></tr>
 <tr class="memitem:a50365326f6a7cd2f975f72d6503933d8"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html">DeviceAPI</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html#a50365326f6a7cd2f975f72d6503933d8">Get</a> (<a class="el" href="c__runtime__api_8h.html#a9363bb701f16ce5bbb381f2a013d25b4">TVMContext</a> ctx, bool allow_missing=false)</td></tr>
 <tr class="memdesc:a50365326f6a7cd2f975f72d6503933d8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get device API base don context.  <a href="#a50365326f6a7cd2f975f72d6503933d8">More...</a><br /></td></tr>
 <tr class="separator:a50365326f6a7cd2f975f72d6503933d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab35f07aacd4717465f8912aeded7001c"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1DeviceAPI.html#ab35f07aacd4717465f8912aeded7001c">NeedSetDeviceContext</a> (int device_type)</td></tr>
+<tr class="memdesc:ab35f07aacd4717465f8912aeded7001c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Whether a certian device type requires set device context before launching the kernel function.  <a href="#ab35f07aacd4717465f8912aeded7001c">More...</a><br /></td></tr>
+<tr class="separator:ab35f07aacd4717465f8912aeded7001c"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
 <div class="textblock"><p>TVM Runtime Device API, abstracts the device specific interface for memory management. </p>
@@ -384,7 +387,7 @@ Static Public Member Functions</h2></td></tr>
     <tr><td class="paramname">ctx_from</td><td>The source context </td></tr>
     <tr><td class="paramname">ctx_to</td><td>The target context </td></tr>
     <tr><td class="paramname">type_hint</td><td>The type of elements, only neded by certain backends. can be useful for cross device endian converison. </td></tr>
-    <tr><td class="paramname">stream</td><td>Optional stream object. </td></tr>
+    <tr><td class="paramname">stream</td><td><a class="el" href="classtvm_1_1runtime_1_1Optional.html" title="Optional container that to represent to a Nullable variant of T. ">Optional</a> stream object. </td></tr>
   </table>
   </dd>
 </dl>
@@ -647,6 +650,38 @@ Static Public Member Functions</h2></td></tr>
 
 </div>
 </div>
+<a class="anchor" id="ab35f07aacd4717465f8912aeded7001c"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">static bool tvm::runtime::DeviceAPI::NeedSetDeviceContext </td>
+          <td>(</td>
+          <td class="paramtype">int&#160;</td>
+          <td class="paramname"><em>device_type</em></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+<p>Whether a certian device type requires set device context before launching the kernel function. </p>
+<dl class="params"><dt>Parameters</dt><dd>
+  <table class="params">
+    <tr><td class="paramname">device_type</td><td>The device type. </td></tr>
+  </table>
+  </dd>
+</dl>
+
+</div>
+</div>
 <a class="anchor" id="a507f3514110b06bb60cb1f2906f8dcf8"></a>
 <div class="memitem">
 <div class="memproto">
diff --git a/docs/doxygen/classtvm_1_1runtime_1_1DeviceAPI__coll__graph.svg b/docs/doxygen/classtvm_1_1runtime_1_1DeviceAPI__coll__graph.svg
index 0c1150f..c5ad8e3 100644
--- a/docs/doxygen/classtvm_1_1runtime_1_1DeviceAPI__coll__graph.svg
+++ b/docs/doxygen/classtvm_1_1runtime_1_1DeviceAPI__coll__graph.svg
@@ -4,32 +4,33 @@
 <!-- Generated by graphviz version 2.38.0 (20140413.2041)
  -->
 <!-- Title: tvm::runtime::DeviceAPI Pages: 1 -->
-<svg width="140pt" height="209pt"
- viewBox="0.00 0.00 140.00 209.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 205)">
+<svg width="155pt" height="220pt"
+ viewBox="0.00 0.00 155.00 220.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 216)">
 <title>tvm::runtime::DeviceAPI</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-205 136,-205 136,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-216 151,-216 151,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node"><title>Node1</title>
-<polygon fill="#bfbfbf" stroke="black" points="0,-0.5 0,-200.5 132,-200.5 132,-0.5 0,-0.5"/>
-<text text-anchor="middle" x="66" y="-188.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::DeviceAPI</text>
-<polyline fill="none" stroke="black" points="0,-181.5 132,-181.5 "/>
-<text text-anchor="middle" x="66" y="-169.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="0,-162.5 132,-162.5 "/>
-<text text-anchor="start" x="8" y="-150.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~DeviceAPI()</text>
-<text text-anchor="start" x="8" y="-139.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ SetDevice()</text>
-<text text-anchor="start" x="8" y="-128.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetAttr()</text>
-<text text-anchor="start" x="8" y="-117.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ AllocDataSpace()</text>
-<text text-anchor="start" x="8" y="-106.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ FreeDataSpace()</text>
-<text text-anchor="start" x="8" y="-95.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ CopyDataFromTo()</text>
-<text text-anchor="start" x="8" y="-84.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ CreateStream()</text>
-<text text-anchor="start" x="8" y="-73.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ FreeStream()</text>
-<text text-anchor="start" x="8" y="-62.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ StreamSync()</text>
-<text text-anchor="start" x="8" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ SetStream()</text>
-<text text-anchor="start" x="8" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ SyncStreamFromTo()</text>
-<text text-anchor="start" x="8" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ AllocWorkspace()</text>
-<text text-anchor="start" x="8" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ FreeWorkspace()</text>
-<text text-anchor="start" x="8" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Get()</text>
+<polygon fill="#bfbfbf" stroke="black" points="0,-0.5 0,-211.5 147,-211.5 147,-0.5 0,-0.5"/>
+<text text-anchor="middle" x="73.5" y="-199.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::DeviceAPI</text>
+<polyline fill="none" stroke="black" points="0,-192.5 147,-192.5 "/>
+<text text-anchor="middle" x="73.5" y="-180.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="0,-173.5 147,-173.5 "/>
+<text text-anchor="start" x="8" y="-161.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ~DeviceAPI()</text>
+<text text-anchor="start" x="8" y="-150.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ SetDevice()</text>
+<text text-anchor="start" x="8" y="-139.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ GetAttr()</text>
+<text text-anchor="start" x="8" y="-128.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ AllocDataSpace()</text>
+<text text-anchor="start" x="8" y="-117.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ FreeDataSpace()</text>
+<text text-anchor="start" x="8" y="-106.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ CopyDataFromTo()</text>
+<text text-anchor="start" x="8" y="-95.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ CreateStream()</text>
+<text text-anchor="start" x="8" y="-84.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ FreeStream()</text>
+<text text-anchor="start" x="8" y="-73.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ StreamSync()</text>
+<text text-anchor="start" x="8" y="-62.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ SetStream()</text>
+<text text-anchor="start" x="8" y="-51.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ SyncStreamFromTo()</text>
+<text text-anchor="start" x="8" y="-40.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ AllocWorkspace()</text>
+<text text-anchor="start" x="8" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ FreeWorkspace()</text>
+<text text-anchor="start" x="8" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ Get()</text>
+<text text-anchor="start" x="8" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ NeedSetDeviceContext()</text>
 </g>
 </g>
 </svg>
diff --git a/docs/doxygen/classtvm_1_1runtime_1_1Module-members.html b/docs/doxygen/classtvm_1_1runtime_1_1Module-members.html
index 1e9c2f5..0925b79 100644
--- a/docs/doxygen/classtvm_1_1runtime_1_1Module-members.html
+++ b/docs/doxygen/classtvm_1_1runtime_1_1Module-members.html
@@ -94,31 +94,32 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 <p>This is the complete list of members for <a class="el" href="classtvm_1_1runtime_1_1Module.html">tvm::runtime::Module</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ab51c99a3607ca95884d9efd978998ce8">as</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_1Module.html#a2e17df628886ffd624ab5835e85b1a58">ContainerType</a> typedef</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html">tvm::runtime::Module</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ac261cdb80487fb29ac42b28678f8cbef">data_</a></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">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a79d0ae0a887ed5cbfa67de7d43f0ef3a">defined</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#acd04bb22a6861e9952c344ee8547411f">DowncastNoCheck</a>(ObjectRef ref)</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">protected</span><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a22e5bb9d64dbc773bb9263b70882239e">FFIClearAfterMove</a>(ObjectRef *ref)</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">protected</span><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a11ad7a277c175ee33e1551bbb77a8694">get</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#aa4604d96f4a77cc10cc1e0419758fb2c">get_mutable</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><span class="mlabel">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aed593996e4076632450de8fde776707c">GetDataPtr</a>(const ObjectRef &amp;ref)</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">protected</span><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html#a1233f7b896bb299ef07f9e41a4ffdc17">GetFunction</a>(const std::string &amp;name, bool query_imports=false)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html">tvm::runtime::Module</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_1Module.html#afb5a6c9b0e0a541245958456ebe39260">Import</a>(Module other)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html">tvm::runtime::Module</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html#a1927112ff253c1a6150238257cc9d5dd">LoadFromFile</a>(const std::string &amp;file_name, const std::string &amp;format=&quot;&quot;)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html">tvm::runtime::Module</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html#abfbc619b3b3166d63ec52e399c24bed9">Module</a>()</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html">tvm::runtime::Module</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html#abd1380b3f813c2b6acefca3aaef425f4">Module</a>(ObjectPtr&lt; Object &gt; n)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html">tvm::runtime::Module</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_1runtime_1_1Module.html#a908d19538a4fcadd6e93f39e4aa5292b">ModuleNode</a> class</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html">tvm::runtime::Module</a></td><td class="entry"><span class="mlabel">friend</span></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_1runtime_1_1ObjectRef.html#a2ae377cc59f98b42339d76bded1c1711">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_1runtime_1_1Module.html#a87bcc010c62887a453d49d46854fa354">operator-&gt;</a>()</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html">tvm::runtime::Module</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html#a814b0e825cb2a4e47a797c22a397582f">operator-&gt;</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html">tvm::runtime::Module</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#a17626209947c4a2f302422be451661c5">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#ac8c2b78649a428e35e279d085d509e1b">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_1runtime_1_1ObjectRef.html#a62014c9eba5cae2ab5a84963725d6a65">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_1runtime_1_1ObjectRef.html#a4142990fd1959abc95aa0cccca4f6cda">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#a4cfef0af824ed4afb3daefa600b2aa04">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_1runtime_1_1ObjectRef.html#a3e9b0901b6e01257b060a45e159cc37e">_type_is_nullable</a></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">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ab51c99a3607ca95884d9efd978998ce8">as</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_1Module.html#a2e17df628886ffd624ab5835e85b1a58">ContainerType</a> typedef</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html">tvm::runtime::Module</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ac261cdb80487fb29ac42b28678f8cbef">data_</a></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">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a79d0ae0a887ed5cbfa67de7d43f0ef3a">defined</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#acd04bb22a6861e9952c344ee8547411f">DowncastNoCheck</a>(ObjectRef ref)</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">protected</span><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a22e5bb9d64dbc773bb9263b70882239e">FFIClearAfterMove</a>(ObjectRef *ref)</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">protected</span><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a11ad7a277c175ee33e1551bbb77a8694">get</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#aa4604d96f4a77cc10cc1e0419758fb2c">get_mutable</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><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aed593996e4076632450de8fde776707c">GetDataPtr</a>(const ObjectRef &amp;ref)</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">protected</span><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html#a1233f7b896bb299ef07f9e41a4ffdc17">GetFunction</a>(const std::string &amp;name, bool query_imports=false)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html">tvm::runtime::Module</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html#afb5a6c9b0e0a541245958456ebe39260">Import</a>(Module other)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html">tvm::runtime::Module</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_1Module.html#a1927112ff253c1a6150238257cc9d5dd">LoadFromFile</a>(const std::string &amp;file_name, const std::string &amp;format=&quot;&quot;)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html">tvm::runtime::Module</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html#abfbc619b3b3166d63ec52e399c24bed9">Module</a>()</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html">tvm::runtime::Module</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_1Module.html#abd1380b3f813c2b6acefca3aaef425f4">Module</a>(ObjectPtr&lt; Object &gt; n)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html">tvm::runtime::Module</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_1runtime_1_1Module.html#a908d19538a4fcadd6e93f39e4aa5292b">ModuleNode</a> class</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html">tvm::runtime::Module</a></td><td class="entry"><span class="mlabel">friend</span></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_1runtime_1_1ObjectRef.html#a2ae377cc59f98b42339d76bded1c1711">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_1runtime_1_1Module.html#a87bcc010c62887a453d49d46854fa354">operator-&gt;</a>()</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html">tvm::runtime::Module</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_1Module.html#a814b0e825cb2a4e47a797c22a397582f">operator-&gt;</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Module.html">tvm::runtime::Module</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#a17626209947c4a2f302422be451661c5">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#ac8c2b78649a428e35e279d085d509e1b">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_1runtime_1_1ObjectRef.html#a62014c9eba5cae2ab5a84963725d6a65">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_1runtime_1_1ObjectRef.html#a4142990fd1959abc95aa0cccca4f6cda">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#a4cfef0af824ed4afb3daefa600b2aa04">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/doxygen/classtvm_1_1runtime_1_1Module.html b/docs/doxygen/classtvm_1_1runtime_1_1Module.html
index c28cd1b..fbedcb3 100644
--- a/docs/doxygen/classtvm_1_1runtime_1_1Module.html
+++ b/docs/doxygen/classtvm_1_1runtime_1_1Module.html
@@ -105,7 +105,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="dynheader">
 Inheritance diagram for tvm::runtime::Module:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1runtime_1_1Module__inherit__graph.svg" width="184" height="522"><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_1runtime_1_1Module__inherit__graph.svg" width="184" height="536"><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">
@@ -187,6 +187,9 @@ Friends</h2></td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
 Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_static_attribs_classtvm_1_1runtime_1_1ObjectRef"><td colspan="2" onclick="javascript:toggleInherit('pub_static_attribs_classtvm_1_1runtime_1_1ObjectRef')"><img src="closed.png" alt="-"/>&#160;Static Public Attributes inherited from <a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td></tr>
+<tr class="memitem:a3e9b0901b6e01257b060a45e159cc37e inherit pub_static_attribs_classtvm_1_1runtime_1_1ObjectRef"><td class="memItemLeft" align="right" valign="top">static constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3e9b0901b6e01257b060a45e159cc37e">_type_is_nullable</a> = true</td></tr>
+<tr class="separator:a3e9b0901b6e01257b060a45e159cc37e inherit pub_static_attribs_classtvm_1_1runtime_1_1ObjectRef"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="inherit_header pro_methods_classtvm_1_1runtime_1_1ObjectRef"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classtvm_1_1runtime_1_1ObjectRef')"><img src="closed.png" alt="-"/>&#160;Protected Member Functions inherited from <a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td></tr>
 <tr class="memitem:aa4604d96f4a77cc10cc1e0419758fb2c inherit pro_methods_classtvm_1_1runtime_1_1ObjectRef"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1runtime_1_1Object.html">Object</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa4604d96f4a77cc10cc1e0419758fb2c">get_mutable</a> () const </td></tr>
 <tr class="separator:aa4604d96f4a77cc10cc1e0419758fb2c inherit pro_methods_classtvm_1_1runtime_1_1ObjectRef"><td class="memSeparator" colspan="2">&#160;</td></tr>
diff --git a/docs/doxygen/classtvm_1_1runtime_1_1Module__coll__graph.svg b/docs/doxygen/classtvm_1_1runtime_1_1Module__coll__graph.svg
index dee1223..badcbe1 100644
--- a/docs/doxygen/classtvm_1_1runtime_1_1Module__coll__graph.svg
+++ b/docs/doxygen/classtvm_1_1runtime_1_1Module__coll__graph.svg
@@ -30,7 +30,7 @@
 <polygon fill="white" stroke="black" points="4,-161.5 4,-383.5 134,-383.5 134,-161.5 4,-161.5"/>
 <text text-anchor="middle" x="69" y="-371.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
 <polyline fill="none" stroke="black" points="4,-364.5 134,-364.5 "/>
-<text text-anchor="middle" x="69" y="-352.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<text text-anchor="start" x="12" y="-352.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
 <polyline fill="none" stroke="black" points="4,-345.5 134,-345.5 "/>
 <text text-anchor="start" x="12" y="-333.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="12" y="-322.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
diff --git a/docs/doxygen/classtvm_1_1runtime_1_1Module__inherit__graph.svg b/docs/doxygen/classtvm_1_1runtime_1_1Module__inherit__graph.svg
index b66abe2..eb09a2b 100644
--- a/docs/doxygen/classtvm_1_1runtime_1_1Module__inherit__graph.svg
+++ b/docs/doxygen/classtvm_1_1runtime_1_1Module__inherit__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.38.0 (20140413.2041)
  -->
 <!-- Title: tvm::runtime::Module Pages: 1 -->
-<svg width="138pt" height="391pt"
- viewBox="0.00 0.00 138.00 391.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 387)">
+<svg width="138pt" height="402pt"
+ viewBox="0.00 0.00 138.00 402.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 398)">
 <title>tvm::runtime::Module</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-387 134,-387 134,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-398 134,-398 134,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node"><title>Node1</title>
 <polygon fill="#bfbfbf" stroke="black" points="5.5,-0.5 5.5,-123.5 124.5,-123.5 124.5,-0.5 5.5,-0.5"/>
@@ -27,9 +27,10 @@
 <!-- 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="0,-160.5 0,-382.5 130,-382.5 130,-160.5 0,-160.5"/>
-<text text-anchor="middle" x="65" y="-370.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="0,-363.5 130,-363.5 "/>
+<polygon fill="white" stroke="black" points="0,-160.5 0,-393.5 130,-393.5 130,-160.5 0,-160.5"/>
+<text text-anchor="middle" x="65" y="-381.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="0,-374.5 130,-374.5 "/>
+<text text-anchor="start" x="8" y="-362.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
 <text text-anchor="start" x="8" y="-351.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
 <polyline fill="none" stroke="black" points="0,-344.5 130,-344.5 "/>
 <text text-anchor="start" x="8" y="-332.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
@@ -53,8 +54,8 @@
 </g>
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge"><title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M65,-150.363C65,-141.19 65,-132.193 65,-123.668"/>
-<polygon fill="none" stroke="midnightblue" points="61.5001,-150.37 65,-160.371 68.5001,-150.371 61.5001,-150.37"/>
+<path fill="none" stroke="midnightblue" d="M65,-150.38C65,-141.149 65,-132.116 65,-123.571"/>
+<polygon fill="none" stroke="midnightblue" points="61.5001,-150.461 65,-160.461 68.5001,-150.461 61.5001,-150.461"/>
 </g>
 </g>
 </svg>
diff --git a/docs/doxygen/classtvm_1_1runtime_1_1NDArray-members.html b/docs/doxygen/classtvm_1_1runtime_1_1NDArray-members.html
index c85c327..9e4ee1a 100644
--- a/docs/doxygen/classtvm_1_1runtime_1_1NDArray-members.html
+++ b/docs/doxygen/classtvm_1_1runtime_1_1NDArray-members.html
@@ -94,49 +94,50 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 <p>This is the complete list of members for <a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ab51c99a3607ca95884d9efd978998ce8">as</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_1NDArray.html#abcb2ab5512d146d173e0aab86eee72a9">ContainerType</a> typedef</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#a1550151d3616e918d45e047840b81e1e">CopyFrom</a>(const DLTensor *other)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#a62ceb9ace65922dde15790fff6d04661">CopyFrom</a>(const NDArray &amp;other)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</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_1NDArray.html#af4d489a1208be9cc4248b592769bccf2">CopyFromBytes</a>(const void *data, size_t nbytes)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#ae2a878fb8c847666d2318b979714cefa">CopyFromTo</a>(const DLTensor *from, DLTensor *to, TVMStreamHandle stream=nullptr)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#a9b53b82c11b6eedb4e1f11d6cf769651">CopyTo</a>(DLTensor *other) const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#ace36fc5c52063d56e616ba9d4c8671f6">CopyTo</a>(const NDArray &amp;other) const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</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_1NDArray.html#a4ce4ee0a7bcbb466c3258a50b5878b07">CopyTo</a>(const DLContext &amp;ctx) const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#a69726ab0ad5204fea12960dd43b4f8e2">CopyToBytes</a>(void *data, size_t nbytes) const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#a368d0f65ebf07dc2ee5a717a85b3bc60">CreateView</a>(std::vector&lt; int64_t &gt; shape, DLDataType dtype)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ac261cdb80487fb29ac42b28678f8cbef">data_</a></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">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a79d0ae0a887ed5cbfa67de7d43f0ef3a">defined</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#acd04bb22a6861e9952c344ee8547411f">DowncastNoCheck</a>(ObjectRef ref)</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">protected</span><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#a2ca068cfab0b928e5809631c1bec64e7">Empty</a>(std::vector&lt; int64_t &gt; shape, DLDataType dtype, DLContext ctx)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a22e5bb9d64dbc773bb9263b70882239e">FFIClearAfterMove</a>(ObjectRef *ref)</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">protected</span><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#ab76ba9c638e1d6db8d6f0ba8c4d38670">FFIDataFromHandle</a>(TVMArrayHandle handle)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#ade0e2757904f4f5ba5c667ae01793a47">FFIDecRef</a>(TVMArrayHandle handle)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#a141e032d848c60f8261046304bdc8c4c">FFIGetHandle</a>(const ObjectRef &amp;nd)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#abec485628a0ca451b668c42fd8fa691a">FromDLPack</a>(DLManagedTensor *tensor)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a11ad7a277c175ee33e1551bbb77a8694">get</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_1NDArray.html#a87268f39e0b14b18fee24d30c0f0ad95">get_mutable</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aed593996e4076632450de8fde776707c">GetDataPtr</a>(const ObjectRef &amp;ref)</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">protected</span><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#ac041c89504299f82baf990c9ad081c44">IsContiguous</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</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_1NDArray.html#ad78792a1e1feb160b0be4474a4c13a4c">Load</a>(dmlc::Stream *stream)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#a4bbb80e8e36317829dd63e7f44ffbb0f">NDArray</a>()</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</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_1NDArray.html#af5801a105ceb450616a83d19c5c92326">NDArray</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</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_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_1runtime_1_1ObjectRef.html#a2ae377cc59f98b42339d76bded1c1711">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_1runtime_1_1NDArray.html#ae347be13193ee72c6bde285c6ae787ad">operator-&gt;</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</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#a17626209947c4a2f302422be451661c5">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#ac8c2b78649a428e35e279d085d509e1b">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_1runtime_1_1NDArray.html#af2a8ccab95d432d1ecad7a389e11bcd3">reset</a>()</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</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#a62014c9eba5cae2ab5a84963725d6a65">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_1runtime_1_1NDArray.html#acc22b8911190353ab1050cccf3d015f2">Save</a>(dmlc::Stream *stream) const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</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_1NDArray.html#a04129f44f5d17ab63a10e107a939f282">Shape</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#ada8b2d6986e62b733f2c6c9c03df2dfe">ToDLPack</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#a35ae555d4becf356b16aeacd353d41ee">TVMArgsSetter</a> class</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#a9a9fd94393cfd7d4b6e6029348e3e19a">TVMPODValue_</a> class</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#ae0ea8b4adc6dab8c74086bceaef6b3e1">TVMRetValue</a> class</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4142990fd1959abc95aa0cccca4f6cda">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_1NDArray.html#acb2fd06934aac23ba492e78619c7eaa5">use_count</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</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#a3e9b0901b6e01257b060a45e159cc37e">_type_is_nullable</a></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">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ab51c99a3607ca95884d9efd978998ce8">as</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_1NDArray.html#abcb2ab5512d146d173e0aab86eee72a9">ContainerType</a> typedef</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#a1550151d3616e918d45e047840b81e1e">CopyFrom</a>(const DLTensor *other)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</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_1NDArray.html#a62ceb9ace65922dde15790fff6d04661">CopyFrom</a>(const NDArray &amp;other)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#af4d489a1208be9cc4248b592769bccf2">CopyFromBytes</a>(const void *data, size_t nbytes)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#ae2a878fb8c847666d2318b979714cefa">CopyFromTo</a>(const DLTensor *from, DLTensor *to, TVMStreamHandle stream=nullptr)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#a9b53b82c11b6eedb4e1f11d6cf769651">CopyTo</a>(DLTensor *other) const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</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_1NDArray.html#ace36fc5c52063d56e616ba9d4c8671f6">CopyTo</a>(const NDArray &amp;other) const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#a4ce4ee0a7bcbb466c3258a50b5878b07">CopyTo</a>(const DLContext &amp;ctx) const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</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_1NDArray.html#a69726ab0ad5204fea12960dd43b4f8e2">CopyToBytes</a>(void *data, size_t nbytes) const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#a368d0f65ebf07dc2ee5a717a85b3bc60">CreateView</a>(std::vector&lt; int64_t &gt; shape, DLDataType dtype)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ac261cdb80487fb29ac42b28678f8cbef">data_</a></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">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a79d0ae0a887ed5cbfa67de7d43f0ef3a">defined</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#acd04bb22a6861e9952c344ee8547411f">DowncastNoCheck</a>(ObjectRef ref)</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">protected</span><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#a2ca068cfab0b928e5809631c1bec64e7">Empty</a>(std::vector&lt; int64_t &gt; shape, DLDataType dtype, DLContext ctx)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a22e5bb9d64dbc773bb9263b70882239e">FFIClearAfterMove</a>(ObjectRef *ref)</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">protected</span><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#ab76ba9c638e1d6db8d6f0ba8c4d38670">FFIDataFromHandle</a>(TVMArrayHandle handle)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#ade0e2757904f4f5ba5c667ae01793a47">FFIDecRef</a>(TVMArrayHandle handle)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#a141e032d848c60f8261046304bdc8c4c">FFIGetHandle</a>(const ObjectRef &amp;nd)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#abec485628a0ca451b668c42fd8fa691a">FromDLPack</a>(DLManagedTensor *tensor)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a11ad7a277c175ee33e1551bbb77a8694">get</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_1NDArray.html#a87268f39e0b14b18fee24d30c0f0ad95">get_mutable</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">protected</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aed593996e4076632450de8fde776707c">GetDataPtr</a>(const ObjectRef &amp;ref)</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">protected</span><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#ac041c89504299f82baf990c9ad081c44">IsContiguous</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#ad78792a1e1feb160b0be4474a4c13a4c">Load</a>(dmlc::Stream *stream)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</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_1NDArray.html#a4bbb80e8e36317829dd63e7f44ffbb0f">NDArray</a>()</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#af5801a105ceb450616a83d19c5c92326">NDArray</a>(ObjectPtr&lt; Object &gt; data)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</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_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_1runtime_1_1ObjectRef.html#a2ae377cc59f98b42339d76bded1c1711">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_1runtime_1_1NDArray.html#ae347be13193ee72c6bde285c6ae787ad">operator-&gt;</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</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#a17626209947c4a2f302422be451661c5">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#ac8c2b78649a428e35e279d085d509e1b">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_1runtime_1_1NDArray.html#af2a8ccab95d432d1ecad7a389e11bcd3">reset</a>()</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</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#a62014c9eba5cae2ab5a84963725d6a65">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_1runtime_1_1NDArray.html#acc22b8911190353ab1050cccf3d015f2">Save</a>(dmlc::Stream *stream) const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#a04129f44f5d17ab63a10e107a939f282">Shape</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#ada8b2d6986e62b733f2c6c9c03df2dfe">ToDLPack</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#a35ae555d4becf356b16aeacd353d41ee">TVMArgsSetter</a> class</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#a9a9fd94393cfd7d4b6e6029348e3e19a">TVMPODValue_</a> class</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html#ae0ea8b4adc6dab8c74086bceaef6b3e1">TVMRetValue</a> class</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</a></td><td class="entry"><span class="mlabel">friend</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4142990fd1959abc95aa0cccca4f6cda">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_1NDArray.html#acb2fd06934aac23ba492e78619c7eaa5">use_count</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1NDArray.html">tvm::runtime::NDArray</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/doxygen/classtvm_1_1runtime_1_1NDArray.html b/docs/doxygen/classtvm_1_1runtime_1_1NDArray.html
index 0d4388c..20bc172 100644
--- a/docs/doxygen/classtvm_1_1runtime_1_1NDArray.html
+++ b/docs/doxygen/classtvm_1_1runtime_1_1NDArray.html
@@ -108,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="dynheader">
 Inheritance diagram for tvm::runtime::NDArray:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1runtime_1_1NDArray__inherit__graph.svg" width="184" height="683"><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_1runtime_1_1NDArray__inherit__graph.svg" width="184" height="698"><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">
@@ -277,6 +277,9 @@ Friends</h2></td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
 Additional Inherited Members</h2></td></tr>
+<tr class="inherit_header pub_static_attribs_classtvm_1_1runtime_1_1ObjectRef"><td colspan="2" onclick="javascript:toggleInherit('pub_static_attribs_classtvm_1_1runtime_1_1ObjectRef')"><img src="closed.png" alt="-"/>&#160;Static Public Attributes inherited from <a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td></tr>
+<tr class="memitem:a3e9b0901b6e01257b060a45e159cc37e inherit pub_static_attribs_classtvm_1_1runtime_1_1ObjectRef"><td class="memItemLeft" align="right" valign="top">static constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3e9b0901b6e01257b060a45e159cc37e">_type_is_nullable</a> = true</td></tr>
+<tr class="separator:a3e9b0901b6e01257b060a45e159cc37e inherit pub_static_attribs_classtvm_1_1runtime_1_1ObjectRef"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="inherit_header pro_attribs_classtvm_1_1runtime_1_1ObjectRef"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classtvm_1_1runtime_1_1ObjectRef')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td></tr>
 <tr class="memitem:ac261cdb80487fb29ac42b28678f8cbef inherit pro_attribs_classtvm_1_1runtime_1_1ObjectRef"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1runtime_1_1ObjectPtr.html">ObjectPtr</a>&lt; <a class="el" href="classtvm_1_1runtime_1_1Object.html">Object</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ac261cdb80487fb29ac42b28678f8cbef">data_</a></td></tr>
 <tr class="memdesc:ac261cdb80487fb29ac42b28678f8cbef inherit pro_attribs_classtvm_1_1runtime_1_1ObjectRef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Internal pointer that backs the reference.  <a href="#ac261cdb80487fb29ac42b28678f8cbef">More...</a><br /></td></tr>
diff --git a/docs/doxygen/classtvm_1_1runtime_1_1NDArray__coll__graph.svg b/docs/doxygen/classtvm_1_1runtime_1_1NDArray__coll__graph.svg
index b488b35..d75ba68 100644
--- a/docs/doxygen/classtvm_1_1runtime_1_1NDArray__coll__graph.svg
+++ b/docs/doxygen/classtvm_1_1runtime_1_1NDArray__coll__graph.svg
@@ -41,7 +41,7 @@
 <polygon fill="white" stroke="black" points="4,-282.5 4,-504.5 134,-504.5 134,-282.5 4,-282.5"/>
 <text text-anchor="middle" x="69" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
 <polyline fill="none" stroke="black" points="4,-485.5 134,-485.5 "/>
-<text text-anchor="middle" x="69" y="-473.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<text text-anchor="start" x="12" y="-473.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
 <polyline fill="none" stroke="black" points="4,-466.5 134,-466.5 "/>
 <text text-anchor="start" x="12" y="-454.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="12" y="-443.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
diff --git a/docs/doxygen/classtvm_1_1runtime_1_1NDArray__inherit__graph.svg b/docs/doxygen/classtvm_1_1runtime_1_1NDArray__inherit__graph.svg
index b1a59e9..d129a6d 100644
--- a/docs/doxygen/classtvm_1_1runtime_1_1NDArray__inherit__graph.svg
+++ b/docs/doxygen/classtvm_1_1runtime_1_1NDArray__inherit__graph.svg
@@ -4,11 +4,11 @@
 <!-- Generated by graphviz version 2.38.0 (20140413.2041)
  -->
 <!-- Title: tvm::runtime::NDArray Pages: 1 -->
-<svg width="138pt" height="512pt"
- viewBox="0.00 0.00 138.00 512.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 508)">
+<svg width="138pt" height="523pt"
+ viewBox="0.00 0.00 138.00 523.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 519)">
 <title>tvm::runtime::NDArray</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-508 134,-508 134,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-519 134,-519 134,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node"><title>Node1</title>
 <polygon fill="#bfbfbf" stroke="black" points="0.5,-0.5 0.5,-244.5 129.5,-244.5 129.5,-0.5 0.5,-0.5"/>
@@ -38,9 +38,10 @@
 <!-- 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="0,-281.5 0,-503.5 130,-503.5 130,-281.5 0,-281.5"/>
-<text text-anchor="middle" x="65" y="-491.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="0,-484.5 130,-484.5 "/>
+<polygon fill="white" stroke="black" points="0,-281.5 0,-514.5 130,-514.5 130,-281.5 0,-281.5"/>
+<text text-anchor="middle" x="65" y="-502.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="0,-495.5 130,-495.5 "/>
+<text text-anchor="start" x="8" y="-483.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
 <text text-anchor="start" x="8" y="-472.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
 <polyline fill="none" stroke="black" points="0,-465.5 130,-465.5 "/>
 <text text-anchor="start" x="8" y="-453.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
@@ -64,8 +65,8 @@
 </g>
 <!-- Node2&#45;&gt;Node1 -->
 <g id="edge1" class="edge"><title>Node2&#45;&gt;Node1</title>
-<path fill="none" stroke="midnightblue" d="M65,-271.047C65,-262.245 65,-253.365 65,-244.56"/>
-<polygon fill="none" stroke="midnightblue" points="61.5001,-271.334 65,-281.334 68.5001,-271.334 61.5001,-271.334"/>
+<path fill="none" stroke="midnightblue" d="M65,-271.153C65,-262.386 65,-253.56 65,-244.818"/>
+<polygon fill="none" stroke="midnightblue" points="61.5001,-271.408 65,-281.408 68.5001,-271.408 61.5001,-271.408"/>
 </g>
 </g>
 </svg>
diff --git a/docs/doxygen/classtvm_1_1runtime_1_1ObjectRef-members.html b/docs/doxygen/classtvm_1_1runtime_1_1ObjectRef-members.html
index 6206667..f12d5a0 100644
--- a/docs/doxygen/classtvm_1_1runtime_1_1ObjectRef-members.html
+++ b/docs/doxygen/classtvm_1_1runtime_1_1ObjectRef-members.html
@@ -94,28 +94,29 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 <p>This is the complete list of members for <a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ab51c99a3607ca95884d9efd978998ce8">as</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#aa5c355fbb7d2f7402ee360dba8a52cdd">ContainerType</a> typedef</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#ac261cdb80487fb29ac42b28678f8cbef">data_</a></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">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a79d0ae0a887ed5cbfa67de7d43f0ef3a">defined</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#a68c32a41efd1aa99afca70837565cced">Downcast</a>(BaseRef ref)</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">friend</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#acd04bb22a6861e9952c344ee8547411f">DowncastNoCheck</a>(ObjectRef ref)</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">protected</span><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a22e5bb9d64dbc773bb9263b70882239e">FFIClearAfterMove</a>(ObjectRef *ref)</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">protected</span><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a11ad7a277c175ee33e1551bbb77a8694">get</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#aa4604d96f4a77cc10cc1e0419758fb2c">get_mutable</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><span class="mlabel">protected</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aed593996e4076632450de8fde776707c">GetDataPtr</a>(const ObjectRef &amp;ref)</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">protected</span><span class="mlabel">static</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a7191cb82e9344bec1b5fd20f45b289f1">ObjectHash</a></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">friend</span></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_1runtime_1_1ObjectRef.html#a2ae377cc59f98b42339d76bded1c1711">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_1runtime_1_1ObjectRef.html#ab9b1ac131656be45db88e69c04bb16af">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#a17626209947c4a2f302422be451661c5">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#ac8c2b78649a428e35e279d085d509e1b">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_1runtime_1_1ObjectRef.html#a62014c9eba5cae2ab5a84963725d6a65">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_1runtime_1_1ObjectRef.html#a35ae555d4becf356b16aeacd353d41ee">TVMArgsSetter</a> class</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">friend</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae0ea8b4adc6dab8c74086bceaef6b3e1">TVMRetValue</a> class</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">friend</span></td></tr>
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4142990fd1959abc95aa0cccca4f6cda">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#a4cfef0af824ed4afb3daefa600b2aa04">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_1runtime_1_1ObjectRef.html#a3e9b0901b6e01257b060a45e159cc37e">_type_is_nullable</a></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">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ab51c99a3607ca95884d9efd978998ce8">as</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#aa5c355fbb7d2f7402ee360dba8a52cdd">ContainerType</a> typedef</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#ac261cdb80487fb29ac42b28678f8cbef">data_</a></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">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a79d0ae0a887ed5cbfa67de7d43f0ef3a">defined</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#a68c32a41efd1aa99afca70837565cced">Downcast</a>(BaseRef ref)</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">friend</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#acd04bb22a6861e9952c344ee8547411f">DowncastNoCheck</a>(ObjectRef ref)</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">protected</span><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a22e5bb9d64dbc773bb9263b70882239e">FFIClearAfterMove</a>(ObjectRef *ref)</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">protected</span><span class="mlabel">static</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a11ad7a277c175ee33e1551bbb77a8694">get</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#aa4604d96f4a77cc10cc1e0419758fb2c">get_mutable</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><span class="mlabel">protected</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aed593996e4076632450de8fde776707c">GetDataPtr</a>(const ObjectRef &amp;ref)</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">protected</span><span class="mlabel">static</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a7191cb82e9344bec1b5fd20f45b289f1">ObjectHash</a></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">friend</span></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_1runtime_1_1ObjectRef.html#a2ae377cc59f98b42339d76bded1c1711">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_1runtime_1_1ObjectRef.html#ab9b1ac131656be45db88e69c04bb16af">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#a17626209947c4a2f302422be451661c5">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#ac8c2b78649a428e35e279d085d509e1b">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_1runtime_1_1ObjectRef.html#a62014c9eba5cae2ab5a84963725d6a65">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_1runtime_1_1ObjectRef.html#a35ae555d4becf356b16aeacd353d41ee">TVMArgsSetter</a> class</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">friend</span></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ae0ea8b4adc6dab8c74086bceaef6b3e1">TVMRetValue</a> class</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">friend</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4142990fd1959abc95aa0cccca4f6cda">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#a4cfef0af824ed4afb3daefa600b2aa04">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/doxygen/classtvm_1_1runtime_1_1ObjectRef.html b/docs/doxygen/classtvm_1_1runtime_1_1ObjectRef.html
index 55e303b..5d5a80f 100644
--- a/docs/doxygen/classtvm_1_1runtime_1_1ObjectRef.html
+++ b/docs/doxygen/classtvm_1_1runtime_1_1ObjectRef.html
@@ -90,6 +90,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
   <div class="summary">
 <a href="#pub-types">Public Types</a> &#124;
 <a href="#pub-methods">Public Member Functions</a> &#124;
+<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
 <a href="#pro-methods">Protected Member Functions</a> &#124;
 <a href="#pro-static-methods">Static Protected Member Functions</a> &#124;
 <a href="#pro-attribs">Protected Attributes</a> &#124;
@@ -107,7 +108,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="dynheader">
 Inheritance diagram for tvm::runtime::ObjectRef:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1runtime_1_1ObjectRef__inherit__graph.svg" width="1111" 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_1runtime_1_1ObjectRef__inherit__graph.svg" width="1339" 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">
@@ -158,6 +159,11 @@ Public Member Functions</h2></td></tr>
 <tr class="memdesc:ab51c99a3607ca95884d9efd978998ce8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Try to downcast the internal <a class="el" href="classtvm_1_1runtime_1_1Object.html" title="base class of all object containers. ">Object</a> to a raw pointer of a corresponding type.  <a href="#ab51c99a3607ca95884d9efd978998ce8">More...</a><br /></td></tr>
 <tr class="separator:ab51c99a3607ca95884d9efd978998ce8"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a3e9b0901b6e01257b060a45e159cc37e"><td class="memItemLeft" align="right" valign="top">static constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3e9b0901b6e01257b060a45e159cc37e">_type_is_nullable</a> = true</td></tr>
+<tr class="separator:a3e9b0901b6e01257b060a45e159cc37e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
 Protected Member Functions</h2></td></tr>
 <tr class="memitem:aa4604d96f4a77cc10cc1e0419758fb2c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1runtime_1_1Object.html">Object</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa4604d96f4a77cc10cc1e0419758fb2c">get_mutable</a> () const </td></tr>
@@ -320,7 +326,7 @@ template&lt;typename ObjectType &gt; </div>
   </tr>
 </table>
 </div><div class="memdoc">
-<dl class="section return"><dt>Returns</dt><dd>whether the expression is null </dd></dl>
+<dl class="section return"><dt>Returns</dt><dd>whether the object is defined(not null). </dd></dl>
 
 </div>
 </div>
@@ -784,6 +790,26 @@ template&lt;typename SubRef , typename BaseRef &gt; </div>
 </div>
 </div>
 <h2 class="groupheader">Member Data Documentation</h2>
+<a class="anchor" id="a3e9b0901b6e01257b060a45e159cc37e"></a>
+<div class="memitem">
+<div class="memproto">
+<table class="mlabels">
+  <tr>
+  <td class="mlabels-left">
+      <table class="memname">
+        <tr>
+          <td class="memname">constexpr bool tvm::runtime::ObjectRef::_type_is_nullable = true</td>
+        </tr>
+      </table>
+  </td>
+  <td class="mlabels-right">
+<span class="mlabels"><span class="mlabel">static</span></span>  </td>
+  </tr>
+</table>
+</div><div class="memdoc">
+
+</div>
+</div>
 <a class="anchor" id="ac261cdb80487fb29ac42b28678f8cbef"></a>
 <div class="memitem">
 <div class="memproto">
diff --git a/docs/doxygen/classtvm_1_1runtime_1_1ObjectRef__coll__graph.svg b/docs/doxygen/classtvm_1_1runtime_1_1ObjectRef__coll__graph.svg
index 43c5500..7814236 100644
--- a/docs/doxygen/classtvm_1_1runtime_1_1ObjectRef__coll__graph.svg
+++ b/docs/doxygen/classtvm_1_1runtime_1_1ObjectRef__coll__graph.svg
@@ -14,7 +14,7 @@
 <polygon fill="#bfbfbf" stroke="black" points="4,-0.5 4,-222.5 134,-222.5 134,-0.5 4,-0.5"/>
 <text text-anchor="middle" x="69" y="-210.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
 <polyline fill="none" stroke="black" points="4,-203.5 134,-203.5 "/>
-<text text-anchor="middle" x="69" y="-191.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<text text-anchor="start" x="12" y="-191.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
 <polyline fill="none" stroke="black" points="4,-184.5 134,-184.5 "/>
 <text text-anchor="start" x="12" y="-172.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
 <text text-anchor="start" x="12" y="-161.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
diff --git a/docs/doxygen/classtvm_1_1runtime_1_1ObjectRef__inherit__graph.svg b/docs/doxygen/classtvm_1_1runtime_1_1ObjectRef__inherit__graph.svg
index 8efa2a8..0371462 100644
--- a/docs/doxygen/classtvm_1_1runtime_1_1ObjectRef__inherit__graph.svg
+++ b/docs/doxygen/classtvm_1_1runtime_1_1ObjectRef__inherit__graph.svg
@@ -4,34 +4,35 @@
 <!-- Generated by graphviz version 2.38.0 (20140413.2041)
  -->
 <!-- Title: tvm::runtime::ObjectRef Pages: 1 -->
-<svg width="833pt" height="628pt"
- viewBox="0.00 0.00 832.50 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="1004pt" height="639pt"
+ viewBox="0.00 0.00 1003.50 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::runtime::ObjectRef</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-624 828.5,-624 828.5,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-635 999.5,-635 999.5,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node"><title>Node1</title>
-<polygon fill="#bfbfbf" stroke="black" points="305,-397.5 305,-619.5 435,-619.5 435,-397.5 305,-397.5"/>
-<text text-anchor="middle" x="370" y="-607.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
-<polyline fill="none" stroke="black" points="305,-600.5 435,-600.5 "/>
-<text text-anchor="start" x="313" y="-588.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
-<polyline fill="none" stroke="black" points="305,-581.5 435,-581.5 "/>
-<text text-anchor="start" x="313" y="-569.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="313" y="-558.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
-<text text-anchor="start" x="313" y="-547.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
-<text text-anchor="start" x="313" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="313" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="313" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
-<text text-anchor="start" x="313" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
-<text text-anchor="start" x="313" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
-<text text-anchor="start" x="313" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
-<text text-anchor="start" x="313" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
-<text text-anchor="start" x="313" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
-<text text-anchor="start" x="313" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
-<text text-anchor="start" x="313" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
-<text text-anchor="start" x="313" y="-426.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
-<text text-anchor="start" x="313" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
-<text text-anchor="start" x="313" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
+<polygon fill="#bfbfbf" stroke="black" points="384,-397.5 384,-630.5 514,-630.5 514,-397.5 384,-397.5"/>
+<text text-anchor="middle" x="449" y="-618.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::ObjectRef</text>
+<polyline fill="none" stroke="black" points="384,-611.5 514,-611.5 "/>
+<text text-anchor="start" x="392" y="-599.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<text text-anchor="start" x="392" y="-588.5" font-family="Helvetica,sans-Serif" font-size="10.00"># data_</text>
+<polyline fill="none" stroke="black" points="384,-581.5 514,-581.5 "/>
+<text text-anchor="start" x="392" y="-569.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
+<text text-anchor="start" x="392" y="-558.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ ObjectRef()</text>
+<text text-anchor="start" x="392" y="-547.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ same_as()</text>
+<text text-anchor="start" x="392" y="-536.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="392" y="-525.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="392" y="-514.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&lt;()</text>
+<text text-anchor="start" x="392" y="-503.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ defined()</text>
+<text text-anchor="start" x="392" y="-492.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ get()</text>
+<text text-anchor="start" x="392" y="-481.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator&#45;&gt;()</text>
+<text text-anchor="start" x="392" y="-470.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ unique()</text>
+<text text-anchor="start" x="392" y="-459.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ use_count()</text>
+<text text-anchor="start" x="392" y="-448.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ as()</text>
+<text text-anchor="start" x="392" y="-437.5" font-family="Helvetica,sans-Serif" font-size="10.00"># get_mutable()</text>
+<text text-anchor="start" x="392" y="-426.5" font-family="Helvetica,sans-Serif" font-size="10.00"># DowncastNoCheck()</text>
+<text text-anchor="start" x="392" y="-415.5" font-family="Helvetica,sans-Serif" font-size="10.00"># FFIClearAfterMove()</text>
+<text text-anchor="start" x="392" y="-404.5" font-family="Helvetica,sans-Serif" font-size="10.00"># GetDataPtr()</text>
 </g>
 <!-- Node2 -->
 <g id="node2" class="node"><title>Node2</title>
@@ -55,8 +56,8 @@
 </g>
 <!-- Node1&#45;&gt;Node2 -->
 <g id="edge1" class="edge"><title>Node1&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M296.293,-465.092C253.669,-438.465 200.609,-401.555 160,-361 145.155,-346.174 131.147,-328.474 118.947,-311.232"/>
-<polygon fill="none" stroke="midnightblue" points="294.601,-468.161 304.947,-470.447 298.285,-462.209 294.601,-468.161"/>
+<path fill="none" stroke="midnightblue" d="M374.558,-485.461C312.392,-459.9 223.924,-417.323 160,-361 143.872,-346.789 129.222,-328.923 116.801,-311.297"/>
+<polygon fill="none" stroke="midnightblue" points="373.334,-488.742 383.916,-489.262 375.969,-482.256 373.334,-488.742"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node"><title>Node3</title>
@@ -78,8 +79,8 @@
 </g>
 <!-- Node1&#45;&gt;Node3 -->
 <g id="edge2" class="edge"><title>Node1&#45;&gt;Node3</title>
-<path fill="none" stroke="midnightblue" d="M306.864,-388.341C290.709,-357.852 274.004,-326.325 260.151,-300.179"/>
-<polygon fill="none" stroke="midnightblue" points="303.854,-390.136 311.628,-397.334 310.039,-386.859 303.854,-390.136"/>
+<path fill="none" stroke="midnightblue" d="M376.552,-448.341C349.869,-422.6 320.46,-391.8 297,-361 282.742,-342.281 269.383,-320.304 258.288,-300.225"/>
+<polygon fill="none" stroke="midnightblue" points="374.353,-451.081 383.999,-455.463 379.191,-446.022 374.353,-451.081"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node"><title>Node4</title>
@@ -112,92 +113,119 @@
 </g>
 <!-- Node1&#45;&gt;Node4 -->
 <g id="edge3" class="edge"><title>Node1&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M370,-387.047C370,-378.245 370,-369.365 370,-360.56"/>
-<polygon fill="none" stroke="midnightblue" points="366.5,-387.334 370,-397.334 373.5,-387.334 366.5,-387.334"/>
+<path fill="none" stroke="midnightblue" d="M412.814,-387.725C410.228,-378.77 407.622,-369.75 405.043,-360.818"/>
+<polygon fill="none" stroke="midnightblue" points="409.474,-388.772 415.611,-397.408 416.199,-386.829 409.474,-388.772"/>
 </g>
 <!-- Node5 -->
 <g id="node5" class="node"><title>Node5</title>
-<g id="a_node5"><a xlink:href="classtvm_1_1runtime_1_1String.html" target="_top" xlink:title="Reference to string objects. ">
-<polygon fill="white" stroke="black" points="452.5,-149.5 452.5,-327.5 565.5,-327.5 565.5,-149.5 452.5,-149.5"/>
-<text text-anchor="middle" x="509" y="-315.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::String</text>
-<polyline fill="none" stroke="black" points="452.5,-308.5 565.5,-308.5 "/>
-<text text-anchor="middle" x="509" y="-296.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="452.5,-289.5 565.5,-289.5 "/>
-<text text-anchor="start" x="460.5" y="-277.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ String()</text>
-<text text-anchor="start" x="460.5" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ String()</text>
-<text text-anchor="start" x="460.5" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
-<text text-anchor="start" x="460.5" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="460.5" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="460.5" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
-<text text-anchor="start" x="460.5" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
-<text text-anchor="start" x="460.5" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ compare()</text>
-<text text-anchor="start" x="460.5" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ compare()</text>
-<text text-anchor="start" x="460.5" y="-178.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ compare()</text>
-<text text-anchor="start" x="460.5" y="-167.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 7 more...</text>
-<text text-anchor="start" x="460.5" y="-156.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HashBytes()</text>
+<g id="a_node5"><a xlink:href="classtvm_1_1runtime_1_1Optional.html" target="_top" xlink:title="Optional container that to represent to a Nullable variant of T. ">
+<polygon fill="white" stroke="black" points="453,-155 453,-322 605,-322 605,-155 453,-155"/>
+<text text-anchor="middle" x="529" y="-310" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::Optional&lt; T &gt;</text>
+<polyline fill="none" stroke="black" points="453,-303 605,-303 "/>
+<text text-anchor="start" x="461" y="-291" font-family="Helvetica,sans-Serif" font-size="10.00">+ _type_is_nullable</text>
+<polyline fill="none" stroke="black" points="453,-284 605,-284 "/>
+<text text-anchor="start" x="461" y="-272" font-family="Helvetica,sans-Serif" font-size="10.00">+ Optional()</text>
+<text text-anchor="start" x="461" y="-261" font-family="Helvetica,sans-Serif" font-size="10.00">+ Optional()</text>
+<text text-anchor="start" x="461" y="-250" font-family="Helvetica,sans-Serif" font-size="10.00">+ Optional()</text>
+<text text-anchor="start" x="461" y="-239" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
+<text text-anchor="start" x="461" y="-228" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
+<text text-anchor="start" x="461" y="-217" font-family="Helvetica,sans-Serif" font-size="10.00">+ Optional()</text>
+<text text-anchor="start" x="461" y="-206" font-family="Helvetica,sans-Serif" font-size="10.00">+ Optional()</text>
+<text text-anchor="start" x="461" y="-195" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
+<text text-anchor="start" x="461" y="-184" font-family="Helvetica,sans-Serif" font-size="10.00">+ Optional()</text>
+<text text-anchor="start" x="461" y="-173" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
+<text text-anchor="start" x="461" y="-162" font-family="Helvetica,sans-Serif" font-size="10.00">and 13 more...</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node5 -->
 <g id="edge4" class="edge"><title>Node1&#45;&gt;Node5</title>
-<path fill="none" stroke="midnightblue" d="M431.823,-388.302C442.418,-367.875 453.253,-346.983 463.329,-327.557"/>
-<polygon fill="none" stroke="midnightblue" points="428.636,-386.845 427.138,-397.334 434.85,-390.068 428.636,-386.845"/>
+<path fill="none" stroke="midnightblue" d="M485.676,-387.613C492.152,-365.473 498.746,-342.932 504.77,-322.335"/>
+<polygon fill="none" stroke="midnightblue" points="482.259,-386.827 482.811,-397.408 488.978,-388.793 482.259,-386.827"/>
 </g>
 <!-- Node6 -->
 <g id="node6" class="node"><title>Node6</title>
-<g id="a_node6"><a xlink:href="classtvm_1_1runtime_1_1vm_1_1Closure.html" target="_top" xlink:title="reference to closure. ">
-<polygon fill="white" stroke="black" points="584,-204.5 584,-272.5 734,-272.5 734,-204.5 584,-204.5"/>
-<text text-anchor="middle" x="659" y="-260.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::vm::Closure</text>
-<polyline fill="none" stroke="black" points="584,-253.5 734,-253.5 "/>
-<text text-anchor="middle" x="659" y="-241.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="584,-234.5 734,-234.5 "/>
-<text text-anchor="start" x="592" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="592" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<g id="a_node6"><a xlink:href="classtvm_1_1runtime_1_1String.html" target="_top" xlink:title="Reference to string objects. ">
+<polygon fill="white" stroke="black" points="623.5,-149.5 623.5,-327.5 736.5,-327.5 736.5,-149.5 623.5,-149.5"/>
+<text text-anchor="middle" x="680" y="-315.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::String</text>
+<polyline fill="none" stroke="black" points="623.5,-308.5 736.5,-308.5 "/>
+<text text-anchor="middle" x="680" y="-296.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="623.5,-289.5 736.5,-289.5 "/>
+<text text-anchor="start" x="631.5" y="-277.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ String()</text>
+<text text-anchor="start" x="631.5" y="-266.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ String()</text>
+<text text-anchor="start" x="631.5" y="-255.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ String()</text>
+<text text-anchor="start" x="631.5" y="-244.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator=()</text>
+<text text-anchor="start" x="631.5" y="-233.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="631.5" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="631.5" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator==()</text>
+<text text-anchor="start" x="631.5" y="-200.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ operator!=()</text>
+<text text-anchor="start" x="631.5" y="-189.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ compare()</text>
+<text text-anchor="start" x="631.5" y="-178.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ compare()</text>
+<text text-anchor="start" x="631.5" y="-167.5" font-family="Helvetica,sans-Serif" font-size="10.00">and 8 more...</text>
+<text text-anchor="start" x="631.5" y="-156.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ HashBytes()</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node6 -->
 <g id="edge5" class="edge"><title>Node1&#45;&gt;Node6</title>
-<path fill="none" stroke="midnightblue" d="M444.041,-463.529C485.292,-436.935 536.033,-400.578 575,-361 601.267,-334.32 624.895,-298.553 640.35,-272.742"/>
-<polygon fill="none" stroke="midnightblue" points="441.934,-460.721 435.39,-469.053 445.702,-466.621 441.934,-460.721"/>
+<path fill="none" stroke="midnightblue" d="M521.81,-455.16C552.535,-428.532 587.294,-395.268 614,-361 622.042,-350.681 629.651,-339.249 636.647,-327.645"/>
+<polygon fill="none" stroke="midnightblue" points="519.402,-452.615 514.093,-461.784 523.961,-457.927 519.402,-452.615"/>
 </g>
 <!-- Node7 -->
 <g id="node7" class="node"><title>Node7</title>
-<g id="a_node7"><a xlink:href="classtvm_1_1relay_1_1InterpreterClosure.html" target="_top" xlink:title="{tvm::relay::InterpreterClosure\n||+ InterpreterClosure()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
-<polygon fill="white" stroke="black" points="492.5,-0.5 492.5,-79.5 649.5,-79.5 649.5,-0.5 492.5,-0.5"/>
-<text text-anchor="middle" x="571" y="-67.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::InterpreterClosure</text>
-<polyline fill="none" stroke="black" points="492.5,-60.5 649.5,-60.5 "/>
-<text text-anchor="middle" x="571" y="-48.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="492.5,-41.5 649.5,-41.5 "/>
-<text text-anchor="start" x="500.5" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ InterpreterClosure()</text>
-<text text-anchor="start" x="500.5" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="500.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<g id="a_node7"><a xlink:href="classtvm_1_1runtime_1_1vm_1_1Closure.html" target="_top" xlink:title="reference to closure. ">
+<polygon fill="white" stroke="black" points="755,-204.5 755,-272.5 905,-272.5 905,-204.5 755,-204.5"/>
+<text text-anchor="middle" x="830" y="-260.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::vm::Closure</text>
+<polyline fill="none" stroke="black" points="755,-253.5 905,-253.5 "/>
+<text text-anchor="middle" x="830" y="-241.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="755,-234.5 905,-234.5 "/>
+<text text-anchor="start" x="763" y="-222.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="763" y="-211.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
-<!-- Node6&#45;&gt;Node7 -->
-<g id="edge6" class="edge"><title>Node6&#45;&gt;Node7</title>
-<path fill="none" stroke="midnightblue" d="M639.908,-194.869C624.541,-160.555 603.129,-112.744 588.269,-79.5602"/>
-<polygon fill="none" stroke="midnightblue" points="636.79,-196.47 644.072,-204.166 643.179,-193.609 636.79,-196.47"/>
+<!-- Node1&#45;&gt;Node7 -->
+<g id="edge6" class="edge"><title>Node1&#45;&gt;Node7</title>
+<path fill="none" stroke="midnightblue" d="M523.801,-486.707C587.84,-461.564 679.903,-418.909 746,-361 774.643,-335.905 798.321,-299.041 813.156,-272.505"/>
+<polygon fill="none" stroke="midnightblue" points="522.227,-483.564 514.167,-490.441 524.756,-490.091 522.227,-483.564"/>
 </g>
 <!-- Node8 -->
 <g id="node8" class="node"><title>Node8</title>
-<g id="a_node8"><a xlink:href="classtvm_1_1runtime_1_1vm_1_1VMClosure.html" target="_top" xlink:title="reference to closure. ">
-<polygon fill="white" stroke="black" points="667.5,-0.5 667.5,-79.5 824.5,-79.5 824.5,-0.5 667.5,-0.5"/>
-<text text-anchor="middle" x="746" y="-67.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::vm::VMClosure</text>
-<polyline fill="none" stroke="black" points="667.5,-60.5 824.5,-60.5 "/>
-<text text-anchor="middle" x="746" y="-48.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
-<polyline fill="none" stroke="black" points="667.5,-41.5 824.5,-41.5 "/>
-<text text-anchor="start" x="675.5" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ VMClosure()</text>
-<text text-anchor="start" x="675.5" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
-<text text-anchor="start" x="675.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+<g id="a_node8"><a xlink:href="classtvm_1_1relay_1_1InterpreterClosure.html" target="_top" xlink:title="{tvm::relay::InterpreterClosure\n||+ InterpreterClosure()\l+ TVM_DEFINE_OBJECT_REF\l_METHODS()\l}">
+<polygon fill="white" stroke="black" points="663.5,-0.5 663.5,-79.5 820.5,-79.5 820.5,-0.5 663.5,-0.5"/>
+<text text-anchor="middle" x="742" y="-67.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::relay::InterpreterClosure</text>
+<polyline fill="none" stroke="black" points="663.5,-60.5 820.5,-60.5 "/>
+<text text-anchor="middle" x="742" y="-48.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="663.5,-41.5 820.5,-41.5 "/>
+<text text-anchor="start" x="671.5" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ InterpreterClosure()</text>
+<text text-anchor="start" x="671.5" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="671.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
 </a>
 </g>
 </g>
-<!-- Node6&#45;&gt;Node8 -->
-<g id="edge7" class="edge"><title>Node6&#45;&gt;Node8</title>
-<path fill="none" stroke="midnightblue" d="M677.875,-194.869C693.067,-160.555 714.236,-112.744 728.928,-79.5602"/>
-<polygon fill="none" stroke="midnightblue" points="674.606,-193.606 673.758,-204.166 681.007,-196.44 674.606,-193.606"/>
+<!-- Node7&#45;&gt;Node8 -->
+<g id="edge7" class="edge"><title>Node7&#45;&gt;Node8</title>
+<path fill="none" stroke="midnightblue" d="M810.908,-194.869C795.541,-160.555 774.129,-112.744 759.269,-79.5602"/>
+<polygon fill="none" stroke="midnightblue" points="807.79,-196.47 815.072,-204.166 814.179,-193.609 807.79,-196.47"/>
+</g>
+<!-- Node9 -->
+<g id="node9" class="node"><title>Node9</title>
+<g id="a_node9"><a xlink:href="classtvm_1_1runtime_1_1vm_1_1VMClosure.html" target="_top" xlink:title="reference to closure. ">
+<polygon fill="white" stroke="black" points="838.5,-0.5 838.5,-79.5 995.5,-79.5 995.5,-0.5 838.5,-0.5"/>
+<text text-anchor="middle" x="917" y="-67.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm::runtime::vm::VMClosure</text>
+<polyline fill="none" stroke="black" points="838.5,-60.5 995.5,-60.5 "/>
+<text text-anchor="middle" x="917" y="-48.5" font-family="Helvetica,sans-Serif" font-size="10.00"> </text>
+<polyline fill="none" stroke="black" points="838.5,-41.5 995.5,-41.5 "/>
+<text text-anchor="start" x="846.5" y="-29.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ VMClosure()</text>
+<text text-anchor="start" x="846.5" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">+ TVM_DEFINE_OBJECT_REF</text>
+<text text-anchor="start" x="846.5" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">_METHODS()</text>
+</a>
+</g>
+</g>
+<!-- Node7&#45;&gt;Node9 -->
+<g id="edge8" class="edge"><title>Node7&#45;&gt;Node9</title>
+<path fill="none" stroke="midnightblue" d="M848.875,-194.869C864.067,-160.555 885.236,-112.744 899.928,-79.5602"/>
+<polygon fill="none" stroke="midnightblue" points="845.606,-193.606 844.758,-204.166 852.007,-196.44 845.606,-193.606"/>
 </g>
 </g>
 </svg>
diff --git a/docs/doxygen/classtvm_1_1runtime_1_1ADT-members.html b/docs/doxygen/classtvm_1_1runtime_1_1Optional-members.html
similarity index 51%
copy from docs/doxygen/classtvm_1_1runtime_1_1ADT-members.html
copy to docs/doxygen/classtvm_1_1runtime_1_1Optional-members.html
index 211c6d1..994d06b 100644
--- a/docs/doxygen/classtvm_1_1runtime_1_1ADT-members.html
+++ b/docs/doxygen/classtvm_1_1runtime_1_1Optional-members.html
@@ -83,22 +83,20 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="namespacetvm.html">tvm</a></li><li class="navelem"><a class="el" href="namespacetvm_1_1runtime.html">runtime</a></li><li class="navelem"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">ADT</a></li>  </ul>
+<li class="navelem"><a class="el" href="namespacetvm.html">tvm</a></li><li class="navelem"><a class="el" href="namespacetvm_1_1runtime.html">runtime</a></li><li class="navelem"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">Optional</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="headertitle">
-<div class="title">tvm::runtime::ADT Member List</div>  </div>
+<div class="title">tvm::runtime::Optional&lt; T &gt; Member List</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>This is the complete list of members for <a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</a>, including all inherited members.</p>
+<p>This is the complete list of members for <a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</a>, including all inherited members.</p>
 <table class="directory">
-  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html#a204397cb319fdb83a72b1d9112a09caa">ADT</a>(int32_t tag, std::vector&lt; ObjectRef &gt; fields)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html#aea0665ed087095ed39354064e5071d4f">ADT</a>(int32_t tag, Iterator begin, Iterator end)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</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_1ADT.html#a9ebe228980db0256d72fc01ba5c7ae89">ADT</a>(int32_t tag, std::initializer_list&lt; ObjectRef &gt; init)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</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_1Optional.html#a44303056ef977eb853c76910e9b71573">_type_is_nullable</a></td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ab51c99a3607ca95884d9efd978998ce8">as</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#aa5c355fbb7d2f7402ee360dba8a52cdd">ContainerType</a> typedef</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_1Optional.html#a060b345337ea063b80b6380878704c00">ContainerType</a> typedef</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</a></td><td class="entry"></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#ac261cdb80487fb29ac42b28678f8cbef">data_</a></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">protected</span></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a79d0ae0a887ed5cbfa67de7d43f0ef3a">defined</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#acd04bb22a6861e9952c344ee8547411f">DowncastNoCheck</a>(ObjectRef ref)</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">protected</span><span class="mlabel">static</span></td></tr>
@@ -108,18 +106,36 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
   <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aed593996e4076632450de8fde776707c">GetDataPtr</a>(const ObjectRef &amp;ref)</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">protected</span><span class="mlabel">static</span></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_1runtime_1_1ObjectRef.html#a2ae377cc59f98b42339d76bded1c1711">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_1runtime_1_1ObjectRef.html#ab9b1ac131656be45db88e69c04bb16af">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#a17626209947c4a2f302422be451661c5">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#ac8c2b78649a428e35e279d085d509e1b">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_1runtime_1_1ADT.html#a6a1dba101b18cffbd307f7c0f92a39b2">operator[]</a>(size_t idx) const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</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_1Optional.html#a5beb33748682c0f71f720baf320b7779">operator bool</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</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_1runtime_1_1Optional.html#a78a929439c8054aaf9c01219fbd97122">operator!=</a>(std::nullptr_t) const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</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_1Optional.html#a756a3c5cc53a518631d650772cd04c2e">operator!=</a>(const Optional&lt; T &gt; &amp;other) const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#abd0971a85a6cf1b818ce7a79c5671e9c">operator!=</a>(const T &amp;other) const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</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_1Optional.html#a896bbc469a3981b64124f52c89b128f2">operator!=</a>(const U &amp;other) const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</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#a2ae377cc59f98b42339d76bded1c1711">tvm::runtime::ObjectRef::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_1runtime_1_1ObjectRef.html#ab9b1ac131656be45db88e69c04bb16af">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#a17626209947c4a2f302422be451661c5">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_1Optional.html#a377e159dbff53b8544a1b3337afc379d">operator=</a>(const Optional&lt; T &gt; &amp;)=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#af840ea1549dbe89d1680025c803e02e1">operator=</a>(Optional&lt; T &gt; &amp;&amp;)=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#ab0f16ec4c71f65eec4a2ea9a83711a73">operator=</a>(std::nullptr_t)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#a98b43ed21bc060868ac03dab520a5da2">operator=</a>(T other)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</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_1Optional.html#a55ca87f94d76bd38af18526c53c4b22a">operator=</a>(int val)=delete</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#a916bd2919809b7f97b41a0ebe186ae81">operator==</a>(std::nullptr_t) const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</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_1Optional.html#a70783dc58630323b15050631190de12a">operator==</a>(const Optional&lt; T &gt; &amp;other) const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#acc5a4fd8c3797d01dda055912ed790d7">operator==</a>(const T &amp;other) const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</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_1Optional.html#ac023e409e5845f62320c3ac0784c6278">operator==</a>(const U &amp;other) const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</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#ac8c2b78649a428e35e279d085d509e1b">tvm::runtime::ObjectRef::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_1runtime_1_1Optional.html#af684522b40606c8b5e0907fbd103291e">Optional</a>()=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#a8e48cc0c7291822bb3fad71dd1455ba6">Optional</a>(const Optional&lt; T &gt; &amp;)=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</a></td><td class="entry"></td></tr>
+  <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#a237bbbf19c47a7dd52df94021c7858bf">Optional</a>(Optional&lt; T &gt; &amp;&amp;)=default</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</a></td><td class="entry"></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#aa07cc5bd536a18454ed737fb42b80be2">Optional</a>(ObjectPtr&lt; Object &gt; ptr)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</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_1runtime_1_1Optional.html#a4474559794818ad1257b70e681929938">Optional</a>(std::nullptr_t)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</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_1runtime_1_1Optional.html#a39892e077bef2ff9379bd97b2f3e1a69">Optional</a>(T other)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</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_1Optional.html#ae7344a4b601b13152afff14a8dc52857">Optional</a>(int val)=delete</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</a></td><td class="entry"><span class="mlabel">explicit</span></td></tr>
   <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a62014c9eba5cae2ab5a84963725d6a65">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_1runtime_1_1ADT.html#af8cf2f61fa9b7737718f15a018d12b84">size</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html#a1a631df56a143132d60076c8038a9a97">tag</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</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_1ADT.html#a9952c0be3e79a57cf80a3c01fd7bbe87">Tuple</a>(Args &amp;&amp;...args)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</a></td><td class="entry"><span class="mlabel">inline</span><span class="mlabel">static</span></td></tr>
-  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html#a5367ea22b4dab8c73d06031cd4c72dec">TVM_DEFINE_OBJECT_REF_METHODS</a>(ADT, ObjectRef, ADTObj)</td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ADT.html">tvm::runtime::ADT</a></td><td class="entry"></td></tr>
   <tr class="even"><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a4142990fd1959abc95aa0cccca4f6cda">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#a4cfef0af824ed4afb3daefa600b2aa04">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_1runtime_1_1Optional.html#aa2e0a5f820615accd915d2df798c18f5">value</a>() const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
+  <tr><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#af97930eb9a7beac3cf5f2e2df8eca581">value_or</a>(T default_value) const </td><td class="entry"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional&lt; T &gt;</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/doxygen/classtvm_1_1runtime_1_1String.html b/docs/doxygen/classtvm_1_1runtime_1_1Optional.html
similarity index 53%
copy from docs/doxygen/classtvm_1_1runtime_1_1String.html
copy to docs/doxygen/classtvm_1_1runtime_1_1Optional.html
index ee4aa82..e5b00e5 100644
--- a/docs/doxygen/classtvm_1_1runtime_1_1String.html
+++ b/docs/doxygen/classtvm_1_1runtime_1_1Optional.html
@@ -4,7 +4,7 @@
 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
 <meta name="generator" content="Doxygen 1.8.11"/>
-<title>tvm: tvm::runtime::String Class Reference</title>
+<title>tvm: tvm::runtime::Optional&lt; T &gt; Class Template Reference</title>
 <link href="tabs.css" rel="stylesheet" type="text/css"/>
 <script type="text/javascript" src="jquery.js"></script>
 <script type="text/javascript" src="dynsections.js"></script>
@@ -83,87 +83,97 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 
 <div id="nav-path" class="navpath">
   <ul>
-<li class="navelem"><a class="el" href="namespacetvm.html">tvm</a></li><li class="navelem"><a class="el" href="namespacetvm_1_1runtime.html">runtime</a></li><li class="navelem"><a class="el" href="classtvm_1_1runtime_1_1String.html">String</a></li>  </ul>
+<li class="navelem"><a class="el" href="namespacetvm.html">tvm</a></li><li class="navelem"><a class="el" href="namespacetvm_1_1runtime.html">runtime</a></li><li class="navelem"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">Optional</a></li>  </ul>
 </div>
 </div><!-- top -->
 <div class="header">
   <div class="summary">
+<a href="#pub-types">Public Types</a> &#124;
 <a href="#pub-methods">Public Member Functions</a> &#124;
-<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
-<a href="classtvm_1_1runtime_1_1String-members.html">List of all members</a>  </div>
+<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
+<a href="classtvm_1_1runtime_1_1Optional-members.html">List of all members</a>  </div>
   <div class="headertitle">
-<div class="title">tvm::runtime::String Class Reference</div>  </div>
+<div class="title">tvm::runtime::Optional&lt; T &gt; Class Template Reference</div>  </div>
 </div><!--header-->
 <div class="contents">
 
-<p>Reference to string objects.  
- <a href="classtvm_1_1runtime_1_1String.html#details">More...</a></p>
+<p><a class="el" href="classtvm_1_1runtime_1_1Optional.html" title="Optional container that to represent to a Nullable variant of T. ">Optional</a> container that to represent to a Nullable variant of T.  
+ <a href="classtvm_1_1runtime_1_1Optional.html#details">More...</a></p>
 
 <p><code>#include &lt;<a class="el" href="runtime_2container_8h_source.html">container.h</a>&gt;</code></p>
 <div class="dynheader">
-Inheritance diagram for tvm::runtime::String:</div>
+Inheritance diagram for tvm::runtime::Optional&lt; T &gt;:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1runtime_1_1String__inherit__graph.svg" width="184" height="595"><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_1runtime_1_1Optional__inherit__graph.svg" width="214" height="595"><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::runtime::String:</div>
+Collaboration diagram for tvm::runtime::Optional&lt; T &gt;:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="classtvm_1_1runtime_1_1String__coll__graph.svg" width="195" height="898"><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_1runtime_1_1Optional__coll__graph.svg" width="214" height="883"><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">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
+Public Types</h2></td></tr>
+<tr class="memitem:a060b345337ea063b80b6380878704c00"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#a060b345337ea063b80b6380878704c00">ContainerType</a> = typename T::ContainerType</td></tr>
+<tr class="separator:a060b345337ea063b80b6380878704c00"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_types_classtvm_1_1runtime_1_1ObjectRef"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classtvm_1_1runtime_1_1ObjectRef')"><img src="closed.png" alt="-"/>&#160;Public Types inherited from <a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td></tr>
+<tr class="memitem:aa5c355fbb7d2f7402ee360dba8a52cdd inherit pub_types_classtvm_1_1runtime_1_1ObjectRef"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa5c355fbb7d2f7402ee360dba8a52cdd">ContainerType</a> = <a class="el" href="classtvm_1_1runtime_1_1Object.html">Object</a></td></tr>
+<tr class="memdesc:aa5c355fbb7d2f7402ee360dba8a52cdd inherit pub_types_classtvm_1_1runtime_1_1ObjectRef"><td class="mdescLeft">&#160;</td><td class="mdescRight">type indicate the container type.  <a href="#aa5c355fbb7d2f7402ee360dba8a52cdd">More...</a><br /></td></tr>
+<tr class="separator:aa5c355fbb7d2f7402ee360dba8a52cdd inherit pub_types_classtvm_1_1runtime_1_1ObjectRef"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
 Public Member Functions</h2></td></tr>
-<tr class="memitem:a02fca36e3ff55cc1e83635b02a11fca3"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1String.html#a02fca36e3ff55cc1e83635b02a11fca3">String</a> (std::string other)</td></tr>
-<tr class="memdesc:a02fca36e3ff55cc1e83635b02a11fca3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct a new <a class="el" href="classtvm_1_1runtime_1_1String.html" title="Reference to string objects. ">String</a> object.  <a href="#a02fca36e3ff55cc1e83635b02a11fca3">More...</a><br /></td></tr>
-<tr class="separator:a02fca36e3ff55cc1e83635b02a11fca3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a68df7bab89fca339e3918438dd80300d"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1String.html#a68df7bab89fca339e3918438dd80300d">String</a> (const char *other)</td></tr>
-<tr class="memdesc:a68df7bab89fca339e3918438dd80300d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct a new <a class="el" href="classtvm_1_1runtime_1_1String.html" title="Reference to string objects. ">String</a> object.  <a href="#a68df7bab89fca339e3918438dd80300d">More...</a><br /></td></tr>
-<tr class="separator:a68df7bab89fca339e3918438dd80300d"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a0d6160f9a7e4efbafa7f6d7a42fec0d4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1runtime_1_1String.html">String</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1String.html#a0d6160f9a7e4efbafa7f6d7a42fec0d4">operator=</a> (std::string other)</td></tr>
-<tr class="memdesc:a0d6160f9a7e4efbafa7f6d7a42fec0d4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Change the value the reference object points to.  <a href="#a0d6160f9a7e4efbafa7f6d7a42fec0d4">More...</a><br /></td></tr>
-<tr class="separator:a0d6160f9a7e4efbafa7f6d7a42fec0d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ae0c8008f2660354514aa1f59540ea0a1"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1String.html#ae0c8008f2660354514aa1f59540ea0a1">operator==</a> (const std::string &amp;other) const </td></tr>
-<tr class="memdesc:ae0c8008f2660354514aa1f59540ea0a1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compare is equal to other std::string.  <a href="#ae0c8008f2660354514aa1f59540ea0a1">More...</a><br /></td></tr>
-<tr class="separator:ae0c8008f2660354514aa1f59540ea0a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad6094750f4d337c7e5a1b04180675b41"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1String.html#ad6094750f4d337c7e5a1b04180675b41">operator!=</a> (const std::string &amp;other) const </td></tr>
-<tr class="memdesc:ad6094750f4d337c7e5a1b04180675b41"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compare is not equal to other std::string.  <a href="#ad6094750f4d337c7e5a1b04180675b41">More...</a><br /></td></tr>
-<tr class="separator:ad6094750f4d337c7e5a1b04180675b41"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a21ee70af849336830d9f7d01005dc0a3"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1String.html#a21ee70af849336830d9f7d01005dc0a3">operator==</a> (const char *other) const </td></tr>
-<tr class="memdesc:a21ee70af849336830d9f7d01005dc0a3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compare is equal to other char string.  <a href="#a21ee70af849336830d9f7d01005dc0a3">More...</a><br /></td></tr>
-<tr class="separator:a21ee70af849336830d9f7d01005dc0a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:afd91d1bddf1d126fbd8f20aebeb020f2"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1String.html#afd91d1bddf1d126fbd8f20aebeb020f2">operator!=</a> (const char *other) const </td></tr>
-<tr class="memdesc:afd91d1bddf1d126fbd8f20aebeb020f2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compare is not equal to other char string.  <a href="#afd91d1bddf1d126fbd8f20aebeb020f2">More...</a><br /></td></tr>
-<tr class="separator:afd91d1bddf1d126fbd8f20aebeb020f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7ee59f6227213720ef176b995191b4e0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1String.html#a7ee59f6227213720ef176b995191b4e0">compare</a> (const <a class="el" href="classtvm_1_1runtime_1_1String.html">String</a> &amp;other) const </td></tr>
-<tr class="memdesc:a7ee59f6227213720ef176b995191b4e0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compares this <a class="el" href="classtvm_1_1runtime_1_1String.html" title="Reference to string objects. ">String</a> object to other.  <a href="#a7ee59f6227213720ef176b995191b4e0">More...</a><br /></td></tr>
-<tr class="separator:a7ee59f6227213720ef176b995191b4e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:adaa1cef73909f379ca5991ef1ab61c40"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1String.html#adaa1cef73909f379ca5991ef1ab61c40">compare</a> (const std::string &amp;other) const </td></tr>
-<tr class="memdesc:adaa1cef73909f379ca5991ef1ab61c40"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compares this <a class="el" href="classtvm_1_1runtime_1_1String.html" title="Reference to string objects. ">String</a> object to other.  <a href="#adaa1cef73909f379ca5991ef1ab61c40">More...</a><br /></td></tr>
-<tr class="separator:adaa1cef73909f379ca5991ef1ab61c40"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:ad2c11edfba52dedb10ac48e2980ffba6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1String.html#ad2c11edfba52dedb10ac48e2980ffba6">compare</a> (const char *other) const </td></tr>
-<tr class="memdesc:ad2c11edfba52dedb10ac48e2980ffba6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compares this to other.  <a href="#ad2c11edfba52dedb10ac48e2980ffba6">More...</a><br /></td></tr>
-<tr class="separator:ad2c11edfba52dedb10ac48e2980ffba6"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a61a280bb2b55d56477bab49e0b8eb187"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1String.html#a61a280bb2b55d56477bab49e0b8eb187">c_str</a> () const </td></tr>
-<tr class="memdesc:a61a280bb2b55d56477bab49e0b8eb187"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a pointer to the char array in the string.  <a href="#a61a280bb2b55d56477bab49e0b8eb187">More...</a><br /></td></tr>
-<tr class="separator:a61a280bb2b55d56477bab49e0b8eb187"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a44788bd2440eb4ebbada370314536243"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1String.html#a44788bd2440eb4ebbada370314536243">size</a> () const </td></tr>
-<tr class="memdesc:a44788bd2440eb4ebbada370314536243"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the length of the string.  <a href="#a44788bd2440eb4ebbada370314536243">More...</a><br /></td></tr>
-<tr class="separator:a44788bd2440eb4ebbada370314536243"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a406e45189b6e0239cf32f717f59d59d2"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1String.html#a406e45189b6e0239cf32f717f59d59d2">length</a> () const </td></tr>
-<tr class="memdesc:a406e45189b6e0239cf32f717f59d59d2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the length of the string.  <a href="#a406e45189b6e0239cf32f717f59d59d2">More...</a><br /></td></tr>
-<tr class="separator:a406e45189b6e0239cf32f717f59d59d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a93f37d0bb56661345a4e0bf1c902b685"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1String.html#a93f37d0bb56661345a4e0bf1c902b685">empty</a> () const </td></tr>
-<tr class="memdesc:a93f37d0bb56661345a4e0bf1c902b685"><td class="mdescLeft">&#160;</td><td class="mdescRight">Retun if the string is empty.  <a href="#a93f37d0bb56661345a4e0bf1c902b685">More...</a><br /></td></tr>
-<tr class="separator:a93f37d0bb56661345a4e0bf1c902b685"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a7bf6b73710e93d238712be0c9d4143b0"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1String.html#a7bf6b73710e93d238712be0c9d4143b0">data</a> () const </td></tr>
-<tr class="memdesc:a7bf6b73710e93d238712be0c9d4143b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return the data pointer.  <a href="#a7bf6b73710e93d238712be0c9d4143b0">More...</a><br /></td></tr>
-<tr class="separator:a7bf6b73710e93d238712be0c9d4143b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:af060dff35dfb58d106c6885720be1564"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classtvm_1_1runtime_1_1StringObj.html">StringObj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1String.html#af060dff35dfb58d106c6885720be1564">get</a> () const </td></tr>
-<tr class="separator:af060dff35dfb58d106c6885720be1564"><td class="memSeparator" colspan="2">&#160;</td></tr>
-<tr class="memitem:a9b55a67ee4dc15ac77d4eab01f15b9d8"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1String.html#a9b55a67ee4dc15ac77d4eab01f15b9d8">TVM_DEFINE_OBJECT_REF_METHODS</a> (<a class="el" href="classtvm_1_1runtime_1_1String.html">String</a>, <a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">ObjectRef</a>, <a class="el" href="classtvm_1_1runtime_1_1StringObj.html">StringObj [...]
-<tr class="separator:a9b55a67ee4dc15ac77d4eab01f15b9d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af684522b40606c8b5e0907fbd103291e"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#af684522b40606c8b5e0907fbd103291e">Optional</a> ()=default</td></tr>
+<tr class="separator:af684522b40606c8b5e0907fbd103291e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a8e48cc0c7291822bb3fad71dd1455ba6"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#a8e48cc0c7291822bb3fad71dd1455ba6">Optional</a> (const <a class="el" href="classtvm_1_1runtime_1_1Optional.html">Optional</a>&lt; T &gt; &amp;)=default</td></tr>
+<tr class="separator:a8e48cc0c7291822bb3fad71dd1455ba6"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a237bbbf19c47a7dd52df94021c7858bf"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#a237bbbf19c47a7dd52df94021c7858bf">Optional</a> (<a class="el" href="classtvm_1_1runtime_1_1Optional.html">Optional</a>&lt; T &gt; &amp;&amp;)=default</td></tr>
+<tr class="separator:a237bbbf19c47a7dd52df94021c7858bf"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a377e159dbff53b8544a1b3337afc379d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">Optional</a>&lt; T &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#a377e159dbff53b8544a1b3337afc379d">operator=</a> (const <a class="el" href="classtvm_1_1runtime_1_1Optional.html">Optional</a>&lt; T &gt; &amp;)=default</td></tr>
+<tr class="separator:a377e159dbff53b8544a1b3337afc379d"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af840ea1549dbe89d1680025c803e02e1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">Optional</a>&lt; T &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#af840ea1549dbe89d1680025c803e02e1">operator=</a> (<a class="el" href="classtvm_1_1runtime_1_1Optional.html">Optional</a>&lt; T &gt; &amp;&amp;)=default</td></tr>
+<tr class="separator:af840ea1549dbe89d1680025c803e02e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa07cc5bd536a18454ed737fb42b80be2"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#aa07cc5bd536a18454ed737fb42b80be2">Optional</a> (<a class="el" href="classtvm_1_1runtime_1_1ObjectPtr.html">ObjectPtr</a>&lt; <a class="el" href="classtvm_1_1runtime_1_1Object.html">Object</a> &gt; ptr)</td></tr>
+<tr class="memdesc:aa07cc5bd536a18454ed737fb42b80be2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Construct from an <a class="el" href="classtvm_1_1runtime_1_1ObjectPtr.html" title="A custom smart pointer for Object. ">ObjectPtr</a> whose type already matches the ContainerType.  <a href="#aa07cc5bd536a18454ed737fb42b80be2">More...</a><br /></td></tr>
+<tr class="separator:aa07cc5bd536a18454ed737fb42b80be2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a4474559794818ad1257b70e681929938"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#a4474559794818ad1257b70e681929938">Optional</a> (std::nullptr_t)</td></tr>
+<tr class="separator:a4474559794818ad1257b70e681929938"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ab0f16ec4c71f65eec4a2ea9a83711a73"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">Optional</a>&lt; T &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#ab0f16ec4c71f65eec4a2ea9a83711a73">operator=</a> (std::nullptr_t)</td></tr>
+<tr class="separator:ab0f16ec4c71f65eec4a2ea9a83711a73"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a39892e077bef2ff9379bd97b2f3e1a69"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#a39892e077bef2ff9379bd97b2f3e1a69">Optional</a> (T other)</td></tr>
+<tr class="separator:a39892e077bef2ff9379bd97b2f3e1a69"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a98b43ed21bc060868ac03dab520a5da2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">Optional</a>&lt; T &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#a98b43ed21bc060868ac03dab520a5da2">operator=</a> (T other)</td></tr>
+<tr class="separator:a98b43ed21bc060868ac03dab520a5da2"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ae7344a4b601b13152afff14a8dc52857"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#ae7344a4b601b13152afff14a8dc52857">Optional</a> (int val)=delete</td></tr>
+<tr class="separator:ae7344a4b601b13152afff14a8dc52857"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a55ca87f94d76bd38af18526c53c4b22a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">Optional</a>&lt; T &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#a55ca87f94d76bd38af18526c53c4b22a">operator=</a> (int val)=delete</td></tr>
+<tr class="separator:a55ca87f94d76bd38af18526c53c4b22a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:aa2e0a5f820615accd915d2df798c18f5"><td class="memItemLeft" align="right" valign="top">T&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#aa2e0a5f820615accd915d2df798c18f5">value</a> () const </td></tr>
+<tr class="separator:aa2e0a5f820615accd915d2df798c18f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:af97930eb9a7beac3cf5f2e2df8eca581"><td class="memItemLeft" align="right" valign="top">T&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#af97930eb9a7beac3cf5f2e2df8eca581">value_or</a> (T default_value) const </td></tr>
+<tr class="separator:af97930eb9a7beac3cf5f2e2df8eca581"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a5beb33748682c0f71f720baf320b7779"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#a5beb33748682c0f71f720baf320b7779">operator bool</a> () const </td></tr>
+<tr class="separator:a5beb33748682c0f71f720baf320b7779"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a916bd2919809b7f97b41a0ebe186ae81"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#a916bd2919809b7f97b41a0ebe186ae81">operator==</a> (std::nullptr_t) const </td></tr>
+<tr class="separator:a916bd2919809b7f97b41a0ebe186ae81"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a78a929439c8054aaf9c01219fbd97122"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#a78a929439c8054aaf9c01219fbd97122">operator!=</a> (std::nullptr_t) const </td></tr>
+<tr class="separator:a78a929439c8054aaf9c01219fbd97122"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a70783dc58630323b15050631190de12a"><td class="memItemLeft" align="right" valign="top">auto&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#a70783dc58630323b15050631190de12a">operator==</a> (const <a class="el" href="classtvm_1_1runtime_1_1Optional.html">Optional</a>&lt; T &gt; &amp;other) const </td></tr>
+<tr class="separator:a70783dc58630323b15050631190de12a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a756a3c5cc53a518631d650772cd04c2e"><td class="memItemLeft" align="right" valign="top">auto&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#a756a3c5cc53a518631d650772cd04c2e">operator!=</a> (const <a class="el" href="classtvm_1_1runtime_1_1Optional.html">Optional</a>&lt; T &gt; &amp;other) const </td></tr>
+<tr class="separator:a756a3c5cc53a518631d650772cd04c2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:acc5a4fd8c3797d01dda055912ed790d7"><td class="memItemLeft" align="right" valign="top">auto&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#acc5a4fd8c3797d01dda055912ed790d7">operator==</a> (const T &amp;other) const </td></tr>
+<tr class="separator:acc5a4fd8c3797d01dda055912ed790d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:abd0971a85a6cf1b818ce7a79c5671e9c"><td class="memItemLeft" align="right" valign="top">auto&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#abd0971a85a6cf1b818ce7a79c5671e9c">operator!=</a> (const T &amp;other) const </td></tr>
+<tr class="separator:abd0971a85a6cf1b818ce7a79c5671e9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:ac023e409e5845f62320c3ac0784c6278"><td class="memTemplParams" colspan="2">template&lt;typename U &gt; </td></tr>
+<tr class="memitem:ac023e409e5845f62320c3ac0784c6278"><td class="memTemplItemLeft" align="right" valign="top">auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#ac023e409e5845f62320c3ac0784c6278">operator==</a> (const U &amp;other) const </td></tr>
+<tr class="separator:ac023e409e5845f62320c3ac0784c6278"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="memitem:a896bbc469a3981b64124f52c89b128f2"><td class="memTemplParams" colspan="2">template&lt;typename U &gt; </td></tr>
+<tr class="memitem:a896bbc469a3981b64124f52c89b128f2"><td class="memTemplItemLeft" align="right" valign="top">auto&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#a896bbc469a3981b64124f52c89b128f2">operator!=</a> (const U &amp;other) const </td></tr>
+<tr class="separator:a896bbc469a3981b64124f52c89b128f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="inherit_header pub_methods_classtvm_1_1runtime_1_1ObjectRef"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classtvm_1_1runtime_1_1ObjectRef')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td></tr>
 <tr class="memitem:aa07c1f6d66a438ea950637d13ed09471 inherit pub_methods_classtvm_1_1runtime_1_1ObjectRef"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa07c1f6d66a438ea950637d13ed09471">ObjectRef</a> ()=default</td></tr>
 <tr class="memdesc:aa07c1f6d66a438ea950637d13ed09471 inherit pub_methods_classtvm_1_1runtime_1_1ObjectRef"><td class="mdescLeft">&#160;</td><td class="mdescRight">default constructor  <a href="#aa07c1f6d66a438ea950637d13ed09471">More...</a><br /></td></tr>
@@ -198,18 +208,16 @@ Public Member Functions</h2></td></tr>
 <tr class="memdesc:ab51c99a3607ca95884d9efd978998ce8 inherit pub_methods_classtvm_1_1runtime_1_1ObjectRef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Try to downcast the internal <a class="el" href="classtvm_1_1runtime_1_1Object.html" title="base class of all object containers. ">Object</a> to a raw pointer of a corresponding type.  <a href="#ab51c99a3607ca95884d9efd978998ce8">More...</a><br /></td></tr>
 <tr class="separator:ab51c99a3607ca95884d9efd978998ce8 inherit pub_methods_classtvm_1_1runtime_1_1ObjectRef"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table><table class="memberdecls">
-<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
-Static Public Member Functions</h2></td></tr>
-<tr class="memitem:a0ea0aa1d24073721ee7bf9bd5d23c53a"><td class="memItemLeft" align="right" valign="top">static size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1String.html#a0ea0aa1d24073721ee7bf9bd5d23c53a">HashBytes</a> (const char *<a class="el" href="classtvm_1_1runtime_1_1String.html#a7bf6b73710e93d238712be0c9d4143b0">data</a>, size_t <a class="el" href="classtvm_1_1runtime_1_1String.html#a44788bd2440eb4ebbada370314536243">size</a> [...]
-<tr class="memdesc:a0ea0aa1d24073721ee7bf9bd5d23c53a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hash the binary bytes.  <a href="#a0ea0aa1d24073721ee7bf9bd5d23c53a">More...</a><br /></td></tr>
-<tr class="separator:a0ea0aa1d24073721ee7bf9bd5d23c53a"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
+Static Public Attributes</h2></td></tr>
+<tr class="memitem:a44303056ef977eb853c76910e9b71573"><td class="memItemLeft" align="right" valign="top">static constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1Optional.html#a44303056ef977eb853c76910e9b71573">_type_is_nullable</a> = true</td></tr>
+<tr class="separator:a44303056ef977eb853c76910e9b71573"><td class="memSeparator" colspan="2">&#160;</td></tr>
+<tr class="inherit_header pub_static_attribs_classtvm_1_1runtime_1_1ObjectRef"><td colspan="2" onclick="javascript:toggleInherit('pub_static_attribs_classtvm_1_1runtime_1_1ObjectRef')"><img src="closed.png" alt="-"/>&#160;Static Public Attributes inherited from <a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td></tr>
+<tr class="memitem:a3e9b0901b6e01257b060a45e159cc37e inherit pub_static_attribs_classtvm_1_1runtime_1_1ObjectRef"><td class="memItemLeft" align="right" valign="top">static constexpr bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#a3e9b0901b6e01257b060a45e159cc37e">_type_is_nullable</a> = true</td></tr>
+<tr class="separator:a3e9b0901b6e01257b060a45e159cc37e inherit pub_static_attribs_classtvm_1_1runtime_1_1ObjectRef"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table><table class="memberdecls">
 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
 Additional Inherited Members</h2></td></tr>
-<tr class="inherit_header pub_types_classtvm_1_1runtime_1_1ObjectRef"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classtvm_1_1runtime_1_1ObjectRef')"><img src="closed.png" alt="-"/>&#160;Public Types inherited from <a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td></tr>
-<tr class="memitem:aa5c355fbb7d2f7402ee360dba8a52cdd inherit pub_types_classtvm_1_1runtime_1_1ObjectRef"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa5c355fbb7d2f7402ee360dba8a52cdd">ContainerType</a> = <a class="el" href="classtvm_1_1runtime_1_1Object.html">Object</a></td></tr>
-<tr class="memdesc:aa5c355fbb7d2f7402ee360dba8a52cdd inherit pub_types_classtvm_1_1runtime_1_1ObjectRef"><td class="mdescLeft">&#160;</td><td class="mdescRight">type indicate the container type.  <a href="#aa5c355fbb7d2f7402ee360dba8a52cdd">More...</a><br /></td></tr>
-<tr class="separator:aa5c355fbb7d2f7402ee360dba8a52cdd inherit pub_types_classtvm_1_1runtime_1_1ObjectRef"><td class="memSeparator" colspan="2">&#160;</td></tr>
 <tr class="inherit_header pro_methods_classtvm_1_1runtime_1_1ObjectRef"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classtvm_1_1runtime_1_1ObjectRef')"><img src="closed.png" alt="-"/>&#160;Protected Member Functions inherited from <a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html">tvm::runtime::ObjectRef</a></td></tr>
 <tr class="memitem:aa4604d96f4a77cc10cc1e0419758fb2c inherit pro_methods_classtvm_1_1runtime_1_1ObjectRef"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classtvm_1_1runtime_1_1Object.html">Object</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html#aa4604d96f4a77cc10cc1e0419758fb2c">get_mutable</a> () const </td></tr>
 <tr class="separator:aa4604d96f4a77cc10cc1e0419758fb2c inherit pro_methods_classtvm_1_1runtime_1_1ObjectRef"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -231,179 +239,184 @@ Additional Inherited Members</h2></td></tr>
 <tr class="separator:ac261cdb80487fb29ac42b28678f8cbef inherit pro_attribs_classtvm_1_1runtime_1_1ObjectRef"><td class="memSeparator" colspan="2">&#160;</td></tr>
 </table>
 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
-<div class="textblock"><p>Reference to string objects. </p>
-<div class="fragment"><div class="line"><span class="comment">// Example to create runtime String reference object from std::string</span></div><div class="line">std::string s = <span class="stringliteral">&quot;hello world&quot;</span>;</div><div class="line"></div><div class="line"><span class="comment">// You can create the reference from existing std::string</span></div><div class="line"><a class="code" href="classtvm_1_1runtime_1_1String.html#a02fca36e3ff55cc1e83635b02a11fca3">Strin [...]
-<a class="anchor" id="a02fca36e3ff55cc1e83635b02a11fca3"></a>
+<div class="textblock"><h3>template&lt;typename T&gt;<br />
+class tvm::runtime::Optional&lt; T &gt;</h3>
+
+<p><a class="el" href="classtvm_1_1runtime_1_1Optional.html" title="Optional container that to represent to a Nullable variant of T. ">Optional</a> container that to represent to a Nullable variant of T. </p>
+<dl class="tparams"><dt>Template Parameters</dt><dd>
+  <table class="tparams">
+    <tr><td class="paramname">T</td><td>The original <a class="el" href="classtvm_1_1runtime_1_1ObjectRef.html" title="Base class of all object reference. ">ObjectRef</a>.</td></tr>
+  </table>
+  </dd>
+</dl>
+<div class="fragment"><div class="line">Optional&lt;String&gt; opt0 = <span class="keyword">nullptr</span>;</div><div class="line">Optional&lt;String&gt; opt1 = String(<span class="stringliteral">&quot;xyz&quot;</span>);</div><div class="line">CHECK(opt0 == <span class="keyword">nullptr</span>);</div><div class="line">CHECK(opt1 == <span class="stringliteral">&quot;xyz&quot;</span>);</div></div><!-- fragment --> </div><h2 class="groupheader">Member Typedef Documentation</h2>
+<a class="anchor" id="a060b345337ea063b80b6380878704c00"></a>
 <div class="memitem">
 <div class="memproto">
+<div class="memtemplate">
+template&lt;typename T&gt; </div>
+      <table class="memname">
+        <tr>
+          <td class="memname">using <a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional</a>&lt; T &gt;::<a class="el" href="classtvm_1_1runtime_1_1Optional.html#a060b345337ea063b80b6380878704c00">ContainerType</a> =  typename T::ContainerType</td>
+        </tr>
+      </table>
+</div><div class="memdoc">
+
+</div>
+</div>
+<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" id="af684522b40606c8b5e0907fbd103291e"></a>
+<div class="memitem">
+<div class="memproto">
+<div class="memtemplate">
+template&lt;typename T&gt; </div>
 <table class="mlabels">
   <tr>
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">tvm::runtime::String::String </td>
+          <td class="memname"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional</a>&lt; T &gt;::<a class="el" href="classtvm_1_1runtime_1_1Optional.html">Optional</a> </td>
           <td>(</td>
-          <td class="paramtype">std::string&#160;</td>
-          <td class="paramname"><em>other</em></td><td>)</td>
+          <td class="paramname"></td><td>)</td>
           <td></td>
         </tr>
       </table>
   </td>
   <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+<span class="mlabels"><span class="mlabel">default</span></span>  </td>
   </tr>
 </table>
 </div><div class="memdoc">
 
-<p>Construct a new <a class="el" href="classtvm_1_1runtime_1_1String.html" title="Reference to string objects. ">String</a> object. </p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">other</td><td>The moved/copied std::string object</td></tr>
-  </table>
-  </dd>
-</dl>
-<dl class="section note"><dt>Note</dt><dd>If user passes const reference, it will trigger copy. If it's rvalue, it will be moved into other. </dd></dl>
-
 </div>
 </div>
-<a class="anchor" id="a68df7bab89fca339e3918438dd80300d"></a>
+<a class="anchor" id="a8e48cc0c7291822bb3fad71dd1455ba6"></a>
 <div class="memitem">
 <div class="memproto">
+<div class="memtemplate">
+template&lt;typename T&gt; </div>
 <table class="mlabels">
   <tr>
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">tvm::runtime::String::String </td>
+          <td class="memname"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional</a>&lt; T &gt;::<a class="el" href="classtvm_1_1runtime_1_1Optional.html">Optional</a> </td>
           <td>(</td>
-          <td class="paramtype">const char *&#160;</td>
-          <td class="paramname"><em>other</em></td><td>)</td>
+          <td class="paramtype">const <a class="el" href="classtvm_1_1runtime_1_1Optional.html">Optional</a>&lt; T &gt; &amp;&#160;</td>
+          <td class="paramname"></td><td>)</td>
           <td></td>
         </tr>
       </table>
   </td>
   <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+<span class="mlabels"><span class="mlabel">default</span></span>  </td>
   </tr>
 </table>
 </div><div class="memdoc">
 
-<p>Construct a new <a class="el" href="classtvm_1_1runtime_1_1String.html" title="Reference to string objects. ">String</a> object. </p>
-<dl class="params"><dt>Parameters</dt><dd>
-  <table class="params">
-    <tr><td class="paramname">other</td><td>a char array. </td></tr>
-  </table>
-  </dd>
-</dl>
-
 </div>
 </div>
-<h2 class="groupheader">Member Function Documentation</h2>
-<a class="anchor" id="a61a280bb2b55d56477bab49e0b8eb187"></a>
+<a class="anchor" id="a237bbbf19c47a7dd52df94021c7858bf"></a>
 <div class="memitem">
 <div class="memproto">
+<div class="memtemplate">
+template&lt;typename T&gt; </div>
 <table class="mlabels">
   <tr>
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">const char* tvm::runtime::String::c_str </td>
+          <td class="memname"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional</a>&lt; T &gt;::<a class="el" href="classtvm_1_1runtime_1_1Optional.html">Optional</a> </td>
           <td>(</td>
+          <td class="paramtype"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">Optional</a>&lt; T &gt; &amp;&amp;&#160;</td>
           <td class="paramname"></td><td>)</td>
-          <td> const</td>
+          <td></td>
         </tr>
       </table>
   </td>
   <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
+<span class="mlabels"><span class="mlabel">default</span></span>  </td>
   </tr>
 </table>
 </div><div class="memdoc">
 
-<p>Returns a pointer to the char array in the string. </p>
-<dl class="section return"><dt>Returns</dt><dd>const char* </dd></dl>
-
 </div>
 </div>
-<a class="anchor" id="a7ee59f6227213720ef176b995191b4e0"></a>
+<a class="anchor" id="aa07cc5bd536a18454ed737fb42b80be2"></a>
 <div class="memitem">
 <div class="memproto">
+<div class="memtemplate">
+template&lt;typename T&gt; </div>
 <table class="mlabels">
   <tr>
   <td class="mlabels-left">
       <table class="memname">
         <tr>
-          <td class="memname">int tvm::runtime::String::compare </td>
+          <td class="memname"><a class="el" href="classtvm_1_1runtime_1_1Optional.html">tvm::runtime::Optional</a>&lt; T &gt;::<a class="el" href="classtvm_1_1runtime_1_1Optional.html">Optional</a> </td>
           <td>(</td>
-          <td class="paramtype">const <a class="el" href="classtvm_1_1runtime_1_1String.html">String</a> &amp;&#160;</td>
-          <td class="paramname"><em>other</em></td><td>)</td>
-          <td> const</td>
+          <td class="paramtype"><a class="el" href="classtvm_1_1runtime_1_1ObjectPtr.html">ObjectPtr</a>&lt; <a class="el" href="classtvm_1_1runtime_1_1Object.html">Object</a> &gt;&#160;</td>
+          <td class="paramname"><em>ptr</em></td><td>)</td>
+          <td></td>
         </tr>
       </table>
   </td>
   <td class="mlabels-right">
-<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
... 89166 lines suppressed ...