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/09/03 03:49:21 UTC

[incubator-tvm-site] branch asf-site updated: Docs build at Wed Sep 2 20:49:07 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 747d265  Docs build at Wed Sep  2 20:49:07 PDT 2020
747d265 is described below

commit 747d265664c05d8baf6395b1396cb5bdc86b5ece
Author: tqchen <tq...@octoml.ai>
AuthorDate: Wed Sep 2 20:49:07 2020 -0700

    Docs build at Wed Sep  2 20:49:07 PDT 2020
---
 .../use_pass_infra.ipynb}                          |   19 +-
 .../deploy_model_on_android.ipynb                  |    2 +-
 .../deploy_model_on_android.py                     |    2 +-
 .../deploy_detection.ipynb                         |  169 -
 .../deploy_ssd_gluoncv.ipynb                       |    6 +-
 .../use_pass_infra.py}                             |   80 +-
 .../deploy_ssd_gluoncv.py                          |   10 +-
 .../micro_tflite.ipynb                             |    2 +-
 .../deploy_detection.py                            |  330 --
 .../micro_tflite.py                                |    2 +-
 docs/_images/sphx_glr_deploy_detection_001.png     |  Bin 319717 -> 0 bytes
 docs/_images/sphx_glr_deploy_detection_thumb.png   |  Bin 121398 -> 0 bytes
 ...thumb.png => sphx_glr_use_pass_infra_thumb.png} |  Bin
 docs/_sources/contribute/code_guide.rst.txt        |   14 +
 docs/_sources/contribute/pull_request.rst.txt      |   16 +-
 docs/_sources/deploy/arm_compute_lib.rst.txt       |  149 +-
 docs/_sources/dev/hybrid_script.rst.txt            |    7 +
 docs/_sources/dev/index.rst.txt                    |    6 +-
 ...relay_pass_infra.rst.txt => pass_infra.rst.txt} |  283 +-
 docs/_sources/dev/relay_add_pass.rst.txt           |    6 +-
 docs/_sources/dev/virtual_machine.rst.txt          |    2 +-
 docs/_sources/install/docker.rst.txt               |   19 +-
 docs/_sources/install/from_source.rst.txt          |    7 -
 .../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/dev/low_level_custom_pass.rst.txt    |   16 +-
 .../tutorials/dev/sg_execution_times.rst.txt       |    6 +-
 ...y_pass_infra.rst.txt => use_pass_infra.rst.txt} |  304 +-
 .../frontend/deploy_model_on_android.rst.txt       |    4 +-
 .../tutorials/frontend/deploy_prequantized.rst.txt |   11 +-
 .../frontend/deploy_prequantized_tflite.rst.txt    |    4 +-
 .../tutorials/frontend/deploy_quantized.rst.txt    |    9 -
 .../tutorials/frontend/deploy_ssd_gluoncv.rst.txt  |   93 +-
 docs/_sources/tutorials/frontend/from_onnx.rst.txt |    4 +-
 .../tutorials/frontend/from_pytorch.rst.txt        |    9 -
 .../tutorials/frontend/from_tensorflow.rst.txt     |    2 -
 .../tutorials/frontend/sg_execution_times.rst.txt  |   38 +-
 .../tutorials/frontend/using_external_lib.rst.txt  |   22 +-
 .../get_started/cross_compilation_and_rpc.rst.txt  |    2 +-
 .../get_started/relay_quick_start.rst.txt          |    4 +-
 .../get_started/sg_execution_times.rst.txt         |    8 +-
 .../get_started/tensor_expr_get_started.rst.txt    |    6 +-
 docs/_sources/tutorials/index.rst.txt              |    8 +-
 .../tutorials/language/intrin_math.rst.txt         |   30 +-
 docs/_sources/tutorials/language/reduction.rst.txt |   50 +-
 docs/_sources/tutorials/language/scan.rst.txt      |   22 +-
 .../tutorials/language/schedule_primitives.rst.txt |   90 +-
 .../tutorials/language/sg_execution_times.rst.txt  |   18 +-
 docs/_sources/tutorials/language/tensorize.rst.txt |   36 +-
 .../tutorials/language/tuple_inputs.rst.txt        |   36 +-
 docs/_sources/tutorials/micro/micro_tflite.rst.txt |    2 +-
 .../tutorials/micro/sg_execution_times.rst.txt     |    4 +-
 .../tutorials/optimize/opt_conv_cuda.rst.txt       |    2 +-
 .../tutorials/optimize/opt_conv_tensorcore.rst.txt |   38 +-
 docs/_sources/tutorials/optimize/opt_gemm.rst.txt  |   82 +-
 .../tutorials/optimize/sg_execution_times.rst.txt  |   10 +-
 docs/_sources/tutorials/topi/intro_topi.rst.txt    |   46 +-
 .../tutorials/topi/sg_execution_times.rst.txt      |    4 +-
 .../tutorials/autotvm/sg_execution_times.rst.txt   |    4 +-
 .../vta/tutorials/autotvm/tune_relay_vta.rst.txt   |    2 +-
 .../frontend/deploy_classification.rst.txt         |    4 +-
 .../tutorials/frontend/deploy_detection.rst.txt    |  458 --
 .../tutorials/frontend/sg_execution_times.rst.txt  |    5 +-
 docs/_sources/vta/tutorials/index.rst.txt          |   20 -
 .../_sources/vta/tutorials/matrix_multiply.rst.txt |   42 +-
 .../vta/tutorials/optimize/convolution_opt.rst.txt |   42 +-
 .../tutorials/optimize/matrix_multiply_opt.rst.txt |   42 +-
 .../tutorials/optimize/sg_execution_times.rst.txt  |    6 +-
 .../vta/tutorials/sg_execution_times.rst.txt       |    6 +-
 .../_sources/vta/tutorials/vta_get_started.rst.txt |   22 +-
 docs/api/doxygen/algorithm_8h.html                 |    2 +-
 docs/api/doxygen/algorithm_8h__incl.svg            | 1462 ++---
 docs/api/doxygen/algorithm_8h_source.html          |    2 +-
 docs/api/doxygen/analyzer_8h.html                  |   12 +-
 docs/api/doxygen/analyzer_8h__incl.svg             | 1250 ++---
 docs/api/doxygen/analyzer_8h_source.html           |   59 +-
 docs/api/doxygen/annotated.html                    | 1260 ++---
 docs/api/doxygen/annotation_8h.html                |    2 +-
 docs/api/doxygen/annotation_8h__incl.svg           | 1128 ++--
 docs/api/doxygen/annotation_8h_source.html         |    2 +-
 docs/api/doxygen/array__utils_8h.html              |    2 +-
 docs/api/doxygen/array__utils_8h__incl.svg         | 1318 ++---
 docs/api/doxygen/attr__registry__map_8h.html       |    2 +-
 .../doxygen/attr__registry__map_8h__dep__incl.svg  |    6 +-
 docs/api/doxygen/attr__registry__map_8h__incl.svg  |  754 +--
 .../api/doxygen/attr__registry__map_8h_source.html |    4 +-
 docs/api/doxygen/auto__schedule_8h.html            |    8 +-
 docs/api/doxygen/auto__schedule_8h__incl.svg       | 1293 ++---
 docs/api/doxygen/auto__schedule_8h_source.html     |   22 +-
 docs/api/doxygen/auto__scheduler_2feature_8h.html  |  149 +
 .../doxygen/auto__scheduler_2feature_8h__incl.svg  | 1262 +++++
 .../auto__scheduler_2feature_8h_source.html        |  108 +
 docs/api/doxygen/autodiff_8h.html                  |    2 +-
 docs/api/doxygen/autodiff_8h__incl.svg             | 1344 ++---
 docs/api/doxygen/base_8h.html                      |    2 +-
 docs/api/doxygen/base_8h__dep__incl.svg            |    2 +-
 docs/api/doxygen/base_8h__incl.svg                 | 1202 ++--
 docs/api/doxygen/base_8h_source.html               |    4 +-
 docs/api/doxygen/batch__matmul_8h.html             |    2 +-
 docs/api/doxygen/batch__matmul_8h__incl.svg        | 1326 ++---
 docs/api/doxygen/batch__matmul_8h_source.html      |    4 +-
 docs/api/doxygen/bias__add_8h.html                 |    2 +-
 docs/api/doxygen/bias__add_8h__incl.svg            | 1292 ++---
 docs/api/doxygen/bitserial_8h.html                 |    2 +-
 docs/api/doxygen/bitserial_8h__incl.svg            | 1280 ++---
 docs/api/doxygen/bitserial_8h_source.html          |    2 +-
 docs/api/doxygen/bound_8h.html                     |    2 +-
 docs/api/doxygen/bound_8h__incl.svg                | 1258 ++---
 docs/api/doxygen/broadcast_8h.html                 |    2 +-
 docs/api/doxygen/broadcast_8h__incl.svg            | 1334 ++---
 docs/api/doxygen/buffer_8h.html                    |    2 +-
 docs/api/doxygen/buffer_8h__incl.svg               | 1102 ++--
 docs/api/doxygen/buffer_8h_source.html             |    2 +-
 docs/api/doxygen/builtin_8h.html                   |    2 +-
 docs/api/doxygen/builtin_8h__incl.svg              | 1372 ++---
 docs/api/doxygen/bytecode_8h_source.html           |    2 +-
 docs/api/doxygen/c__runtime__api_8h.html           |    2 +-
 docs/api/doxygen/c__runtime__api_8h__dep__incl.svg | 1455 +++--
 docs/api/doxygen/c__runtime__api_8h_source.html    |    2 +-
 docs/api/doxygen/classes.html                      |  327 +-
 docs/api/doxygen/classtvm_1_1BaseAttrsNode.html    |   10 +-
 .../classtvm_1_1BaseExprNode__inherit__graph.svg   |   31 +-
 .../classtvm_1_1BaseFuncNode__coll__graph.svg      |   25 +-
 .../doxygen/classtvm_1_1BaseTensorTypeNode.html    |    2 +-
 ...classtvm_1_1BaseTensorTypeNode__coll__graph.svg |   61 +-
 .../classtvm_1_1ConstructorNode__coll__graph.svg   |   25 +-
 docs/api/doxygen/classtvm_1_1Error.html            |    2 +-
 .../api/doxygen/classtvm_1_1Error__coll__graph.svg |   61 +-
 docs/api/doxygen/classtvm_1_1FuncTypeNode.html     |    2 +-
 .../classtvm_1_1FuncTypeNode__coll__graph.svg      |   63 +-
 .../classtvm_1_1GlobalTypeVarNode__coll__graph.svg |   25 +-
 .../classtvm_1_1GlobalVarNode__coll__graph.svg     |   25 +-
 .../doxygen/classtvm_1_1IncompleteTypeNode.html    |    2 +-
 ...classtvm_1_1IncompleteTypeNode__coll__graph.svg |   61 +-
 .../doxygen/classtvm_1_1OpNode__coll__graph.svg    |   25 +-
 docs/api/doxygen/classtvm_1_1PointerTypeNode.html  |    2 +-
 .../classtvm_1_1PointerTypeNode__coll__graph.svg   |   63 +-
 docs/api/doxygen/classtvm_1_1PrimExprNode.html     |    2 +-
 .../classtvm_1_1PrimExprNode__inherit__graph.svg   | 1025 ++--
 docs/api/doxygen/classtvm_1_1PrimTypeNode.html     |    2 +-
 .../classtvm_1_1PrimTypeNode__coll__graph.svg      |   59 +-
 .../classtvm_1_1RelayExprNode__coll__graph.svg     |   25 +-
 .../classtvm_1_1RelayExprNode__inherit__graph.svg  |   55 +-
 docs/api/doxygen/classtvm_1_1RelayRefTypeNode.html |    2 +-
 .../classtvm_1_1RelayRefTypeNode__coll__graph.svg  |   63 +-
 docs/api/doxygen/classtvm_1_1Span-members.html     |    5 +-
 docs/api/doxygen/classtvm_1_1Span.html             |   49 +-
 docs/api/doxygen/classtvm_1_1SpanNode-members.html |    4 +-
 docs/api/doxygen/classtvm_1_1SpanNode.html         |   48 +-
 .../doxygen/classtvm_1_1SpanNode__coll__graph.svg  |   74 +-
 .../classtvm_1_1SpanNode__inherit__graph.svg       |   38 +-
 docs/api/doxygen/classtvm_1_1Span__coll__graph.svg |   37 +-
 .../doxygen/classtvm_1_1Span__inherit__graph.svg   |   37 +-
 docs/api/doxygen/classtvm_1_1Target-members.html   |   11 +-
 docs/api/doxygen/classtvm_1_1Target.html           |   44 +-
 .../doxygen/classtvm_1_1TargetIdNode-members.html  |  120 -
 .../classtvm_1_1TargetIdNode__inherit__graph.svg   |   42 -
 ...rs.html => classtvm_1_1TargetKind-members.html} |   20 +-
 ..._1TargetId.html => classtvm_1_1TargetKind.html} |   90 +-
 ... => classtvm_1_1TargetKindAttrMap-members.html} |   20 +-
 ...Map.html => classtvm_1_1TargetKindAttrMap.html} |   60 +-
 ...classtvm_1_1TargetKindAttrMap__coll__graph.svg} |   38 +-
 ...sstvm_1_1TargetKindAttrMap__inherit__graph.svg} |   38 +-
 ...tml => classtvm_1_1TargetKindNode-members.html} |   32 +-
 ...IdNode.html => classtvm_1_1TargetKindNode.html} |  161 +-
 ...=> classtvm_1_1TargetKindNode__coll__graph.svg} |  190 +-
 .../classtvm_1_1TargetKindNode__inherit__graph.svg |   40 +
 ...=> classtvm_1_1TargetKindRegEntry-members.html} |   24 +-
 ...ry.html => classtvm_1_1TargetKindRegEntry.html} |  118 +-
 ...lasstvm_1_1TargetKindRegEntry__coll__graph.svg} |   20 +-
 ...svg => classtvm_1_1TargetKind__coll__graph.svg} |    8 +-
 ... => classtvm_1_1TargetKind__inherit__graph.svg} |    8 +-
 .../doxygen/classtvm_1_1TargetNode-members.html    |   21 +-
 docs/api/doxygen/classtvm_1_1TargetNode.html       |   76 +-
 .../classtvm_1_1TargetNode__coll__graph.svg        |  247 +-
 .../classtvm_1_1TargetNode__inherit__graph.svg     |   45 +-
 .../doxygen/classtvm_1_1Target__coll__graph.svg    |   39 +-
 .../doxygen/classtvm_1_1Target__inherit__graph.svg |   39 +-
 docs/api/doxygen/classtvm_1_1TensorTypeNode.html   |    2 +-
 .../classtvm_1_1TensorTypeNode__coll__graph.svg    |   61 +-
 docs/api/doxygen/classtvm_1_1TupleTypeNode.html    |    2 +-
 .../classtvm_1_1TupleTypeNode__coll__graph.svg     |   61 +-
 docs/api/doxygen/classtvm_1_1TypeCallNode.html     |    2 +-
 .../classtvm_1_1TypeCallNode__coll__graph.svg      |   63 +-
 .../doxygen/classtvm_1_1TypeConstraintNode.html    |    2 +-
 ...classtvm_1_1TypeConstraintNode__coll__graph.svg |   61 +-
 docs/api/doxygen/classtvm_1_1TypeDataNode.html     |    2 +-
 .../classtvm_1_1TypeDataNode__coll__graph.svg      |   81 +-
 docs/api/doxygen/classtvm_1_1TypeNode.html         |    2 +-
 .../doxygen/classtvm_1_1TypeNode__coll__graph.svg  |   61 +-
 docs/api/doxygen/classtvm_1_1TypeRelationNode.html |    2 +-
 .../classtvm_1_1TypeRelationNode__coll__graph.svg  |   63 +-
 .../classtvm_1_1TypeVarNode__coll__graph.svg       |   25 +-
 ..._1arith_1_1IntConstraintsTransform-members.html |    3 +-
 ...asstvm_1_1arith_1_1IntConstraintsTransform.html |   32 +-
 ...ith_1_1IntConstraintsTransform__coll__graph.svg |   39 +-
 ..._1_1IntConstraintsTransform__inherit__graph.svg |   39 +-
 ...1auto__scheduler_1_1AccessAnalyzer-members.html |    2 +-
 ...sstvm_1_1auto__scheduler_1_1AccessAnalyzer.html |   10 +-
 ...o__scheduler_1_1AccessAnalyzerNode-members.html |    2 +-
 ...m_1_1auto__scheduler_1_1AccessAnalyzerNode.html |   12 +-
 ...cheduler_1_1AccessAnalyzerNode__coll__graph.svg |    2 +-
 ...duler_1_1AccessAnalyzerNode__inherit__graph.svg |    2 +-
 ...o__scheduler_1_1AccessAnalyzer__coll__graph.svg |    2 +-
 ...scheduler_1_1AccessAnalyzer__inherit__graph.svg |    2 +-
 ...m_1_1auto__scheduler_1_1ComputeDAG-members.html |    9 +-
 .../classtvm_1_1auto__scheduler_1_1ComputeDAG.html |   33 +-
 ...o__scheduler_1_1ComputeDAGNode__coll__graph.svg |    2 +-
 ...1auto__scheduler_1_1ComputeDAG__coll__graph.svg |   43 +-
 ...to__scheduler_1_1ComputeDAG__inherit__graph.svg |   43 +-
 ...m_1_1auto__scheduler_1_1CostModel-members.html} |    9 +-
 ... classtvm_1_1auto__scheduler_1_1CostModel.html} |   40 +-
 ...1auto__scheduler_1_1CostModelNode-members.html} |   13 +-
 ...asstvm_1_1auto__scheduler_1_1CostModelNode.html |  352 ++
 ...to__scheduler_1_1CostModelNode__coll__graph.svg |   40 +
 ..._scheduler_1_1CostModelNode__inherit__graph.svg |   85 +
 ...1auto__scheduler_1_1CostModel__coll__graph.svg} |    6 +-
 ...uto__scheduler_1_1CostModel__inherit__graph.svg |   80 +
 ...cheduler_1_1PreloadMeasuredStates-members.html} |   11 +-
 ...1auto__scheduler_1_1PreloadMeasuredStates.html} |   94 +-
 ...uler_1_1PreloadMeasuredStatesNode-members.html} |   13 +-
 ...o__scheduler_1_1PreloadMeasuredStatesNode.html} |   83 +-
 ...r_1_1PreloadMeasuredStatesNode__coll__graph.svg |  153 +
 ..._1PreloadMeasuredStatesNode__inherit__graph.svg |   58 +
 ...duler_1_1PreloadMeasuredStates__coll__graph.svg |   58 +
 ...er_1_1PreloadMeasuredStates__inherit__graph.svg |   58 +
 ...to__scheduler_1_1PythonBasedModel-members.html} |   11 +-
 ...vm_1_1auto__scheduler_1_1PythonBasedModel.html} |   79 +-
 ...scheduler_1_1PythonBasedModelNode-members.html} |   22 +-
 ...1_1auto__scheduler_1_1PythonBasedModelNode.html |  413 ++
 ...eduler_1_1PythonBasedModelNode__coll__graph.svg |   78 +
 ...ler_1_1PythonBasedModelNode__inherit__graph.svg |   64 +
 ..._scheduler_1_1PythonBasedModel__coll__graph.svg |   58 +
 ...heduler_1_1PythonBasedModel__inherit__graph.svg |   58 +
 ...1_1auto__scheduler_1_1RandomModel-members.html} |   14 +-
 ...classtvm_1_1auto__scheduler_1_1RandomModel.html |  242 +
 ...uto__scheduler_1_1RandomModelNode-members.html} |   20 +-
 ...stvm_1_1auto__scheduler_1_1RandomModelNode.html |  320 ++
 ...__scheduler_1_1RandomModelNode__coll__graph.svg |   76 +
 ...cheduler_1_1RandomModelNode__inherit__graph.svg |   61 +
 ...auto__scheduler_1_1RandomModel__coll__graph.svg |   60 +
 ...o__scheduler_1_1RandomModel__inherit__graph.svg |   60 +
 ...sstvm_1_1auto__scheduler_1_1SearchCallback.html |    2 +-
 ...m_1_1auto__scheduler_1_1SearchCallbackNode.html |    4 +-
 ...duler_1_1SearchCallbackNode__inherit__graph.svg |   56 +-
 ...scheduler_1_1SearchCallback__inherit__graph.svg |   56 +-
 ...uto__scheduler_1_1SearchPolicyNode-members.html |   19 +-
 ...tvm_1_1auto__scheduler_1_1SearchPolicyNode.html |  106 +-
 ..._scheduler_1_1SearchPolicyNode__coll__graph.svg |   89 +-
 ...heduler_1_1SearchPolicyNode__inherit__graph.svg |   51 +-
 ...o__scheduler_1_1SearchTaskNode__coll__graph.svg |   64 +-
 ..._1auto__scheduler_1_1SplitStepNode-members.html |    2 +-
 ...asstvm_1_1auto__scheduler_1_1SplitStepNode.html |   12 +-
 ...to__scheduler_1_1SplitStepNode__coll__graph.svg |   76 +-
 ..._1auto__scheduler_1_1TuningOptions-members.html |    2 +-
 ...asstvm_1_1auto__scheduler_1_1TuningOptions.html |   17 +-
 ...to__scheduler_1_1TuningOptionsNode-members.html |    9 +-
 ...vm_1_1auto__scheduler_1_1TuningOptionsNode.html |   21 +-
 ...scheduler_1_1TuningOptionsNode__coll__graph.svg |  164 +-
 ...eduler_1_1TuningOptionsNode__inherit__graph.svg |   47 +-
 ...> classtvm_1_1parser_1_1SourceMap-members.html} |   11 +-
 ...n.html => classtvm_1_1parser_1_1SourceMap.html} |   85 +-
 ...asstvm_1_1parser_1_1SourceMapNode-members.html} |   16 +-
 ...ml => classtvm_1_1parser_1_1SourceMapNode.html} |  104 +-
 ...tvm_1_1parser_1_1SourceMapNode__coll__graph.svg |   81 +
 ..._1_1parser_1_1SourceMapNode__inherit__graph.svg |   39 +
 ...asstvm_1_1parser_1_1SourceMap__coll__graph.svg} |   20 +-
 ...tvm_1_1parser_1_1SourceMap__inherit__graph.svg} |   20 +-
 .../doxygen/classtvm_1_1relay_1_1Call-members.html |    2 +-
 docs/api/doxygen/classtvm_1_1relay_1_1Call.html    |   17 +-
 .../classtvm_1_1relay_1_1CallNode__coll__graph.svg |   25 +-
 .../classtvm_1_1relay_1_1Constant-members.html     |    2 +-
 .../api/doxygen/classtvm_1_1relay_1_1Constant.html |   21 +-
 ...sstvm_1_1relay_1_1ConstantNode__coll__graph.svg |   25 +-
 .../classtvm_1_1relay_1_1ExprVisitor-members.html  |    3 +-
 .../doxygen/classtvm_1_1relay_1_1ExprVisitor.html  |   26 +
 ...asstvm_1_1relay_1_1ExprVisitor__coll__graph.svg |    2 +-
 ...tvm_1_1relay_1_1ExprVisitor__inherit__graph.svg |    2 +-
 .../classtvm_1_1relay_1_1FeatureSet-members.html   |    1 +
 .../doxygen/classtvm_1_1relay_1_1FeatureSet.html   |   26 +-
 ...lasstvm_1_1relay_1_1FeatureSet__coll__graph.svg |   33 +-
 .../classtvm_1_1relay_1_1Function-members.html     |    2 +-
 .../api/doxygen/classtvm_1_1relay_1_1Function.html |   17 +-
 ...sstvm_1_1relay_1_1FunctionNode__coll__graph.svg |   25 +-
 .../doxygen/classtvm_1_1relay_1_1If-members.html   |    2 +-
 docs/api/doxygen/classtvm_1_1relay_1_1If.html      |   17 +-
 .../classtvm_1_1relay_1_1IfNode__coll__graph.svg   |   25 +-
 .../doxygen/classtvm_1_1relay_1_1Let-members.html  |    2 +-
 docs/api/doxygen/classtvm_1_1relay_1_1Let.html     |   17 +-
 .../classtvm_1_1relay_1_1LetNode__coll__graph.svg  |   25 +-
 .../classtvm_1_1relay_1_1Match-members.html        |    2 +-
 docs/api/doxygen/classtvm_1_1relay_1_1Match.html   |   17 +-
 ...classtvm_1_1relay_1_1MatchNode__coll__graph.svg |   25 +-
 ...sstvm_1_1relay_1_1MixedModeVisitor-members.html |    3 +-
 .../classtvm_1_1relay_1_1MixedModeVisitor.html     |    2 +
 ...m_1_1relay_1_1MixedModeVisitor__coll__graph.svg |    2 +-
 ..._1relay_1_1MixedModeVisitor__inherit__graph.svg |    2 +-
 ...lasstvm_1_1relay_1_1PatternConstructorNode.html |    2 +-
 ...elay_1_1PatternConstructorNode__coll__graph.svg |   81 +-
 .../doxygen/classtvm_1_1relay_1_1PatternNode.html  |    2 +-
 ...asstvm_1_1relay_1_1PatternNode__coll__graph.svg |   61 +-
 .../classtvm_1_1relay_1_1PatternTupleNode.html     |    2 +-
 ...m_1_1relay_1_1PatternTupleNode__coll__graph.svg |   61 +-
 .../classtvm_1_1relay_1_1PatternVarNode.html       |    2 +-
 ...tvm_1_1relay_1_1PatternVarNode__coll__graph.svg |   81 +-
 .../classtvm_1_1relay_1_1PatternWildcardNode.html  |    2 +-
 ..._1relay_1_1PatternWildcardNode__coll__graph.svg |   61 +-
 .../classtvm_1_1relay_1_1RefCreate-members.html    |    2 +-
 .../doxygen/classtvm_1_1relay_1_1RefCreate.html    |   21 +-
 ...stvm_1_1relay_1_1RefCreateNode__coll__graph.svg |   25 +-
 .../classtvm_1_1relay_1_1RefRead-members.html      |    2 +-
 docs/api/doxygen/classtvm_1_1relay_1_1RefRead.html |   21 +-
 ...asstvm_1_1relay_1_1RefReadNode__coll__graph.svg |   25 +-
 .../classtvm_1_1relay_1_1RefWrite-members.html     |    2 +-
 .../api/doxygen/classtvm_1_1relay_1_1RefWrite.html |   17 +-
 .../classtvm_1_1relay_1_1RefWriteNode-members.html |   21 +-
 .../doxygen/classtvm_1_1relay_1_1RefWriteNode.html |   44 +-
 ...sstvm_1_1relay_1_1RefWriteNode__coll__graph.svg |  200 +-
 ...vm_1_1relay_1_1RefWriteNode__inherit__graph.svg |   99 +-
 .../doxygen/classtvm_1_1relay_1_1RelayNode.html    |    2 +-
 ...classtvm_1_1relay_1_1RelayNode__coll__graph.svg |   61 +-
 ...sstvm_1_1relay_1_1TempExprNode__coll__graph.svg |   25 +-
 .../classtvm_1_1relay_1_1Tuple-members.html        |    2 +-
 docs/api/doxygen/classtvm_1_1relay_1_1Tuple.html   |   21 +-
 .../classtvm_1_1relay_1_1TupleGetItem-members.html |    2 +-
 .../doxygen/classtvm_1_1relay_1_1TupleGetItem.html |   17 +-
 ...m_1_1relay_1_1TupleGetItemNode__coll__graph.svg |   25 +-
 ...classtvm_1_1relay_1_1TupleNode__coll__graph.svg |   25 +-
 .../doxygen/classtvm_1_1relay_1_1Var-members.html  |    4 +-
 docs/api/doxygen/classtvm_1_1relay_1_1Var.html     |   34 +-
 .../classtvm_1_1relay_1_1VarNode-members.html      |    2 -
 docs/api/doxygen/classtvm_1_1relay_1_1VarNode.html |   80 +-
 .../classtvm_1_1relay_1_1VarNode__coll__graph.svg  |  189 +-
 ...lasstvm_1_1relay_1_1VarNode__inherit__graph.svg |  100 +-
 .../classtvm_1_1runtime_1_1String-members.html     |    2 +-
 .../api/doxygen/classtvm_1_1runtime_1_1String.html |   13 +-
 .../classtvm_1_1runtime_1_1TVMArgValue.html        |    8 +-
 ...stvm_1_1runtime_1_1TVMArgValue__coll__graph.svg |   14 +-
 ...m_1_1runtime_1_1TVMArgValue__inherit__graph.svg |   14 +-
 ...lasstvm_1_1runtime_1_1TVMMovableArgValue__.html |    8 +-
 ...untime_1_1TVMMovableArgValue____coll__graph.svg |   14 +-
 ...ime_1_1TVMMovableArgValue____inherit__graph.svg |   14 +-
 ...1_1runtime_1_1TVMPODValue____inherit__graph.svg |   14 +-
 ...1_1TypedPackedFunc_3_01R_07Args_8_8_8_08_4.html |    8 +-
 ...lasstvm_1_1tir_1_1PrimFuncNode__coll__graph.svg |   25 +-
 .../doxygen/classtvm_1_1tir_1_1Reduce-members.html |    2 +-
 docs/api/doxygen/classtvm_1_1tir_1_1Reduce.html    |   14 +-
 .../classtvm_1_1tir_1_1ReduceNode-members.html     |   17 +-
 .../api/doxygen/classtvm_1_1tir_1_1ReduceNode.html |   21 +-
 .../classtvm_1_1tir_1_1ReduceNode__coll__graph.svg |  237 +-
 ...asstvm_1_1tir_1_1ReduceNode__inherit__graph.svg |   81 +-
 docs/api/doxygen/codegen_8h.html                   |    8 +-
 docs/api/doxygen/codegen_8h__incl.svg              | 2000 ++++---
 docs/api/doxygen/codegen_8h_source.html            |    8 +-
 docs/api/doxygen/compute__dag_8h.html              |    4 +-
 docs/api/doxygen/compute__dag_8h__dep__incl.svg    |  140 +-
 docs/api/doxygen/compute__dag_8h__incl.svg         | 1741 +++---
 docs/api/doxygen/compute__dag_8h_source.html       |    6 +-
 docs/api/doxygen/constant__utils_8h.html           |    2 +-
 docs/api/doxygen/constant__utils_8h__incl.svg      | 1396 ++---
 docs/api/doxygen/constant__utils_8h_source.html    |    7 +-
 .../{search__task_8h.html => cost__model_8h.html}  |   47 +-
 docs/api/doxygen/cost__model_8h__incl.svg          | 1219 ++++
 docs/api/doxygen/cost__model_8h_source.html        |  127 +
 docs/api/doxygen/cublas_8h.html                    |    2 +-
 docs/api/doxygen/cublas_8h__incl.svg               | 1320 ++---
 docs/api/doxygen/cublas_8h_source.html             |    2 +-
 docs/api/doxygen/cuda_2dense_8h.html               |    2 +-
 docs/api/doxygen/cuda_2dense_8h__incl.svg          | 1969 +++----
 docs/api/doxygen/cuda_2dense_8h_source.html        |   12 +-
 docs/api/doxygen/cuda_2injective_8h.html           |    2 +-
 docs/api/doxygen/cuda_2injective_8h__incl.svg      | 1820 +++---
 docs/api/doxygen/cuda_2injective_8h_source.html    |    6 +-
 docs/api/doxygen/cuda_2normalization_8h.html       |    2 +-
 docs/api/doxygen/cuda_2normalization_8h__incl.svg  | 1812 +++---
 .../api/doxygen/cuda_2normalization_8h_source.html |    4 +-
 docs/api/doxygen/cuda_2pooling_8h.html             |    2 +-
 docs/api/doxygen/cuda_2pooling_8h__incl.svg        | 1832 +++---
 docs/api/doxygen/cuda_2pooling_8h_source.html      |    8 +-
 docs/api/doxygen/cuda_2reduction_8h.html           |    2 +-
 docs/api/doxygen/cuda_2reduction_8h__incl.svg      | 1820 +++---
 docs/api/doxygen/cuda_2reduction_8h_source.html    |   16 +-
 docs/api/doxygen/cuda_2softmax_8h.html             |    2 +-
 docs/api/doxygen/cuda_2softmax_8h__incl.svg        | 1820 +++---
 docs/api/doxygen/cuda_2softmax_8h_source.html      |    6 +-
 docs/api/doxygen/data__layout_8h.html              |    2 +-
 docs/api/doxygen/data__layout_8h__incl.svg         | 1348 ++---
 docs/api/doxygen/data__layout_8h_source.html       |    4 +-
 docs/api/doxygen/data__type_8h.html                |    2 +-
 docs/api/doxygen/data__type_8h__dep__incl.svg      | 1056 ++--
 docs/api/doxygen/dataflow__matcher_8h.html         |    2 +-
 docs/api/doxygen/dataflow__matcher_8h__incl.svg    | 1426 ++---
 docs/api/doxygen/dataflow__pattern_8h.html         |    2 +-
 docs/api/doxygen/dataflow__pattern_8h__incl.svg    | 1454 ++---
 docs/api/doxygen/dataflow__pattern_8h_source.html  |    2 +-
 .../api/doxygen/dataflow__pattern__functor_8h.html |    2 +-
 .../dataflow__pattern__functor_8h__incl.svg        | 1456 ++---
 docs/api/doxygen/debug_8h.html                     |    2 +-
 docs/api/doxygen/debug_8h__incl.svg                | 1148 ++--
 docs/api/doxygen/debug_8h_source.html              |    2 +-
 docs/api/doxygen/detail_2broadcast_8h.html         |    2 +-
 docs/api/doxygen/detail_2broadcast_8h__incl.svg    | 1344 ++---
 docs/api/doxygen/detail_2broadcast_8h_source.html  |    6 +-
 docs/api/doxygen/detail_2extern_8h.html            |    2 +-
 docs/api/doxygen/detail_2extern_8h__incl.svg       | 1338 ++---
 docs/api/doxygen/detail_2extern_8h_source.html     |    4 +-
 docs/api/doxygen/device__api_8h.html               |    2 +-
 docs/api/doxygen/device__api_8h__incl.svg          |  722 +--
 docs/api/doxygen/device__api_8h_source.html        |    2 +-
 docs/api/doxygen/device__copy_8h.html              |    2 +-
 docs/api/doxygen/device__copy_8h__incl.svg         | 1128 ++--
 docs/api/doxygen/device__copy_8h_source.html       |    2 +-
 docs/api/doxygen/dilate_8h.html                    |    2 +-
 docs/api/doxygen/dilate_8h__incl.svg               | 1298 ++---
 docs/api/doxygen/dilate_8h_source.html             |   10 +-
 ...r_000002_000005.html => dir_000002_000006.html} |    0
 docs/api/doxygen/dir_000003_000009.html            |    2 +-
 docs/api/doxygen/dir_000003_000013.html            |    2 +-
 ...r_000006_000005.html => dir_000004_000006.html} |    2 +-
 ...r_000006_000008.html => dir_000004_000008.html} |    0
 docs/api/doxygen/dir_000004_000009.html            |    6 +-
 ...r_000006_000011.html => dir_000004_000011.html} |    0
 ...r_000006_000020.html => dir_000004_000013.html} |    4 +-
 docs/api/doxygen/dir_000004_000019.html            |    6 +-
 docs/api/doxygen/dir_000004_000020.html            |    6 +-
 docs/api/doxygen/dir_000005_000006.html            |    6 +-
 docs/api/doxygen/dir_000005_000009.html            |    6 +-
 docs/api/doxygen/dir_000005_000013.html            |   90 -
 docs/api/doxygen/dir_000005_000018.html            |    6 +-
 ...r_000004_000019.html => dir_000005_000019.html} |    0
 ...r_000004_000020.html => dir_000005_000020.html} |    0
 ...r_000005_000006.html => dir_000006_000004.html} |    0
 docs/api/doxygen/dir_000006_000009.html            |    6 +-
 docs/api/doxygen/dir_000006_000013.html            |    6 +-
 ...r_000005_000018.html => dir_000006_000018.html} |    0
 docs/api/doxygen/dir_000006_000019.html            |   90 -
 ...r_000007_000005.html => dir_000007_000006.html} |    0
 ...r_000008_000005.html => dir_000008_000006.html} |    0
 ...r_000011_000005.html => dir_000011_000006.html} |    0
 ...r_000012_000005.html => dir_000012_000006.html} |    0
 ...r_000004_000005.html => dir_000014_000006.html} |    6 +-
 docs/api/doxygen/dir_000014_000009.html            |    2 +-
 ...r_000004_000018.html => dir_000018_000009.html} |    6 +-
 ...r_000019_000005.html => dir_000019_000006.html} |    2 +-
 docs/api/doxygen/dir_000019_000009.html            |    2 +-
 docs/api/doxygen/dir_000019_000013.html            |    2 +-
 docs/api/doxygen/dir_000019_000018.html            |    2 +-
 .../dir_02be2c9d68e402f80df60bd528724ee5.html      |    2 +-
 .../dir_02be2c9d68e402f80df60bd528724ee5_dep.svg   |  133 +-
 .../dir_194ecda214f05a38134392ac6a69b970_dep.svg   |    8 +-
 .../dir_519be2d4a83a987dbf989f1de527b870_dep.svg   |    2 +-
 .../dir_5da96592f3a7c442b838b075c58254c2.html      |    8 +-
 .../dir_5da96592f3a7c442b838b075c58254c2_dep.svg   |  125 +-
 .../dir_63946bee875c6d52bce55e72a67a86ad.html      |    4 +-
 .../dir_63946bee875c6d52bce55e72a67a86ad_dep.svg   |   24 +-
 .../dir_72c2f11201cd7636dc7624de0754daa5_dep.svg   |    6 +-
 .../dir_8e4e25e66b8623d88c5b5dd2040bca97_dep.svg   |   10 +-
 .../dir_a98464176f1216e334ac3bbacd433085.html      |    6 +
 .../dir_a98464176f1216e334ac3bbacd433085_dep.svg   |    8 +-
 .../dir_b4c7d8e826c599ba55146c099a14beb5.html      |    2 +-
 .../dir_b4c7d8e826c599ba55146c099a14beb5_dep.svg   |  406 +-
 .../dir_d523279167051dc3aad9a40981221f4d_dep.svg   |    4 +-
 .../dir_dc867ff9a37cad1764f1670dc7eba6c1.html      |    2 +-
 .../dir_dc867ff9a37cad1764f1670dc7eba6c1_dep.svg   |   89 +-
 .../dir_f97d855a3173728370e632aa77170e34.html      |    2 +-
 .../dir_f97d855a3173728370e632aa77170e34_dep.svg   |  109 +-
 .../dir_fafc18f54a755f417c55c769623cbfef.html      |    5 +-
 .../dir_fafc18f54a755f417c55c769623cbfef_dep.svg   |   52 +-
 .../dir_fb1b1bc11a768ab8cf63a96a73170118.html      |    9 +
 ...> dir_fb1b1bc11a768ab8cf63a96a73170118_dep.svg} |   20 +-
 docs/api/doxygen/driver__api_8h.html               |    2 +-
 docs/api/doxygen/driver__api_8h__incl.svg          | 1995 ++++---
 docs/api/doxygen/elemwise_8h.html                  |    2 +-
 docs/api/doxygen/elemwise_8h__incl.svg             | 1248 ++---
 docs/api/doxygen/elemwise_8h_source.html           |    8 +-
 docs/api/doxygen/env__func_8h.html                 |    2 +-
 docs/api/doxygen/env__func_8h__dep__incl.svg       |    2 +-
 docs/api/doxygen/env__func_8h__incl.svg            |  904 +--
 docs/api/doxygen/env__func_8h_source.html          |    6 +-
 docs/api/doxygen/error_8h.html                     |    4 +-
 docs/api/doxygen/error_8h__dep__incl.svg           |  699 ++-
 docs/api/doxygen/error_8h__incl.svg                | 1264 ++---
 docs/api/doxygen/error_8h_source.html              |    2 +-
 docs/api/doxygen/executable_8h.html                |    2 +-
 docs/api/doxygen/executable_8h__incl.svg           |  622 ++-
 docs/api/doxygen/executable_8h_source.html         |    2 +-
 docs/api/doxygen/feature_8h__incl.svg              | 1373 -----
 docs/api/doxygen/feature_8h_source.html            |  138 -
 docs/api/doxygen/files.html                        |   24 +-
 docs/api/doxygen/flatten_8h.html                   |    2 +-
 docs/api/doxygen/flatten_8h__incl.svg              | 1352 ++---
 docs/api/doxygen/flatten_8h_source.html            |    2 +-
 docs/api/doxygen/functions.html                    |    7 +-
 docs/api/doxygen/functions_a.html                  |   21 +-
 docs/api/doxygen/functions_c.html                  |   19 +-
 docs/api/doxygen/functions_d.html                  |    6 +-
 docs/api/doxygen/functions_e.html                  |   14 +-
 docs/api/doxygen/functions_f.html                  |   10 +-
 docs/api/doxygen/functions_func_a.html             |   11 +-
 docs/api/doxygen/functions_func_c.html             |    7 +-
 docs/api/doxygen/functions_func_e.html             |    5 +-
 docs/api/doxygen/functions_func_f.html             |   11 +-
 docs/api/doxygen/functions_func_g.html             |    9 +-
 docs/api/doxygen/functions_func_i.html             |    8 +-
 docs/api/doxygen/functions_func_l.html             |    2 +-
 docs/api/doxygen/functions_func_m.html             |   11 +-
 docs/api/doxygen/functions_func_o.html             |   30 +-
 docs/api/doxygen/functions_func_p.html             |   21 +-
 docs/api/doxygen/functions_func_r.html             |   22 +-
 docs/api/doxygen/functions_func_s.html             |   28 +-
 docs/api/doxygen/functions_func_t.html             |   44 +-
 docs/api/doxygen/functions_func_u.html             |    5 +-
 docs/api/doxygen/functions_func_v.html             |   30 +-
 docs/api/doxygen/functions_g.html                  |    7 +-
 docs/api/doxygen/functions_i.html                  |   22 +-
 docs/api/doxygen/functions_k.html                  |    2 +
 docs/api/doxygen/functions_l.html                  |    9 +-
 docs/api/doxygen/functions_m.html                  |   11 +-
 docs/api/doxygen/functions_n.html                  |    5 +-
 docs/api/doxygen/functions_o.html                  |   26 +-
 docs/api/doxygen/functions_p.html                  |   34 +-
 docs/api/doxygen/functions_r.html                  |   27 +-
 docs/api/doxygen/functions_rela.html               |   30 +-
 docs/api/doxygen/functions_s.html                  |   49 +-
 docs/api/doxygen/functions_t.html                  |   62 +-
 docs/api/doxygen/functions_type.html               |    5 +-
 docs/api/doxygen/functions_u.html                  |    9 +
 docs/api/doxygen/functions_v.html                  |   40 +-
 docs/api/doxygen/functions_vars.html               |    7 +-
 docs/api/doxygen/functions_vars_a.html             |    4 +
 docs/api/doxygen/functions_vars_c.html             |    3 -
 docs/api/doxygen/functions_vars_d.html             |    4 +-
 docs/api/doxygen/functions_vars_e.html             |    9 +-
 docs/api/doxygen/functions_vars_f.html             |    1 +
 docs/api/doxygen/functions_vars_i.html             |    8 +-
 docs/api/doxygen/functions_vars_k.html             |    2 +
 docs/api/doxygen/functions_vars_l.html             |    3 +
 docs/api/doxygen/functions_vars_n.html             |    5 +-
 docs/api/doxygen/functions_vars_p.html             |   11 +-
 docs/api/doxygen/functions_vars_r.html             |    3 +
 docs/api/doxygen/functions_vars_s.html             |   15 +-
 docs/api/doxygen/functions_vars_u.html             |    6 +
 docs/api/doxygen/functor_8h.html                   |    2 +-
 docs/api/doxygen/functor_8h__dep__incl.svg         | 1230 ++--
 docs/api/doxygen/fuse_8h.html                      |    2 +-
 docs/api/doxygen/fuse_8h__incl.svg                 | 1318 ++---
 docs/api/doxygen/generic_2default_8h.html          |    2 +-
 docs/api/doxygen/generic_2default_8h__incl.svg     | 1820 +++---
 docs/api/doxygen/generic_2default_8h_source.html   |    6 +-
 docs/api/doxygen/generic_2extern_8h.html           |    2 +-
 docs/api/doxygen/generic_2extern_8h__incl.svg      | 1854 ++++---
 docs/api/doxygen/generic_2extern_8h_source.html    |    6 +-
 docs/api/doxygen/generic_2injective_8h.html        |    2 +-
 docs/api/doxygen/generic_2injective_8h__incl.svg   | 1820 +++---
 docs/api/doxygen/generic_2injective_8h_source.html |    6 +-
 docs/api/doxygen/generic__func_8h.html             |    2 +-
 docs/api/doxygen/generic__func_8h__incl.svg        | 1889 +++----
 docs/api/doxygen/generic__func_8h_source.html      |    8 +-
 docs/api/doxygen/globals_defs.html                 |    8 +-
 docs/api/doxygen/globals_t.html                    |    8 +-
 docs/api/doxygen/graph__runtime_8h_source.html     |    2 +-
 docs/api/doxygen/hierarchy.html                    | 1455 ++---
 docs/api/doxygen/image_8h.html                     |    2 +-
 docs/api/doxygen/image_8h__incl.svg                | 1280 ++---
 docs/api/doxygen/image_8h_source.html              |    4 +-
 docs/api/doxygen/inherit_graph_100.svg             |   15 +-
 docs/api/doxygen/inherit_graph_101.svg             |   17 +-
 docs/api/doxygen/inherit_graph_102.svg             |   15 +-
 docs/api/doxygen/inherit_graph_103.svg             |   17 +-
 docs/api/doxygen/inherit_graph_104.svg             |   12 +-
 docs/api/doxygen/inherit_graph_105.svg             |   12 +-
 docs/api/doxygen/inherit_graph_106.svg             |   17 +-
 docs/api/doxygen/inherit_graph_107.svg             |   15 +-
 docs/api/doxygen/inherit_graph_108.svg             |   17 +-
 docs/api/doxygen/inherit_graph_109.svg             |   16 +-
 docs/api/doxygen/inherit_graph_110.svg             |   14 +-
 docs/api/doxygen/inherit_graph_111.svg             |   17 +-
 docs/api/doxygen/inherit_graph_112.svg             |   15 +-
 docs/api/doxygen/inherit_graph_113.svg             |   15 +-
 docs/api/doxygen/inherit_graph_114.svg             |   54 +-
 docs/api/doxygen/inherit_graph_115.svg             |   18 +-
 docs/api/doxygen/inherit_graph_116.svg             |   55 +-
 docs/api/doxygen/inherit_graph_117.svg             |   19 +-
 docs/api/doxygen/inherit_graph_118.svg             |   19 +-
 docs/api/doxygen/inherit_graph_119.svg             |   18 +-
 docs/api/doxygen/inherit_graph_12.svg              |   24 +-
 docs/api/doxygen/inherit_graph_120.svg             |   18 +-
 docs/api/doxygen/inherit_graph_121.svg             |   17 +-
 docs/api/doxygen/inherit_graph_122.svg             |   12 +-
 docs/api/doxygen/inherit_graph_123.svg             |   12 +-
 docs/api/doxygen/inherit_graph_124.svg             |   15 +-
 docs/api/doxygen/inherit_graph_125.svg             |   12 +-
 docs/api/doxygen/inherit_graph_126.svg             |   15 +-
 docs/api/doxygen/inherit_graph_127.svg             |   15 +-
 docs/api/doxygen/inherit_graph_128.svg             |   12 +-
 docs/api/doxygen/inherit_graph_129.svg             |   14 +-
 docs/api/doxygen/inherit_graph_130.svg             |   12 +-
 docs/api/doxygen/inherit_graph_131.svg             |   15 +-
 docs/api/doxygen/inherit_graph_132.svg             |   12 +-
 docs/api/doxygen/inherit_graph_133.svg             |   12 +-
 docs/api/doxygen/inherit_graph_134.svg             |   15 +-
 docs/api/doxygen/inherit_graph_135.svg             |   16 +-
 docs/api/doxygen/inherit_graph_136.svg             |   15 +-
 docs/api/doxygen/inherit_graph_137.svg             |   17 +-
 docs/api/doxygen/inherit_graph_138.svg             |   15 +-
 docs/api/doxygen/inherit_graph_139.svg             |   14 +-
 docs/api/doxygen/inherit_graph_140.svg             |   69 +-
 docs/api/doxygen/inherit_graph_141.svg             |   69 +-
 docs/api/doxygen/inherit_graph_142.svg             |   72 +-
 docs/api/doxygen/inherit_graph_143.svg             |   69 +-
 docs/api/doxygen/inherit_graph_144.svg             |   18 +-
 docs/api/doxygen/inherit_graph_145.svg             |   14 +-
 docs/api/doxygen/inherit_graph_146.svg             |   28 +-
 docs/api/doxygen/inherit_graph_147.svg             |   27 +-
 docs/api/doxygen/inherit_graph_148.svg             |   28 +-
 docs/api/doxygen/inherit_graph_149.svg             |   28 +-
 docs/api/doxygen/inherit_graph_15.svg              |    4 +-
 docs/api/doxygen/inherit_graph_150.svg             |   12 +-
 docs/api/doxygen/inherit_graph_151.svg             |   12 +-
 docs/api/doxygen/inherit_graph_152.svg             |   12 +-
 docs/api/doxygen/inherit_graph_153.svg             |   12 +-
 docs/api/doxygen/inherit_graph_154.svg             |   12 +-
 docs/api/doxygen/inherit_graph_155.svg             |   12 +-
 docs/api/doxygen/inherit_graph_156.svg             |   12 +-
 docs/api/doxygen/inherit_graph_157.svg             |   12 +-
 docs/api/doxygen/inherit_graph_158.svg             |   12 +-
 ...inherit_graph_157.svg => inherit_graph_159.svg} |    0
 ...inherit_graph_158.svg => inherit_graph_160.svg} |    0
 docs/api/doxygen/inherit_graph_18.svg              |    4 +-
 docs/api/doxygen/inherit_graph_19.svg              |   41 +-
 docs/api/doxygen/inherit_graph_20.svg              |   37 +-
 docs/api/doxygen/inherit_graph_21.svg              |   25 +-
 docs/api/doxygen/inherit_graph_22.svg              |   12 +-
 docs/api/doxygen/inherit_graph_23.svg              |   12 +-
 docs/api/doxygen/inherit_graph_24.svg              |   12 +-
 docs/api/doxygen/inherit_graph_25.svg              |   15 +-
 docs/api/doxygen/inherit_graph_26.svg              |   14 +-
 docs/api/doxygen/inherit_graph_27.svg              |   15 +-
 docs/api/doxygen/inherit_graph_28.svg              |   12 +-
 docs/api/doxygen/inherit_graph_29.svg              |   15 +-
 docs/api/doxygen/inherit_graph_30.svg              |   15 +-
 docs/api/doxygen/inherit_graph_31.svg              |   15 +-
 docs/api/doxygen/inherit_graph_32.svg              |   14 +-
 docs/api/doxygen/inherit_graph_33.svg              |    4 +-
 docs/api/doxygen/inherit_graph_34.svg              |   14 +-
 docs/api/doxygen/inherit_graph_35.svg              |    4 +-
 docs/api/doxygen/inherit_graph_36.svg              |   54 +-
 docs/api/doxygen/inherit_graph_37.svg              |   54 +-
 docs/api/doxygen/inherit_graph_38.svg              |    4 +-
 docs/api/doxygen/inherit_graph_39.svg              |   27 +-
 docs/api/doxygen/inherit_graph_40.svg              |   25 +-
 docs/api/doxygen/inherit_graph_41.svg              |   24 +-
 docs/api/doxygen/inherit_graph_42.svg              |   12 +-
 docs/api/doxygen/inherit_graph_43.svg              |   17 +-
 docs/api/doxygen/inherit_graph_44.svg              |    4 +-
 docs/api/doxygen/inherit_graph_45.svg              |   17 +-
 docs/api/doxygen/inherit_graph_46.svg              |   12 +-
 docs/api/doxygen/inherit_graph_47.svg              |   14 +-
 docs/api/doxygen/inherit_graph_48.svg              |    4 +-
 docs/api/doxygen/inherit_graph_49.svg              |    4 +-
 docs/api/doxygen/inherit_graph_50.svg              |    4 +-
 docs/api/doxygen/inherit_graph_51.svg              |    4 +-
 docs/api/doxygen/inherit_graph_52.svg              |   15 +-
 docs/api/doxygen/inherit_graph_53.svg              |   15 +-
 docs/api/doxygen/inherit_graph_54.svg              |    4 +-
 docs/api/doxygen/inherit_graph_55.svg              |   17 +-
 docs/api/doxygen/inherit_graph_56.svg              |   16 +-
 docs/api/doxygen/inherit_graph_57.svg              |   12 +-
 docs/api/doxygen/inherit_graph_58.svg              |   15 +-
 docs/api/doxygen/inherit_graph_59.svg              | 2863 +---------
 docs/api/doxygen/inherit_graph_60.svg              | 2945 +++++++++-
 docs/api/doxygen/inherit_graph_61.svg              |   12 +-
 docs/api/doxygen/inherit_graph_62.svg              |   16 +-
 docs/api/doxygen/inherit_graph_63.svg              |   16 +-
 docs/api/doxygen/inherit_graph_64.svg              |   12 +-
 docs/api/doxygen/inherit_graph_65.svg              |   15 +-
 docs/api/doxygen/inherit_graph_66.svg              |   15 +-
 docs/api/doxygen/inherit_graph_67.svg              |   14 +-
 docs/api/doxygen/inherit_graph_68.svg              |   23 +-
 docs/api/doxygen/inherit_graph_69.svg              |   40 +-
 docs/api/doxygen/inherit_graph_70.svg              |   27 +-
 docs/api/doxygen/inherit_graph_71.svg              |   38 +-
 docs/api/doxygen/inherit_graph_72.svg              |   38 +-
 docs/api/doxygen/inherit_graph_73.svg              |   15 +-
 docs/api/doxygen/inherit_graph_74.svg              |   41 +-
 docs/api/doxygen/inherit_graph_75.svg              |   15 +-
 docs/api/doxygen/inherit_graph_76.svg              |   28 +-
 docs/api/doxygen/inherit_graph_77.svg              |   12 +-
 docs/api/doxygen/inherit_graph_78.svg              |   22 +-
 docs/api/doxygen/inherit_graph_79.svg              |   15 +-
 docs/api/doxygen/inherit_graph_80.svg              |   27 +-
 docs/api/doxygen/inherit_graph_81.svg              |   12 +-
 docs/api/doxygen/inherit_graph_82.svg              |   15 +-
 docs/api/doxygen/inherit_graph_83.svg              |   15 +-
 docs/api/doxygen/inherit_graph_84.svg              | 5770 +------------------
 docs/api/doxygen/inherit_graph_85.svg              |   14 +-
 docs/api/doxygen/inherit_graph_86.svg              | 5866 +++++++++++++++++++-
 docs/api/doxygen/inherit_graph_87.svg              |   14 +-
 docs/api/doxygen/inherit_graph_88.svg              |   28 +-
 docs/api/doxygen/inherit_graph_89.svg              |  216 +-
 docs/api/doxygen/inherit_graph_90.svg              |   28 +-
 docs/api/doxygen/inherit_graph_91.svg              |  215 +-
 docs/api/doxygen/inherit_graph_92.svg              |   12 +-
 docs/api/doxygen/inherit_graph_93.svg              |   15 +-
 docs/api/doxygen/inherit_graph_94.svg              |   12 +-
 docs/api/doxygen/inherit_graph_95.svg              |   15 +-
 docs/api/doxygen/inherit_graph_96.svg              |  145 +-
 docs/api/doxygen/inherit_graph_97.svg              |   15 +-
 docs/api/doxygen/inherit_graph_98.svg              |  146 +-
 docs/api/doxygen/inherit_graph_99.svg              |    4 +-
 docs/api/doxygen/inherits.html                     |  266 +-
 docs/api/doxygen/int__set_8h.html                  |    2 +-
 docs/api/doxygen/int__set_8h__incl.svg             | 1200 ++--
 docs/api/doxygen/int__solver_8h.html               |   13 +-
 docs/api/doxygen/int__solver_8h__incl.svg          | 1346 ++---
 docs/api/doxygen/int__solver_8h_source.html        |   60 +-
 docs/api/doxygen/interpreter_8h.html               |    2 +-
 docs/api/doxygen/interpreter_8h__incl.svg          | 1742 +++---
 docs/api/doxygen/interpreter_8h_source.html        |    6 +-
 docs/api/doxygen/ir_2adt_8h.html                   |    2 +-
 docs/api/doxygen/ir_2adt_8h__dep__incl.svg         |    6 +-
 docs/api/doxygen/ir_2adt_8h__incl.svg              | 1086 ++--
 docs/api/doxygen/ir_2adt_8h_source.html            |    2 +-
 docs/api/doxygen/ir_2attrs_8h.html                 |    2 +-
 docs/api/doxygen/ir_2attrs_8h__dep__incl.svg       |    2 +-
 docs/api/doxygen/ir_2attrs_8h__incl.svg            | 1114 ++--
 docs/api/doxygen/ir_2attrs_8h_source.html          |  111 +-
 docs/api/doxygen/ir_2expr_8h.html                  |    2 +-
 docs/api/doxygen/ir_2expr_8h__dep__incl.svg        |   10 +-
 docs/api/doxygen/ir_2expr_8h__incl.svg             | 1058 ++--
 docs/api/doxygen/ir_2expr_8h_source.html           |   12 +-
 docs/api/doxygen/ir_2function_8h.html              |    2 +-
 docs/api/doxygen/ir_2function_8h__dep__incl.svg    |    6 +-
 docs/api/doxygen/ir_2function_8h__incl.svg         | 1138 ++--
 docs/api/doxygen/ir_2module_8h.html                |    2 +-
 docs/api/doxygen/ir_2module_8h__dep__incl.svg      |    6 +-
 docs/api/doxygen/ir_2module_8h__incl.svg           | 1224 ++--
 docs/api/doxygen/ir_2module_8h_source.html         |    4 +-
 docs/api/doxygen/ir_2op_8h.html                    |    2 +-
 docs/api/doxygen/ir_2op_8h__dep__incl.svg          |    2 +-
 docs/api/doxygen/ir_2op_8h__incl.svg               | 1342 ++---
 docs/api/doxygen/ir_2op_8h_source.html             |    6 +-
 docs/api/doxygen/ir_2transform_8h.html             |    4 +-
 docs/api/doxygen/ir_2transform_8h__dep__incl.svg   |  892 +--
 docs/api/doxygen/ir_2transform_8h__incl.svg        | 1308 ++---
 docs/api/doxygen/ir_2transform_8h_source.html      |    2 +-
 docs/api/doxygen/ir_2type_8h.html                  |    2 +-
 docs/api/doxygen/ir_2type_8h__dep__incl.svg        |   10 +-
 docs/api/doxygen/ir_2type_8h__incl.svg             | 1008 ++--
 docs/api/doxygen/ir_2type_8h_source.html           |    4 +-
 docs/api/doxygen/local__response__norm_8h.html     |    2 +-
 .../api/doxygen/local__response__norm_8h__incl.svg | 1326 ++---
 .../doxygen/local__response__norm_8h_source.html   |   10 +-
 docs/api/doxygen/loop__state_8h.html               |    4 +-
 docs/api/doxygen/loop__state_8h__dep__incl.svg     |  154 +-
 docs/api/doxygen/loop__state_8h__incl.svg          | 1681 +++---
 docs/api/doxygen/loop__state_8h_source.html        |   10 +-
 docs/api/doxygen/mapping_8h.html                   |    2 +-
 docs/api/doxygen/mapping_8h__incl.svg              | 1326 ++---
 docs/api/doxygen/measure_8h.html                   |    4 +-
 docs/api/doxygen/measure_8h__dep__incl.svg         |   52 +-
 docs/api/doxygen/measure_8h__incl.svg              | 1758 +++---
 docs/api/doxygen/measure_8h_source.html            |   10 +-
 docs/api/doxygen/measure__record_8h.html           |    2 +-
 docs/api/doxygen/measure__record_8h__incl.svg      | 1810 +++---
 docs/api/doxygen/measure__record_8h_source.html    |    4 +-
 docs/api/doxygen/memory__manager_8h_source.html    |    2 +-
 docs/api/doxygen/namespacemembers.html             |    9 +-
 docs/api/doxygen/namespacemembers_b.html           |   11 +-
 docs/api/doxygen/namespacemembers_c.html           |   10 +-
 docs/api/doxygen/namespacemembers_d.html           |    9 +-
 docs/api/doxygen/namespacemembers_enum.html        |    3 +
 docs/api/doxygen/namespacemembers_eval.html        |    6 +
 docs/api/doxygen/namespacemembers_f.html           |    2 +-
 docs/api/doxygen/namespacemembers_func.html        |    9 +-
 docs/api/doxygen/namespacemembers_func_b.html      |   11 +-
 docs/api/doxygen/namespacemembers_func_c.html      |    8 +-
 docs/api/doxygen/namespacemembers_func_g.html      |   19 +-
 docs/api/doxygen/namespacemembers_func_h.html      |    3 +
 docs/api/doxygen/namespacemembers_func_i.html      |    3 +
 docs/api/doxygen/namespacemembers_func_m.html      |   16 +-
 docs/api/doxygen/namespacemembers_func_o.html      |    2 +-
 docs/api/doxygen/namespacemembers_func_p.html      |   15 +-
 docs/api/doxygen/namespacemembers_func_r.html      |    5 +-
 docs/api/doxygen/namespacemembers_func_s.html      |    4 +-
 docs/api/doxygen/namespacemembers_func_t.html      |    8 +-
 docs/api/doxygen/namespacemembers_g.html           |   17 +-
 docs/api/doxygen/namespacemembers_h.html           |    3 +
 docs/api/doxygen/namespacemembers_i.html           |    5 +-
 docs/api/doxygen/namespacemembers_k.html           |    9 +
 docs/api/doxygen/namespacemembers_m.html           |   16 +-
 docs/api/doxygen/namespacemembers_o.html           |    2 +-
 docs/api/doxygen/namespacemembers_p.html           |   16 +-
 docs/api/doxygen/namespacemembers_r.html           |    3 +
 docs/api/doxygen/namespacemembers_s.html           |    4 +-
 docs/api/doxygen/namespacemembers_t.html           |    6 +-
 docs/api/doxygen/namespacemembers_type.html        |    5 +-
 docs/api/doxygen/namespacemembers_vars.html        |    3 +
 docs/api/doxygen/namespaces.html                   |   31 +-
 docs/api/doxygen/namespacetvm.html                 |  299 +-
 docs/api/doxygen/namespacetvm_1_1arith.html        |   90 +-
 .../doxygen/namespacetvm_1_1auto__scheduler.html   |  379 +-
 docs/api/doxygen/namespacetvm_1_1codegen.html      |   10 +-
 docs/api/doxygen/namespacetvm_1_1parser.html       |   20 +-
 docs/api/doxygen/namespacetvm_1_1relay.html        |  159 +
 .../namespacetvm_1_1relay_1_1transform.html        |   75 +-
 docs/api/doxygen/namespacetvm_1_1runtime.html      |   50 +
 docs/api/doxygen/namespacetvm_1_1support.html      |  239 +
 docs/api/doxygen/namespacetvm_1_1tir.html          |   79 +-
 .../doxygen/namespacetvm_1_1tir_1_1transform.html  |   21 +
 docs/api/doxygen/namespacetvm_1_1topi.html         |  405 +-
 docs/api/doxygen/ndarray_8h.html                   |    2 +-
 docs/api/doxygen/ndarray_8h__dep__incl.svg         | 1057 ++--
 docs/api/doxygen/ndarray_8h_source.html            |    8 +-
 docs/api/doxygen/nn_2bnn_8h.html                   |    2 +-
 docs/api/doxygen/nn_2bnn_8h__incl.svg              | 1338 ++---
 docs/api/doxygen/nn_2bnn_8h_source.html            |   16 +-
 docs/api/doxygen/nn_2dense_8h.html                 |    2 +-
 docs/api/doxygen/nn_2dense_8h__incl.svg            | 1326 ++---
 docs/api/doxygen/nn_2dense_8h_source.html          |    6 +-
 docs/api/doxygen/nn_2pooling_8h_source.html        |   30 +-
 docs/api/doxygen/nn_2softmax_8h_source.html        |   14 +-
 docs/api/doxygen/node_2container_8h.html           |    8 +-
 docs/api/doxygen/node_2container_8h__dep__incl.svg | 1657 +++---
 docs/api/doxygen/node_2container_8h__incl.svg      |  732 +--
 docs/api/doxygen/node_2container_8h_source.html    |   23 +-
 docs/api/doxygen/node_8h.html                      |    4 +-
 docs/api/doxygen/node_8h__dep__incl.svg            | 1459 +++--
 docs/api/doxygen/node_8h__incl.svg                 |  958 ++--
 docs/api/doxygen/node_8h_source.html               |    2 +-
 docs/api/doxygen/object_8h.html                    |    2 +-
 docs/api/doxygen/object_8h__dep__incl.svg          | 1618 +++---
 docs/api/doxygen/object_8h_source.html             |   10 +-
 docs/api/doxygen/op__strategy_8h.html              |    2 +-
 docs/api/doxygen/op__strategy_8h__incl.svg         | 1445 ++---
 docs/api/doxygen/op__strategy_8h_source.html       |    4 +-
 docs/api/doxygen/operation_8h.html                 |    2 +-
 docs/api/doxygen/operation_8h__incl.svg            | 1286 ++---
 docs/api/doxygen/operation_8h_source.html          |    4 +-
 docs/api/doxygen/packed__func_8h.html              |   17 +-
 docs/api/doxygen/packed__func_8h__dep__incl.svg    | 1350 +++--
 docs/api/doxygen/packed__func_8h__incl.svg         |  694 ++-
 docs/api/doxygen/packed__func_8h_source.html       |  206 +-
 docs/api/doxygen/pad__utils_8h.html                |    2 +-
 docs/api/doxygen/pad__utils_8h__incl.svg           | 1334 ++---
 ...repr__printer_8h.html => parallel__for_8h.html} |   56 +-
 docs/api/doxygen/parallel__for_8h__incl.svg        |   83 +
 docs/api/doxygen/parallel__for_8h_source.html      |  105 +
 docs/api/doxygen/parser_8h.html                    |    6 +-
 docs/api/doxygen/parser_8h__incl.svg               |  794 +--
 docs/api/doxygen/parser_8h_source.html             |    4 +-
 docs/api/doxygen/pattern_8h.html                   |    2 +-
 docs/api/doxygen/pattern_8h__incl.svg              | 1194 ++--
 docs/api/doxygen/pattern__functor_8h.html          |    2 +-
 docs/api/doxygen/pattern__functor_8h__incl.svg     | 1338 ++---
 docs/api/doxygen/pattern__functor_8h_source.html   |    2 +-
 docs/api/doxygen/ravel__unravel_8h.html            |    2 +-
 docs/api/doxygen/ravel__unravel_8h__incl.svg       | 1326 ++---
 docs/api/doxygen/ravel__unravel_8h_source.html     |    2 +-
 docs/api/doxygen/reduce_8h.html                    |    4 +-
 docs/api/doxygen/reduce_8h__incl.svg               | 1128 ++--
 docs/api/doxygen/reduce_8h_source.html             |   10 +-
 docs/api/doxygen/reduction_8h.html                 |   24 +-
 docs/api/doxygen/reduction_8h_source.html          |   72 +-
 docs/api/doxygen/reflection_8h.html                |    4 +-
 docs/api/doxygen/reflection_8h__dep__incl.svg      | 1450 +++--
 docs/api/doxygen/reflection_8h__incl.svg           |  886 +--
 docs/api/doxygen/reflection_8h_source.html         |    6 +-
 docs/api/doxygen/registry_8h.html                  |    4 +-
 docs/api/doxygen/registry_8h__dep__incl.svg        |  763 ++-
 docs/api/doxygen/registry_8h__incl.svg             |  728 +--
 docs/api/doxygen/registry_8h_source.html           |    6 +-
 docs/api/doxygen/relay_2adt_8h.html                |    2 +-
 docs/api/doxygen/relay_2adt_8h__incl.svg           | 1476 ++---
 docs/api/doxygen/relay_2adt_8h_source.html         |    6 +-
 docs/api/doxygen/relay_2analysis_8h.html           |    5 +-
 docs/api/doxygen/relay_2analysis_8h__incl.svg      | 1354 ++---
 docs/api/doxygen/relay_2analysis_8h_source.html    |    3 +-
 docs/api/doxygen/relay_2attrs_2memory_8h.html      |    2 +-
 docs/api/doxygen/relay_2attrs_2memory_8h__incl.svg | 1434 ++---
 .../doxygen/relay_2attrs_2memory_8h_source.html    |    2 +-
 docs/api/doxygen/relay_2attrs_2nn_8h.html          |    2 +-
 docs/api/doxygen/relay_2attrs_2nn_8h__incl.svg     | 1278 ++---
 docs/api/doxygen/relay_2attrs_2nn_8h_source.html   |    8 +-
 docs/api/doxygen/relay_2attrs_2transform_8h.html   |    2 +-
 .../doxygen/relay_2attrs_2transform_8h__incl.svg   | 1462 ++---
 .../doxygen/relay_2attrs_2transform_8h_source.html |    2 +-
 docs/api/doxygen/relay_2attrs_2vm_8h.html          |    2 +-
 docs/api/doxygen/relay_2attrs_2vm_8h__incl.svg     | 1122 ++--
 docs/api/doxygen/relay_2attrs_2vm_8h_source.html   |    2 +-
 docs/api/doxygen/relay_2expr_8h.html               |    2 +-
 docs/api/doxygen/relay_2expr_8h__dep__incl.svg     |    2 +-
 docs/api/doxygen/relay_2expr_8h__incl.svg          | 1458 ++---
 docs/api/doxygen/relay_2expr_8h_source.html        |  142 +-
 docs/api/doxygen/relay_2expr__functor_8h.html      |    2 +-
 docs/api/doxygen/relay_2expr__functor_8h__incl.svg | 1350 ++---
 .../doxygen/relay_2expr__functor_8h_source.html    |   92 +-
 .../{feature_8h.html => relay_2feature_8h.html}    |   14 +-
 docs/api/doxygen/relay_2feature_8h__incl.svg       | 1378 +++++
 docs/api/doxygen/relay_2feature_8h_source.html     |  140 +
 docs/api/doxygen/relay_2function_8h.html           |    2 +-
 docs/api/doxygen/relay_2function_8h__incl.svg      | 1398 ++---
 docs/api/doxygen/relay_2function_8h_source.html    |   22 +-
 docs/api/doxygen/relay_2op_8h.html                 |    2 +-
 docs/api/doxygen/relay_2op_8h__incl.svg            | 1450 ++---
 docs/api/doxygen/relay_2op__attr__types_8h.html    |    2 +-
 .../doxygen/relay_2op__attr__types_8h__incl.svg    | 1215 ++--
 .../doxygen/relay_2op__attr__types_8h_source.html  |    4 +-
 docs/api/doxygen/relay_2qnn_2attrs_8h.html         |    2 +-
 docs/api/doxygen/relay_2qnn_2attrs_8h__incl.svg    | 1128 ++--
 docs/api/doxygen/relay_2qnn_2attrs_8h_source.html  |    2 +-
 docs/api/doxygen/relay_2qnn_2transform_8h.html     |    2 +-
 .../api/doxygen/relay_2qnn_2transform_8h__incl.svg | 1201 ++--
 docs/api/doxygen/relay_2transform_8h.html          |   14 +-
 docs/api/doxygen/relay_2transform_8h__incl.svg     | 1327 ++---
 docs/api/doxygen/relay_2transform_8h_source.html   |   13 +-
 docs/api/doxygen/relay_2type_8h.html               |    2 +-
 docs/api/doxygen/relay_2type_8h__dep__incl.svg     |    2 +-
 docs/api/doxygen/relay_2type_8h__incl.svg          | 1390 ++---
 docs/api/doxygen/relay_2type_8h_source.html        |    4 +-
 docs/api/doxygen/reorg_8h_source.html              |    2 +-
 docs/api/doxygen/repr__printer_8h.html             |    2 +-
 docs/api/doxygen/repr__printer_8h__dep__incl.svg   | 1434 +++--
 docs/api/doxygen/rocblas_8h.html                   |    2 +-
 docs/api/doxygen/rocblas_8h__incl.svg              | 1320 ++---
 docs/api/doxygen/rocblas_8h_source.html            |    2 +-
 docs/api/doxygen/rocm_2dense_8h.html               |    2 +-
 docs/api/doxygen/rocm_2dense_8h__incl.svg          | 1805 +++---
 docs/api/doxygen/rocm_2dense_8h_source.html        |   10 +-
 docs/api/doxygen/rocm_2injective_8h.html           |    2 +-
 docs/api/doxygen/rocm_2injective_8h__incl.svg      | 1819 +++---
 docs/api/doxygen/rocm_2injective_8h_source.html    |    4 +-
 docs/api/doxygen/rocm_2normalization_8h.html       |    2 +-
 docs/api/doxygen/rocm_2normalization_8h__incl.svg  | 1840 +++---
 .../api/doxygen/rocm_2normalization_8h_source.html |    2 +-
 docs/api/doxygen/rocm_2pooling_8h.html             |    2 +-
 docs/api/doxygen/rocm_2pooling_8h__incl.svg        | 1837 +++---
 docs/api/doxygen/rocm_2pooling_8h_source.html      |    4 +-
 docs/api/doxygen/rocm_2reduction_8h.html           |    2 +-
 docs/api/doxygen/rocm_2reduction_8h__incl.svg      | 1819 +++---
 docs/api/doxygen/rocm_2reduction_8h_source.html    |    4 +-
 docs/api/doxygen/rocm_2softmax_8h.html             |    2 +-
 docs/api/doxygen/rocm_2softmax_8h__incl.svg        | 1819 +++---
 docs/api/doxygen/rocm_2softmax_8h_source.html      |    4 +-
 docs/api/doxygen/runtime_2container_8h.html        |   13 +-
 .../doxygen/runtime_2container_8h__dep__incl.svg   | 1617 +++---
 docs/api/doxygen/runtime_2container_8h__incl.svg   |  495 +-
 docs/api/doxygen/runtime_2container_8h_source.html |  318 +-
 .../doxygen/runtime_2crt_2module_8h_source.html    |    6 +-
 docs/api/doxygen/runtime_2memory_8h.html           |    2 +-
 docs/api/doxygen/runtime_2memory_8h__dep__incl.svg | 1495 +++--
 docs/api/doxygen/runtime_2memory_8h_source.html    |    2 +-
 docs/api/doxygen/runtime_2module_8h.html           |    4 +-
 docs/api/doxygen/runtime_2module_8h__dep__incl.svg | 1362 +++--
 docs/api/doxygen/runtime_2module_8h__incl.svg      |  528 +-
 docs/api/doxygen/runtime_2module_8h_source.html    |    4 +-
 docs/api/doxygen/runtime_2vm_2vm_8h.html           |    2 +-
 docs/api/doxygen/runtime_2vm_2vm_8h__incl.svg      |  928 ++--
 docs/api/doxygen/runtime_2vm_2vm_8h_source.html    |    6 +-
 docs/api/doxygen/schedule_8h.html                  |    4 +-
 docs/api/doxygen/schedule_8h__dep__incl.svg        | 1299 +++--
 docs/api/doxygen/schedule_8h__incl.svg             | 1304 ++---
 docs/api/doxygen/schedule__pass_8h.html            |    2 +-
 docs/api/doxygen/schedule__pass_8h__incl.svg       | 1258 ++---
 docs/api/doxygen/search/all_0.js                   |    2 +-
 docs/api/doxygen/search/all_1.js                   |   38 +-
 docs/api/doxygen/search/all_10.js                  |   45 +-
 docs/api/doxygen/search/all_12.js                  |   39 +-
 docs/api/doxygen/search/all_13.js                  |   51 +-
 docs/api/doxygen/search/all_14.js                  |   79 +-
 docs/api/doxygen/search/all_15.js                  |    6 +-
 docs/api/doxygen/search/all_16.js                  |    8 +-
 docs/api/doxygen/search/all_2.js                   |   11 +-
 docs/api/doxygen/search/all_3.js                   |   29 +-
 docs/api/doxygen/search/all_4.js                   |    9 +-
 docs/api/doxygen/search/all_5.js                   |   15 +-
 docs/api/doxygen/search/all_6.js                   |   24 +-
 docs/api/doxygen/search/all_7.js                   |   13 +-
 docs/api/doxygen/search/all_8.js                   |    5 +-
 docs/api/doxygen/search/all_9.js                   |   19 +-
 docs/api/doxygen/search/all_b.js                   |    7 +-
 docs/api/doxygen/search/all_c.js                   |    3 +-
 docs/api/doxygen/search/all_d.js                   |   24 +-
 docs/api/doxygen/search/all_e.js                   |    3 +-
 docs/api/doxygen/search/all_f.js                   |    6 +-
 docs/api/doxygen/search/classes_0.js               |    5 +-
 docs/api/doxygen/search/classes_10.js              |    8 +-
 docs/api/doxygen/search/classes_11.js              |    8 +-
 docs/api/doxygen/search/classes_13.js              |    1 +
 docs/api/doxygen/search/classes_2.js               |    2 +
 docs/api/doxygen/search/classes_7.js               |    2 +-
 docs/api/doxygen/search/classes_8.js               |    4 +-
 docs/api/doxygen/search/classes_a.js               |    1 +
 docs/api/doxygen/search/classes_d.js               |    6 +-
 docs/api/doxygen/search/classes_f.js               |    2 +
 docs/api/doxygen/search/defines_7.js               |    4 +-
 docs/api/doxygen/search/enums_3.js                 |    3 +-
 docs/api/doxygen/search/enumvalues_4.js            |    2 +
 docs/api/doxygen/search/files_2.js                 |    1 +
 docs/api/doxygen/search/files_5.js                 |    5 +-
 docs/api/doxygen/search/files_c.js                 |    5 +-
 docs/api/doxygen/search/files_e.js                 |    5 +-
 docs/api/doxygen/search/files_f.js                 |    2 +-
 docs/api/doxygen/search/functions_1.js             |   10 +-
 docs/api/doxygen/search/functions_10.js            |   16 +-
 docs/api/doxygen/search/functions_12.js            |   18 +-
 docs/api/doxygen/search/functions_13.js            |   21 +-
 docs/api/doxygen/search/functions_14.js            |   28 +-
 docs/api/doxygen/search/functions_15.js            |    4 +-
 docs/api/doxygen/search/functions_16.js            |    5 +-
 docs/api/doxygen/search/functions_2.js             |    3 +-
 docs/api/doxygen/search/functions_3.js             |   13 +-
 docs/api/doxygen/search/functions_5.js             |    1 +
 docs/api/doxygen/search/functions_6.js             |    5 +-
 docs/api/doxygen/search/functions_7.js             |    9 +-
 docs/api/doxygen/search/functions_8.js             |    1 +
 docs/api/doxygen/search/functions_9.js             |    7 +-
 docs/api/doxygen/search/functions_c.js             |    2 +-
 docs/api/doxygen/search/functions_d.js             |   13 +-
 docs/api/doxygen/search/functions_f.js             |    6 +-
 docs/api/doxygen/search/namespaces_2.js            |    5 +-
 docs/api/doxygen/search/related_0.js               |    4 +-
 docs/api/doxygen/search/related_2.js               |    2 +-
 docs/api/doxygen/search/related_b.js               |    8 +-
 docs/api/doxygen/search/typedefs_2.js              |    2 +-
 docs/api/doxygen/search/typedefs_5.js              |    2 +-
 docs/api/doxygen/search/typedefs_b.js              |    1 +
 docs/api/doxygen/search/typedefs_e.js              |    2 +-
 docs/api/doxygen/search/variables_0.js             |    2 +-
 docs/api/doxygen/search/variables_1.js             |    3 +-
 docs/api/doxygen/search/variables_10.js            |    1 +
 docs/api/doxygen/search/variables_11.js            |    6 +-
 docs/api/doxygen/search/variables_13.js            |    2 +
 docs/api/doxygen/search/variables_3.js             |    1 -
 docs/api/doxygen/search/variables_4.js             |    4 +-
 docs/api/doxygen/search/variables_5.js             |    6 +-
 docs/api/doxygen/search/variables_6.js             |    2 +-
 docs/api/doxygen/search/variables_9.js             |    5 +-
 docs/api/doxygen/search/variables_a.js             |    5 +-
 docs/api/doxygen/search/variables_b.js             |    1 +
 docs/api/doxygen/search/variables_d.js             |    3 +-
 docs/api/doxygen/search/variables_f.js             |    5 +-
 docs/api/doxygen/search__policy_8h.html            |   16 +-
 docs/api/doxygen/search__policy_8h__incl.svg       | 1321 ++---
 docs/api/doxygen/search__policy_8h_source.html     |   30 +-
 docs/api/doxygen/search__task_8h.html              |    4 +-
 docs/api/doxygen/search__task_8h__dep__incl.svg    |   52 +-
 docs/api/doxygen/search__task_8h__incl.svg         | 1243 ++---
 docs/api/doxygen/search__task_8h_source.html       |    6 +-
 docs/api/doxygen/serializer_8h.html                |    2 +-
 docs/api/doxygen/serializer_8h__dep__incl.svg      | 1059 ++--
 .../{annotation_8h.html => source__map_8h.html}    |   37 +-
 docs/api/doxygen/source__map_8h__incl.svg          |  902 +++
 docs/api/doxygen/source__map_8h_source.html        |  124 +
 docs/api/doxygen/span_8h.html                      |    4 +-
 docs/api/doxygen/span_8h__dep__incl.svg            | 1060 ++--
 docs/api/doxygen/span_8h__incl.svg                 |  974 ++--
 docs/api/doxygen/span_8h_source.html               |   15 +-
 docs/api/doxygen/stmt_8h.html                      |    2 +-
 docs/api/doxygen/stmt_8h__incl.svg                 | 1202 ++--
 docs/api/doxygen/stmt_8h_source.html               |    2 +-
 docs/api/doxygen/stmt__functor_8h.html             |    2 +-
 docs/api/doxygen/stmt__functor_8h__incl.svg        | 1256 ++---
 docs/api/doxygen/stmt__functor_8h_source.html      |    4 +-
 ...uto__scheduler_1_1SearchPolicyKey-members.html} |   11 +-
 ...tvm_1_1auto__scheduler_1_1SearchPolicyKey.html} |  101 +-
 ...__scheduler_1_1SearchPolicyKey__coll__graph.svg |   26 +
 ...ructtvm_1_1detail_1_1AttrInitEntry-members.html |    2 +
 .../structtvm_1_1detail_1_1AttrInitEntry.html      |   57 +-
 ...tvm_1_1detail_1_1AttrInitEntry__coll__graph.svg |   26 +-
 .../structtvm_1_1detail_1_1ValueTypeInfoMaker.html |    4 +-
 .../structtvm_1_1detail_1_1is__specialized.html    |    4 +-
 ...er_3_01Args_8_8_8_01_4_00_01Container_01_4.html |    4 +-
 ... => structtvm_1_1parser_1_1Source-members.html} |   17 +-
 .../api/doxygen/structtvm_1_1parser_1_1Source.html |  323 ++
 .../structtvm_1_1parser_1_1Source__coll__graph.svg |   60 +
 .../structtvm_1_1relay_1_1PadAttrs-members.html    |    2 +-
 .../doxygen/structtvm_1_1relay_1_1PadAttrs.html    |    8 +-
 ...structtvm_1_1relay_1_1PadAttrs__coll__graph.svg |    2 +-
 ...ructtvm_1_1relay_1_1VarianceAttrs-members.html} |   29 +-
 ...ml => structtvm_1_1relay_1_1VarianceAttrs.html} |   81 +-
 ...ttvm_1_1relay_1_1VarianceAttrs__coll__graph.svg |  104 +
 ...m_1_1relay_1_1VarianceAttrs__inherit__graph.svg |   90 +
 ...alueConverter_3_01Optional_3_01T_01_4_01_4.html |    4 +-
 ...nverter_3_1_1tvm_1_1runtime_1_1String_01_4.html |    4 +-
 docs/api/doxygen/structural__equal_8h.html         |    4 +-
 .../doxygen/structural__equal_8h__dep__incl.svg    |  760 +--
 docs/api/doxygen/structural__equal_8h__incl.svg    |  788 +--
 docs/api/doxygen/structural__hash_8h.html          |    4 +-
 .../api/doxygen/structural__hash_8h__dep__incl.svg |  760 +--
 docs/api/doxygen/structural__hash_8h__incl.svg     |  796 +--
 docs/api/doxygen/target_8h.html                    |    7 +-
 docs/api/doxygen/target_8h__dep__incl.svg          |  632 ++-
 docs/api/doxygen/target_8h__incl.svg               | 1387 ++---
 docs/api/doxygen/target_8h_source.html             |   33 +-
 docs/api/doxygen/target__id_8h__dep__incl.svg      |  520 --
 docs/api/doxygen/target__id_8h__incl.svg           | 1285 -----
 docs/api/doxygen/target__id_8h_source.html         |  138 -
 docs/api/doxygen/target__info_8h.html              |    2 +-
 docs/api/doxygen/target__info_8h__incl.svg         | 1072 ++--
 .../{target__id_8h.html => target__kind_8h.html}   |   79 +-
 docs/api/doxygen/target__kind_8h__dep__incl.svg    |  548 ++
 docs/api/doxygen/target__kind_8h__incl.svg         | 1285 +++++
 docs/api/doxygen/target__kind_8h_source.html       |  137 +
 docs/api/doxygen/tensor_8h.html                    |    2 +-
 docs/api/doxygen/tensor_8h__incl.svg               | 1344 ++---
 docs/api/doxygen/tensor_8h_source.html             |    4 +-
 docs/api/doxygen/tensor__intrin_8h.html            |    4 +-
 docs/api/doxygen/tensor__intrin_8h__dep__incl.svg  | 1264 +++--
 docs/api/doxygen/tensor__intrin_8h__incl.svg       | 1340 ++---
 docs/api/doxygen/tensor__type_8h.html              |    2 +-
 docs/api/doxygen/tensor__type_8h__dep__incl.svg    |    2 +-
 docs/api/doxygen/tensor__type_8h__incl.svg         | 1060 ++--
 docs/api/doxygen/tensor__type_8h_source.html       |    2 +-
 docs/api/doxygen/tensor__utils_8h.html             |    2 +-
 docs/api/doxygen/tensor__utils_8h__incl.svg        | 1318 ++---
 docs/api/doxygen/tir_2analysis_8h.html             |    7 +-
 docs/api/doxygen/tir_2analysis_8h__incl.svg        | 1230 ++--
 docs/api/doxygen/tir_2analysis_8h_source.html      |    4 +-
 docs/api/doxygen/tir_2expr_8h.html                 |    2 +-
 docs/api/doxygen/tir_2expr_8h__incl.svg            | 1182 ++--
 docs/api/doxygen/tir_2expr_8h_source.html          |   34 +-
 docs/api/doxygen/tir_2expr__functor_8h.html        |    2 +-
 docs/api/doxygen/tir_2expr__functor_8h__incl.svg   | 1176 ++--
 docs/api/doxygen/tir_2expr__functor_8h_source.html |    2 +-
 docs/api/doxygen/tir_2function_8h.html             |    2 +-
 docs/api/doxygen/tir_2function_8h__incl.svg        | 1310 ++---
 docs/api/doxygen/tir_2op_8h.html                   |   45 +-
 docs/api/doxygen/tir_2op_8h__incl.svg              | 1420 ++---
 docs/api/doxygen/tir_2op_8h_source.html            |  120 +-
 docs/api/doxygen/tir_2op__attr__types_8h.html      |    2 +-
 docs/api/doxygen/tir_2op__attr__types_8h__incl.svg |  503 +-
 .../doxygen/tir_2op__attr__types_8h_source.html    |    2 +-
 docs/api/doxygen/tir_2transform_8h.html            |    5 +-
 docs/api/doxygen/tir_2transform_8h__incl.svg       | 1320 ++---
 docs/api/doxygen/tir_2transform_8h_source.html     |    3 +-
 docs/api/doxygen/topi_2nn_8h.html                  |    8 +-
 docs/api/doxygen/topi_2nn_8h__incl.svg             | 1332 ++---
 docs/api/doxygen/topi_2nn_8h_source.html           |   25 +-
 docs/api/doxygen/topi_2transform_8h.html           |   17 +-
 docs/api/doxygen/topi_2transform_8h__incl.svg      | 1320 ++---
 docs/api/doxygen/topi_2transform_8h_source.html    |   64 +-
 docs/api/doxygen/transform__step_8h.html           |    4 +-
 docs/api/doxygen/transform__step_8h__dep__incl.svg |  164 +-
 docs/api/doxygen/transform__step_8h__incl.svg      | 1264 ++---
 docs/api/doxygen/transform__step_8h_source.html    |    8 +-
 docs/api/doxygen/type__functor_8h.html             |    2 +-
 docs/api/doxygen/type__functor_8h__incl.svg        | 1368 ++---
 docs/api/doxygen/type__relation_8h.html            |    2 +-
 docs/api/doxygen/type__relation_8h__dep__incl.svg  |    2 +-
 docs/api/doxygen/type__relation_8h__incl.svg       | 1256 ++---
 docs/api/doxygen/util_8h.html                      |    2 +-
 docs/api/doxygen/util_8h__incl.svg                 | 1070 ++--
 docs/api/doxygen/util_8h_source.html               |    8 +-
 docs/api/doxygen/var_8h.html                       |    2 +-
 docs/api/doxygen/var_8h__incl.svg                  | 1084 ++--
 docs/api/doxygen/var_8h_source.html                |    2 +-
 docs/api/doxygen/vision_8h.html                    |    2 +-
 docs/api/doxygen/vision_8h__incl.svg               | 1280 ++---
 docs/api/doxygen/vision_8h_source.html             |    2 +-
 docs/api/doxygen/with_8h__dep__incl.svg            |    6 +-
 docs/api/doxygen/x86_2bnn_8h.html                  |    2 +-
 docs/api/doxygen/x86_2bnn_8h__incl.svg             | 1926 ++++---
 docs/api/doxygen/x86_2bnn_8h_source.html           |    6 +-
 docs/api/doxygen/x86_2default_8h.html              |    2 +-
 docs/api/doxygen/x86_2default_8h__incl.svg         | 1820 +++---
 docs/api/doxygen/x86_2default_8h_source.html       |    6 +-
 docs/api/doxygen/x86_2injective_8h.html            |    2 +-
 docs/api/doxygen/x86_2injective_8h__incl.svg       | 1926 ++++---
 docs/api/doxygen/x86_2injective_8h_source.html     |    6 +-
 docs/api/javadoc/index-all.html                    |    4 +
 .../javadoc/org/apache/tvm/rpc/RPCWatchdog.html    |   20 +-
 docs/api/python/contrib.html                       |   23 -
 docs/api/python/error.html                         |   26 +-
 docs/api/python/ir.html                            |    4 +-
 docs/api/python/relay/analysis.html                |   48 +-
 docs/api/python/relay/backend.html                 |    5 +-
 docs/api/python/relay/frontend.html                |   44 +-
 docs/api/python/relay/image.html                   |   32 +-
 docs/api/python/relay/index.html                   |  423 +-
 docs/api/python/relay/nn.html                      |  173 +-
 docs/api/python/relay/testing.html                 |   26 +-
 docs/api/python/relay/transform.html               |  146 +-
 docs/api/python/target.html                        |   45 +-
 docs/api/python/te.html                            |   16 +-
 docs/api/python/tir.html                           |  101 +-
 docs/api/python/topi.html                          |  151 +-
 docs/api/typedoc/classes/bytestreamreader.html     |   12 +-
 docs/api/typedoc/classes/cachedcallstack.html      |   34 +-
 docs/api/typedoc/classes/dlcontext.html            |   10 +-
 docs/api/typedoc/classes/dldatatype.html           |   12 +-
 docs/api/typedoc/classes/environment.html          |   12 +-
 docs/api/typedoc/classes/ffilibrary.html           |   20 +-
 docs/api/typedoc/classes/graphruntime.html         |   16 +-
 docs/api/typedoc/classes/instance.html             |   40 +-
 docs/api/typedoc/classes/memory.html               |   34 +-
 docs/api/typedoc/classes/module.html               |   10 +-
 docs/api/typedoc/classes/ndarray.html              |   22 +-
 docs/api/typedoc/classes/packedfunccell.html       |    6 +-
 docs/api/typedoc/classes/rpcserver.html            |   14 +-
 docs/api/typedoc/classes/scalar.html               |    6 +-
 docs/api/typedoc/classes/webgpucontext.html        |   12 +-
 docs/api/typedoc/enums/argtypecode.html            |   30 +-
 docs/api/typedoc/enums/aynccallbackcode.html       |    4 +-
 docs/api/typedoc/enums/dldatatypecode.html         |    8 +-
 docs/api/typedoc/enums/rpcserverstate.html         |   12 +-
 docs/api/typedoc/enums/sizeof.html                 |   18 +-
 docs/api/typedoc/index.html                        |  114 +-
 docs/api/typedoc/interfaces/disposable.html        |    2 +-
 docs/api/typedoc/interfaces/functioninfo.html      |    6 +-
 docs/api/typedoc/interfaces/libraryprovider.html   |    4 +-
 docs/contribute/code_guide.html                    |   12 +
 docs/contribute/index.html                         |    1 +
 docs/contribute/pull_request.html                  |   16 +-
 docs/deploy/android.html                           |    2 +-
 docs/deploy/arm_compute_lib.html                   |  152 +-
 docs/deploy/cpp_deploy.html                        |    2 +-
 docs/deploy/hls.html                               |    6 +-
 docs/deploy/index.html                             |    5 +-
 docs/deploy/integrate.html                         |    2 +-
 docs/dev/convert_layout.html                       |    5 +-
 docs/dev/how_to.html                               |    4 +-
 docs/dev/hybrid_script.html                        |    5 +
 docs/dev/index.html                                |   12 +-
 docs/dev/inferbound.html                           |    4 +-
 docs/dev/introduction_to_module_serialization.html |    4 +-
 .../dev/{relay_pass_infra.html => pass_infra.html} |  296 +-
 docs/dev/relay_add_pass.html                       |    6 +-
 docs/dev/relay_intro.html                          |    1 -
 docs/dev/relay_op_strategy.html                    |    5 +-
 docs/dev/virtual_machine.html                      |    2 +-
 docs/genindex.html                                 |   52 +-
 docs/index.html                                    |    4 +-
 docs/install/docker.html                           |   12 +-
 docs/install/from_source.html                      |    7 -
 docs/objects.inv                                   |  Bin 15946 -> 15987 bytes
 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/dev/low_level_custom_pass.html      |   22 +-
 docs/tutorials/dev/sg_execution_times.html         |    6 +-
 .../{relay_pass_infra.html => use_pass_infra.html} |  310 +-
 .../frontend/deploy_model_on_android.html          |    4 +-
 docs/tutorials/frontend/deploy_prequantized.html   |    7 +-
 .../frontend/deploy_prequantized_tflite.html       |    4 +-
 docs/tutorials/frontend/deploy_quantized.html      |    5 -
 docs/tutorials/frontend/deploy_ssd_gluoncv.html    |   91 +-
 docs/tutorials/frontend/from_onnx.html             |    8 +-
 docs/tutorials/frontend/from_pytorch.html          |    5 -
 docs/tutorials/frontend/from_tensorflow.html       |    4 +-
 docs/tutorials/frontend/sg_execution_times.html    |   38 +-
 docs/tutorials/frontend/using_external_lib.html    |   22 +-
 .../get_started/cross_compilation_and_rpc.html     |    2 +-
 docs/tutorials/get_started/relay_quick_start.html  |  104 +-
 docs/tutorials/get_started/sg_execution_times.html |    8 +-
 .../get_started/tensor_expr_get_started.html       |    6 +-
 docs/tutorials/index.html                          |    8 +-
 docs/tutorials/language/intrin_math.html           |   30 +-
 docs/tutorials/language/reduction.html             |   50 +-
 docs/tutorials/language/scan.html                  |   22 +-
 docs/tutorials/language/schedule_primitives.html   |   90 +-
 docs/tutorials/language/sg_execution_times.html    |   18 +-
 docs/tutorials/language/tensorize.html             |   36 +-
 docs/tutorials/language/tuple_inputs.html          |   36 +-
 docs/tutorials/micro/micro_tflite.html             |    2 +-
 docs/tutorials/micro/sg_execution_times.html       |    4 +-
 docs/tutorials/optimize/opt_conv_cuda.html         |    2 +-
 docs/tutorials/optimize/opt_conv_tensorcore.html   |   38 +-
 docs/tutorials/optimize/opt_gemm.html              |   82 +-
 docs/tutorials/optimize/sg_execution_times.html    |   10 +-
 docs/tutorials/topi/intro_topi.html                |   50 +-
 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     |  184 +-
 .../tutorials/frontend/deploy_classification.html  |   23 +-
 docs/vta/tutorials/frontend/deploy_detection.html  |  629 ---
 .../vta/tutorials/frontend/sg_execution_times.html |    5 +-
 docs/vta/tutorials/index.html                      |   19 +-
 docs/vta/tutorials/matrix_multiply.html            |   42 +-
 docs/vta/tutorials/optimize/convolution_opt.html   |   42 +-
 .../tutorials/optimize/matrix_multiply_opt.html    |   46 +-
 .../vta/tutorials/optimize/sg_execution_times.html |    6 +-
 docs/vta/tutorials/sg_execution_times.html         |    6 +-
 docs/vta/tutorials/vta_get_started.html            |   22 +-
 1286 files changed, 139692 insertions(+), 130024 deletions(-)

diff --git a/docs/_downloads/289640e7ded85c57931fc0537d443c5f/relay_pass_infra.ipynb b/docs/_downloads/13509e02380dbdb802e80921620e9b5c/use_pass_infra.ipynb
similarity index 76%
rename from docs/_downloads/289640e7ded85c57931fc0537d443c5f/relay_pass_infra.ipynb
rename to docs/_downloads/13509e02380dbdb802e80921620e9b5c/use_pass_infra.ipynb
index c76d6d5..18254dc 100644
--- a/docs/_downloads/289640e7ded85c57931fc0537d443c5f/relay_pass_infra.ipynb
+++ b/docs/_downloads/13509e02380dbdb802e80921620e9b5c/use_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 TVM Pass Infra\n=========================\n**Author**: `Zhi Chen <https://github.com/zhiics>`_\n\nAs the number of optimization passes increases in Relay/tir, it becomes intractable to\nexecute them and maintain their dependencies manually. Therefore, we have\nintroduced an infrastructure to manage the optimization passes and make it\napplicable to different layers of the IR in the TVM stack.\n\nThe optimizations of a Relay/tir program could be applied at various  [...]
       ]
     },
     {
@@ -33,7 +33,7 @@
       "cell_type": "markdown",
       "metadata": {},
       "source": [
-        "Create An Example Relay Program\n-------------------------------\nFirst of all, we create a simple Relay program for the tutorial. This program\nwill be used by various optimizations of the examples in this tutorial.\n\n"
+        "Create An Example Relay Program\n-------------------------------\nFirst of all, we create a simple Relay program for the tutorial. This program\nwill be used by various optimizations of the examples in this tutorial.\nSimilarly, users can write a tir primitive function and apply the tir passes.\n\n"
       ]
     },
     {
@@ -44,7 +44,7 @@
       },
       "outputs": [],
       "source": [
-        "def example():\n    shape = (1, 64, 54, 54)\n    c_data = np.empty(shape).astype(\"float32\")\n    c = relay.const(c_data)\n    weight = relay.var('weight', shape=(64, 64, 3, 3))\n    x = relay.var(\"x\", relay.TensorType((1, 64, 56, 56), \"float32\"))\n    conv = relay.nn.conv2d(x, weight)\n    y = relay.add(c, c)\n    y = relay.multiply(y, relay.const(2, \"float32\"))\n    y = relay.add(conv, y)\n    z = relay.add(y, c)\n    z1 = relay.add(y, c)\n    z2 = relay.add(z, z1)\n    [...]
+        "def example():\n    shape = (1, 64, 54, 54)\n    c_data = np.empty(shape).astype(\"float32\")\n    c = relay.const(c_data)\n    weight = relay.var('weight', shape=(64, 64, 3, 3))\n    x = relay.var(\"x\", relay.TensorType((1, 64, 56, 56), \"float32\"))\n    conv = relay.nn.conv2d(x, weight)\n    y = relay.add(c, c)\n    y = relay.multiply(y, relay.const(2, \"float32\"))\n    y = relay.add(conv, y)\n    z = relay.add(y, c)\n    z1 = relay.add(y, c)\n    z2 = relay.add(z, z1)\n    [...]
       ]
     },
     {
@@ -141,7 +141,7 @@
       "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.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"
       ]
     },
     {
@@ -213,7 +213,7 @@
       "cell_type": "markdown",
       "metadata": {},
       "source": [
-        "Debug a Pass\n------------\nRelay provides users a plug-and-play style debugging pass that print the IR\nafter a certain pass is done. For example, we can print out the IR on the\ncompletion of constant folding and fusion by adding the debugging pass after\nthem.\n\n"
+        "Debug a Pass\n------------\nTVM provides users a plug-and-play style debugging pass that print the IR\nafter a certain pass is done through a special pass (``PrintIR``) to dump the IR of the\nwhole module. A slightly modified version of the sequential pass example\ncould be like the following to enable IR dumping for ``FoldConstant`` optimization.\n\n"
       ]
     },
     {
@@ -224,7 +224,14 @@
       },
       "outputs": [],
       "source": [
-        "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 tvm.transform.PassContext(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                                relay.transform.AlterOpLayout()])\n\n# By inserting the ``PrintIR`` pass after ``FoldConstant``, the pass infra will\n# dump out the module IR wh [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Summary\n-------\nThis tutorial has covered how we can write and invoke passes in TVM more\nconveniently using the pass infra. Different ways of invoking a pass are also\ndisucssed. Using :py:class:`tvm.transform.Sequential` can largely help\nusers to ease the work of handling multiple optimization passes and their\ndependencies. In addition, an example is provided to illustrate\nhow we can debug a pass using the ``PrintIR`` and tracing.\n\n"
       ]
     }
   ],
diff --git a/docs/_downloads/38606228ff7130fbd6473b7c0625ddcd/deploy_model_on_android.ipynb b/docs/_downloads/38606228ff7130fbd6473b7c0625ddcd/deploy_model_on_android.ipynb
index 0733d45..dc10671 100644
--- a/docs/_downloads/38606228ff7130fbd6473b7c0625ddcd/deploy_model_on_android.ipynb
+++ b/docs/_downloads/38606228ff7130fbd6473b7c0625ddcd/deploy_model_on_android.ipynb
@@ -47,7 +47,7 @@
       "cell_type": "markdown",
       "metadata": {},
       "source": [
-        "Register Android device to RPC Tracker\n--------------------------------------\nNow we can register our Android device to the tracker.\n\nFollow this `readme page <https://github.com/apache/incubator-tvm/tree/master/apps/android_rpc>`_ to\ninstall TVM RPC APK on the android device.\n\nHere is an example of config.mk. I enabled OpenCL and Vulkan.\n\n\n.. code-block:: bash\n\n  APP_ABI = arm64-v8a\n\n  APP_PLATFORM = android-24\n\n  # whether enable OpenCL during compile\n  USE_OP [...]
+        "Register Android device to RPC Tracker\n--------------------------------------\nNow we can register our Android device to the tracker.\n\nFollow this `readme page <https://github.com/apache/incubator-tvm/tree/master/apps/android_rpc>`_ to\ninstall TVM RPC APK on the android device.\n\nHere is an example of config.mk. I enabled OpenCL and Vulkan.\n\n\n.. code-block:: bash\n\n  APP_ABI = arm64-v8a\n\n  APP_PLATFORM = android-24\n\n  # whether enable OpenCL during compile\n  USE_OP [...]
       ]
     },
     {
diff --git a/docs/_downloads/3961fdfa7abff1b6dc996faa43b4c40f/deploy_model_on_android.py b/docs/_downloads/3961fdfa7abff1b6dc996faa43b4c40f/deploy_model_on_android.py
index 2e3e389..fe16dac 100644
--- a/docs/_downloads/3961fdfa7abff1b6dc996faa43b4c40f/deploy_model_on_android.py
+++ b/docs/_downloads/3961fdfa7abff1b6dc996faa43b4c40f/deploy_model_on_android.py
@@ -145,7 +145,7 @@ from tvm.contrib.download import download_testdata
 #
 #   .. code-block:: bash
 #
-#     /opt/android-sdk-linux/ndk-bundle/build/tools/make-standalone-toolchain.sh \
+#     $ANDROID_NDK_HOME/build/tools/make-standalone-toolchain.sh \
 #        --platform=android-24 --use-llvm --arch=arm64 --install-dir=/opt/android-toolchain-arm64
 #     export TVM_NDK_CC=/opt/android-toolchain-arm64/bin/aarch64-linux-android-g++
 #
diff --git a/docs/_downloads/66258823cf03d1875c9ea84a82131101/deploy_detection.ipynb b/docs/_downloads/66258823cf03d1875c9ea84a82131101/deploy_detection.ipynb
deleted file mode 100644
index 8ce07ae..0000000
--- a/docs/_downloads/66258823cf03d1875c9ea84a82131101/deploy_detection.ipynb
+++ /dev/null
@@ -1,169 +0,0 @@
-{
-  "cells": [
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "%matplotlib inline"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "\nDeploy Pretrained Vision Detection Model from Darknet on VTA\n============================================================\n**Author**: `Hua Jiang <https://github.com/huajsj>`_\n\nThis tutorial provides an end-to-end demo, on how to run Darknet YoloV3-tiny\ninference onto the VTA accelerator design to perform Image detection tasks.\nIt showcases Relay as a front end compiler that can perform quantization (VTA\nonly supports int8/32 inference) as well as graph packing (in order [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Install dependencies\n--------------------\nTo use the autotvm package in tvm, we need to install some extra dependencies.\n(change \"3\" to \"2\" if you use python2):\n\n.. code-block:: bash\n\npip3 install \"Pillow<7\"\n\nYOLO-V3-tiny Model with Darknet parsing have dependancy with CFFI and CV2 library,\nwe need to install CFFI and CV2 before executing this script.\n\npip3 install \"Pillow<7\"\n\npip3 install cffi\npip3 install opencv-python\n\nNow return to the python code. I [...]
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "from __future__ import absolute_import, print_function\n\nimport sys\nimport os\nimport time\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport tvm\nimport vta\nfrom tvm import rpc, autotvm, relay\nfrom tvm.relay.testing import yolo_detection, darknet\nfrom tvm.relay.testing.darknet import __darknetffi__\nfrom tvm.contrib import graph_runtime, graph_runtime, util\nfrom tvm.contrib.download import download_testdata\nfrom vta.testing import simulator\nfrom vta.top import [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Download yolo net configure file, weight file, darknet library file based on\nModel Name\n----------------------------------------------------------------------------\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "MODEL_NAME = 'yolov3-tiny'\nREPO_URL = 'https://github.com/dmlc/web-data/blob/master/darknet/'\n\ncfg_path = download_testdata('https://github.com/pjreddie/darknet/blob/master/cfg/'\n                             + MODEL_NAME + '.cfg' + '?raw=true',\n                             MODEL_NAME + '.cfg',\n                             module=\"darknet\")\nweights_path = download_testdata('https://pjreddie.com/media/files/'\n                                 + MODEL_NAME + '.weights' + ' [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Download yolo categories and illustration front.\n------------------------------------------------\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "coco_path = download_testdata(REPO_URL + 'data/' + 'coco.names' + '?raw=true',\n                              'coco.names',\n                              module='data')\nfont_path = download_testdata(REPO_URL + 'data/' + 'arial.ttf' + '?raw=true',\n                              'arial.ttf',\n                              module='data')\nwith open(coco_path) as f:\n    content = f.readlines()\nnames = [x.strip() for x in content]"
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Define the platform and model targets.\n--------------------------------------\nExecute on CPU vs. VTA, and define the model.\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "# Load VTA parameters from the 3rdparty/vta-hw/config/vta_config.json file\nenv = vta.get_env()\n# Set ``device=arm_cpu`` to run inference on the CPU\n# or ``device=vta`` to run inference on the FPGA.\ndevice = \"vta\"\ntarget = env.target if device == \"vta\" else env.target_vta_cpu\n\npack_dict = {\n    \"yolov3-tiny\": [\"nn.max_pool2d\", \"cast\", 4, 185],\n}\n\n# Name of Darknet model to compile\n# The ``start_pack`` and ``stop_pack`` labels indicate where\n# to start and e [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Obtain an execution remote.\n---------------------------\nWhen target is 'pynq' or other FPGA backend, reconfigure FPGA and runtime.\nOtherwise, if target is 'sim', execute locally.\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "if env.TARGET not in [\"sim\", \"tsim\"]:\n    # Get remote from tracker node if environment variable is set.\n    # To set up the tracker, you'll need to follow the \"Auto-tuning\n    # a convolutional network for VTA\" tutorial.\n    tracker_host = os.environ.get(\"TVM_TRACKER_HOST\", None)\n    tracker_port = os.environ.get(\"TVM_TRACKER_PORT\", None)\n    # Otherwise if you have a device you want to program directly from\n    # the host, make sure you've set the variables be [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Build the inference graph runtime.\n----------------------------------\nUsing Darknet library load downloaded vision model and compile with Relay.\nThe compilation steps are:\n\n1. Front end translation from Darknet into Relay module.\n2. Apply 8-bit quantization: here we skip the first conv layer,\n   and dense layer which will both be executed in fp32 on the CPU.\n3. Perform graph packing to alter the data layout for tensorization.\n4. Perform constant folding to reduce number [...]
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "# Load pre-configured AutoTVM schedules\nwith autotvm.tophub.context(target):\n    net = __darknetffi__.dlopen(darknet_lib_path).load_network(cfg_path.encode('utf-8'),\n                                                               weights_path.encode('utf-8'),\n                                                               0)\n    dshape = (env.BATCH, net.c, net.h, net.w)\n    dtype = 'float32'\n\n    # Measure build start time\n    build_start = time.time()\n\n    # Start fron [...]
-      ]
-    },
-    {
-      "cell_type": "markdown",
-      "metadata": {},
-      "source": [
-        "Perform image detection inference.\n----------------------------------\nWe run detect on an downloaded image\nDownload test image\n\n"
-      ]
-    },
-    {
-      "cell_type": "code",
-      "execution_count": null,
-      "metadata": {
-        "collapsed": false
-      },
-      "outputs": [],
-      "source": [
-        "[neth, netw] = dshape[2:]\ntest_image = 'person.jpg'\nimg_url = REPO_URL + 'data/' + test_image + '?raw=true'\nimg_path = download_testdata(img_url, test_image, \"data\")\ndata = darknet.load_image(img_path, neth, netw).transpose(1, 2, 0)\n\n# Prepare test image for inference\nplt.imshow(data)\nplt.show()\ndata = data.transpose((2, 0, 1))\ndata = data[np.newaxis, :]\ndata = np.repeat(data, env.BATCH, axis=0)\n\n# Set the network parameters and inputs\nm.set_input('data', data)\n [...]
-      ]
-    }
-  ],
-  "metadata": {
-    "kernelspec": {
-      "display_name": "Python 3",
-      "language": "python",
-      "name": "python3"
-    },
-    "language_info": {
-      "codemirror_mode": {
-        "name": "ipython",
-        "version": 3
-      },
-      "file_extension": ".py",
-      "mimetype": "text/x-python",
-      "name": "python",
-      "nbconvert_exporter": "python",
-      "pygments_lexer": "ipython3",
-      "version": "3.6.10"
-    }
-  },
-  "nbformat": 4,
-  "nbformat_minor": 0
-}
\ No newline at end of file
diff --git a/docs/_downloads/8246644805c8dfcb0b33ca356cc1fafc/deploy_ssd_gluoncv.ipynb b/docs/_downloads/8246644805c8dfcb0b33ca356cc1fafc/deploy_ssd_gluoncv.ipynb
index 8c1219f..00b35bf 100644
--- a/docs/_downloads/8246644805c8dfcb0b33ca356cc1fafc/deploy_ssd_gluoncv.ipynb
+++ b/docs/_downloads/8246644805c8dfcb0b33ca356cc1fafc/deploy_ssd_gluoncv.ipynb
@@ -26,7 +26,7 @@
       },
       "outputs": [],
       "source": [
-        "import tvm\nfrom tvm import te\n\nfrom matplotlib import pyplot as plt\nfrom tvm.relay.testing.config import ctx_list\nfrom tvm import relay\nfrom tvm.contrib import graph_runtime\nfrom tvm.contrib.download import download_testdata\nfrom gluoncv import model_zoo, data, utils"
+        "import tvm\nfrom tvm import te\n\nfrom matplotlib import pyplot as plt\nfrom tvm import relay\nfrom tvm.contrib import graph_runtime\nfrom tvm.contrib.download import download_testdata\nfrom gluoncv import model_zoo, data, utils"
       ]
     },
     {
@@ -44,7 +44,7 @@
       },
       "outputs": [],
       "source": [
-        "supported_model = [\n    'ssd_512_resnet50_v1_voc',\n    'ssd_512_resnet50_v1_coco',\n    'ssd_512_resnet101_v2_voc',\n    'ssd_512_mobilenet1.0_voc',\n    'ssd_512_mobilenet1.0_coco',\n    'ssd_300_vgg16_atrous_voc'\n    'ssd_512_vgg16_atrous_coco',\n]\n\nmodel_name = supported_model[0]\ndshape = (1, 3, 512, 512)\ntarget_list = ctx_list()"
+        "supported_model = [\n    'ssd_512_resnet50_v1_voc',\n    'ssd_512_resnet50_v1_coco',\n    'ssd_512_resnet101_v2_voc',\n    'ssd_512_mobilenet1.0_voc',\n    'ssd_512_mobilenet1.0_coco',\n    'ssd_300_vgg16_atrous_voc'\n    'ssd_512_vgg16_atrous_coco',\n]\n\nmodel_name = supported_model[0]\ndshape = (1, 3, 512, 512)"
       ]
     },
     {
@@ -98,7 +98,7 @@
       },
       "outputs": [],
       "source": [
-        "def run(lib, ctx):\n    # Build TVM runtime\n    m = graph_runtime.GraphModule(lib['default'](ctx))\n    tvm_input = tvm.nd.array(x.asnumpy(), ctx=ctx)\n    m.set_input('data', tvm_input)\n    # execute\n    m.run()\n    # get outputs\n    class_IDs, scores, bounding_boxs = m.get_output(0), m.get_output(1), m.get_output(2)\n    return class_IDs, scores, bounding_boxs\n\nfor target, ctx in target_list:\n    lib = build(target)\n    class_IDs, scores, bounding_boxs = run(lib, ctx)"
+        "def run(lib, ctx):\n    # Build TVM runtime\n    m = graph_runtime.GraphModule(lib['default'](ctx))\n    tvm_input = tvm.nd.array(x.asnumpy(), ctx=ctx)\n    m.set_input('data', tvm_input)\n    # execute\n    m.run()\n    # get outputs\n    class_IDs, scores, bounding_boxs = m.get_output(0), m.get_output(1), m.get_output(2)\n    return class_IDs, scores, bounding_boxs\n\nfor target in [\"llvm\", \"cuda\"]:\n    ctx = tvm.context(target, 0)\n    if ctx.exist:\n        lib = build( [...]
       ]
     },
     {
diff --git a/docs/_downloads/52b04835c256bb81bbf4187f18950a0a/relay_pass_infra.py b/docs/_downloads/9fc6ca792ca6e47e4bdc761ee1b98501/use_pass_infra.py
similarity index 76%
rename from docs/_downloads/52b04835c256bb81bbf4187f18950a0a/relay_pass_infra.py
rename to docs/_downloads/9fc6ca792ca6e47e4bdc761ee1b98501/use_pass_infra.py
index ae7f544..4b842b9 100644
--- a/docs/_downloads/52b04835c256bb81bbf4187f18950a0a/relay_pass_infra.py
+++ b/docs/_downloads/9fc6ca792ca6e47e4bdc761ee1b98501/use_pass_infra.py
@@ -16,26 +16,28 @@
 # under the License.
 # pylint: disable=line-too-long
 """
-.. _tutorial-relay-pass-infra:
+.. _tutorial-use-pass-infra:
 
-How to Use Relay Pass Infra
-===========================
+How to Use TVM Pass Infra
+=========================
 **Author**: `Zhi Chen <https://github.com/zhiics>`_
 
-As the number of optimization passes increases in Relay, it becomes intractable to
+As the number of optimization passes increases in Relay/tir, it becomes intractable to
 execute them and maintain their dependencies manually. Therefore, we have
-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.transform.Sequential` to apply a sequence of passes
-on a Relay program where the dependencies between passes can be resolved by the
+introduced an infrastructure to manage the optimization passes and make it
+applicable to different layers of the IR in the TVM stack.
+
+The optimizations of a Relay/tir program could be applied at various granularity,
+namely function-level and module-level using :py:class:`tvm.relay.transform.FunctionPass`/
+:py:class:`tvm.tir.transform.PrimFuncPass` and :py:class:`tvm.transform.ModulePass`
+respectively. Or users can rely on :py:class:`tvm.transform.Sequential` to apply a sequence of passes
+on a Relay/tir 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`
+the :ref:`pass-infra`
 
-This tutorial demostrates how developers can use the Relay pass infra to perform
-a certain optimization and create an optimization pipeline.
+This tutorial mainly demostrates how developers can use the pass infra to perform
+a certain optimization and create an optimization pipeline for a Relay program.
+The same approach can be used for tir as well.
 """
 
 import numpy as np
@@ -48,6 +50,7 @@ import tvm.relay as relay
 # -------------------------------
 # First of all, we create a simple Relay program for the tutorial. This program
 # will be used by various optimizations of the examples in this tutorial.
+# Similarly, users can write a tir primitive function and apply the tir passes.
 
 def example():
     shape = (1, 64, 54, 54)
@@ -62,7 +65,7 @@ def example():
     z = relay.add(y, c)
     z1 = relay.add(y, c)
     z2 = relay.add(z, z1)
-    return relay.Function([x], z2)
+    return relay.Function([x, weight], z2)
 
 ###############################################################################
 # Let us register layout alteration for a conv2d op so that we can apply the
@@ -153,7 +156,7 @@ print(mod1)
 
 ###############################################################################
 # From the transformed Relay program, we can see that there are still two
-# identical addition operations. This is because `EliminateCommonSubexpr`
+# 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.transform.Sequential`. The pass infra,
@@ -230,10 +233,10 @@ print(mod3)
 ##############################################################################
 # Debug a Pass
 # ------------
-# Relay provides users a plug-and-play style debugging pass that print the IR
-# after a certain pass is done. For example, we can print out the IR on the
-# completion of constant folding and fusion by adding the debugging pass after
-# them.
+# TVM provides users a plug-and-play style debugging pass that print the IR
+# after a certain pass is done through a special pass (``PrintIR``) to dump the IR of the
+# whole module. A slightly modified version of the sequential pass example
+# could be like the following to enable IR dumping for ``FoldConstant`` optimization.
 
 f = example()
 mod = tvm.IRModule.from_expr(f)
@@ -241,8 +244,39 @@ seq = tvm.transform.Sequential([relay.transform.FoldConstant(),
                                 tvm.transform.PrintIR(),
                                 relay.transform.EliminateCommonSubexpr(),
                                 relay.transform.FuseOps(),
-                                tvm.transform.PrintIR()])
-with tvm.transform.PassContext(opt_level=3):
-    mod = seq(mod)
+                                relay.transform.AlterOpLayout()])
+
+# By inserting the ``PrintIR`` pass after ``FoldConstant``, the pass infra will
+# dump out the module IR when ``FoldConstant`` is done. Users can plug in this
+# pass after any pass they want to debug for viewing the optimization effect.
+# 
+# There is a more flexible debugging mechanism also exposed by the build configuration
+# object. One can pass a tracing function which can be used to execute arbitrary code
+# before and/or after each pass. A tracing function will receive a :py::class:`tvm.IRModule`,
+# a :py:class:`tvm.transform.PassInfo` object,
+# and a boolean indicating whether you are executing before, or after a pass.
+# An example is below.
+
+def print_ir(mod, info, is_before):
+    """Print the name of the pass, the IR, only before passes execute."""
+    if is_before:
+        print("Running pass: {}", info)
+        print(mod)
+
+with tvm.transform.PassContext(opt_level=3, trace=print_ir):
+    with tvm.target.create("llvm"):
+        # Perform the optimizations.
+        mod = seq(mod)
+print(mod)
 
 print("done")
+
+##############################################################################
+# Summary
+# -------
+# This tutorial has covered how we can write and invoke passes in TVM more
+# conveniently using the pass infra. Different ways of invoking a pass are also
+# disucssed. Using :py:class:`tvm.transform.Sequential` can largely help
+# users to ease the work of handling multiple optimization passes and their
+# dependencies. In addition, an example is provided to illustrate
+# how we can debug a pass using the ``PrintIR`` and tracing.
diff --git a/docs/_downloads/ca08de6c440df207921d807474d26f06/deploy_ssd_gluoncv.py b/docs/_downloads/ca08de6c440df207921d807474d26f06/deploy_ssd_gluoncv.py
index 46162e1..3643c8d 100644
--- a/docs/_downloads/ca08de6c440df207921d807474d26f06/deploy_ssd_gluoncv.py
+++ b/docs/_downloads/ca08de6c440df207921d807474d26f06/deploy_ssd_gluoncv.py
@@ -27,7 +27,6 @@ import tvm
 from tvm import te
 
 from matplotlib import pyplot as plt
-from tvm.relay.testing.config import ctx_list
 from tvm import relay
 from tvm.contrib import graph_runtime
 from tvm.contrib.download import download_testdata
@@ -70,7 +69,6 @@ supported_model = [
 
 model_name = supported_model[0]
 dshape = (1, 3, 512, 512)
-target_list = ctx_list()
 
 ######################################################################
 # Download and pre-process demo image
@@ -105,9 +103,11 @@ def run(lib, ctx):
     class_IDs, scores, bounding_boxs = m.get_output(0), m.get_output(1), m.get_output(2)
     return class_IDs, scores, bounding_boxs
 
-for target, ctx in target_list:
-    lib = build(target)
-    class_IDs, scores, bounding_boxs = run(lib, ctx)
+for target in ["llvm", "cuda"]:
+    ctx = tvm.context(target, 0)
+    if ctx.exist:
+        lib = build(target)
+        class_IDs, scores, bounding_boxs = run(lib, ctx)
 
 ######################################################################
 # Display result
diff --git a/docs/_downloads/cd8ac9c09164cc04dd9ecd131c536680/micro_tflite.ipynb b/docs/_downloads/cd8ac9c09164cc04dd9ecd131c536680/micro_tflite.ipynb
index 6937630..22e3fa2 100644
--- a/docs/_downloads/cd8ac9c09164cc04dd9ecd131c536680/micro_tflite.ipynb
+++ b/docs/_downloads/cd8ac9c09164cc04dd9ecd131c536680/micro_tflite.ipynb
@@ -80,7 +80,7 @@
       },
       "outputs": [],
       "source": [
-        "input_tensor = \"dense_4_input\"\ninput_shape = (1,)\ninput_dtype = \"float32\"\n\nmod, params = relay.frontend.from_tflite(tflite_model,\n                                         shape_dict={input_tensor: input_shape},\n                                         dtype_dict={input_tensor: input_dtype})\n\n# %%\n# Running on device\n# ----------------------------------------------\n#\n# Setup the device config which is what will be used to communicate\n# with the microcontroller (a [...]
+        "input_tensor = \"dense_4_input\"\ninput_shape = (1,)\ninput_dtype = \"float32\"\n\nmod, params = relay.frontend.from_tflite(tflite_model,\n                                         shape_dict={input_tensor: input_shape},\n                                         dtype_dict={input_tensor: input_dtype})\n\n# %%\n# Running on device\n# ----------------------------------------------\n#\n# Setup the device config which is what will be used to communicate\n# with the microcontroller (a [...]
       ]
     },
     {
diff --git a/docs/_downloads/ed4fcfc19b39f91a14d817676480a454/deploy_detection.py b/docs/_downloads/ed4fcfc19b39f91a14d817676480a454/deploy_detection.py
deleted file mode 100644
index 5039488..0000000
--- a/docs/_downloads/ed4fcfc19b39f91a14d817676480a454/deploy_detection.py
+++ /dev/null
@@ -1,330 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-"""
-Deploy Pretrained Vision Detection Model from Darknet on VTA
-============================================================
-**Author**: `Hua Jiang <https://github.com/huajsj>`_
-
-This tutorial provides an end-to-end demo, on how to run Darknet YoloV3-tiny
-inference onto the VTA accelerator design to perform Image detection tasks.
-It showcases Relay as a front end compiler that can perform quantization (VTA
-only supports int8/32 inference) as well as graph packing (in order to enable
-tensorization in the core) to massage the compute graph for the hardware target.
-"""
-
-######################################################################
-# Install dependencies
-# --------------------
-# To use the autotvm package in tvm, we need to install some extra dependencies.
-# (change "3" to "2" if you use python2):
-#
-# .. code-block:: bash
-#
-# pip3 install "Pillow<7"
-#
-# YOLO-V3-tiny Model with Darknet parsing have dependancy with CFFI and CV2 library,
-# we need to install CFFI and CV2 before executing this script.
-#
-# pip3 install "Pillow<7"
-#
-# pip3 install cffi
-# pip3 install opencv-python
-#
-# Now return to the python code. Import packages.
-
-from __future__ import absolute_import, print_function
-
-import sys
-import os
-import time
-import matplotlib.pyplot as plt
-import numpy as np
-import tvm
-import vta
-from tvm import rpc, autotvm, relay
-from tvm.relay.testing import yolo_detection, darknet
-from tvm.relay.testing.darknet import __darknetffi__
-from tvm.contrib import graph_runtime, graph_runtime, util
-from tvm.contrib.download import download_testdata
-from vta.testing import simulator
-from vta.top import graph_pack
-# Make sure that TVM was compiled with RPC=1
-assert tvm.runtime.enabled("rpc")
-
-##############################################################################
-# Download yolo net configure file, weight file, darknet library file based on
-# Model Name
-# ----------------------------------------------------------------------------
-MODEL_NAME = 'yolov3-tiny'
-REPO_URL = 'https://github.com/dmlc/web-data/blob/master/darknet/'
-
-cfg_path = download_testdata('https://github.com/pjreddie/darknet/blob/master/cfg/'
-                             + MODEL_NAME + '.cfg' + '?raw=true',
-                             MODEL_NAME + '.cfg',
-                             module="darknet")
-weights_path = download_testdata('https://pjreddie.com/media/files/'
-                                 + MODEL_NAME + '.weights' + '?raw=true',
-                                 MODEL_NAME + '.weights',
-                                 module="darknet")
-
-if sys.platform in ['linux', 'linux2']:
-    darknet_lib_path = download_testdata(REPO_URL + 'lib/' + 'libdarknet2.0.so' + '?raw=true',
-                                         'libdarknet2.0.so',
-                                         module="darknet")
-elif sys.platform == 'darwin':
-    darknet_lib_path = download_testdata(REPO_URL+'lib_osx/'+'libdarknet_mac2.0.so'+'?raw=true',
-                                         'libdarknet_mac2.0.so',
-                                         module="darknet")
-else:
-    raise NotImplementedError("Darknet lib is not supported on {} platform"
-                              .format(sys.platform))
-
-##################################################
-# Download yolo categories and illustration front.
-# ------------------------------------------------
-coco_path = download_testdata(REPO_URL + 'data/' + 'coco.names' + '?raw=true',
-                              'coco.names',
-                              module='data')
-font_path = download_testdata(REPO_URL + 'data/' + 'arial.ttf' + '?raw=true',
-                              'arial.ttf',
-                              module='data')
-with open(coco_path) as f:
-    content = f.readlines()
-names = [x.strip() for x in content]
-
-########################################
-# Define the platform and model targets.
-# --------------------------------------
-# Execute on CPU vs. VTA, and define the model.
-
-# Load VTA parameters from the 3rdparty/vta-hw/config/vta_config.json file
-env = vta.get_env()
-# Set ``device=arm_cpu`` to run inference on the CPU
-# or ``device=vta`` to run inference on the FPGA.
-device = "vta"
-target = env.target if device == "vta" else env.target_vta_cpu
-
-pack_dict = {
-    "yolov3-tiny": ["nn.max_pool2d", "cast", 4, 185],
-}
-
-# Name of Darknet model to compile
-# The ``start_pack`` and ``stop_pack`` labels indicate where
-# to start and end the graph packing relay pass: in other words
-# where to start and finish offloading to VTA.
-# the number 4 indicate the the ``start_pack`` index is 4, the
-# number 185 indicate the ``stop_pack index`` is 185, by using
-# name and index number, here we can located to correct place
-# where to start/end when there are multiple ``nn.max_pool2d``
-# or ``cast``, print(mod.astext(show_meta_data=False)) can help
-# to find operator name and index information.
-assert MODEL_NAME in pack_dict
-
-#############################
-# Obtain an execution remote.
-# ---------------------------
-# When target is 'pynq' or other FPGA backend, reconfigure FPGA and runtime.
-# Otherwise, if target is 'sim', execute locally.
-
-if env.TARGET not in ["sim", "tsim"]:
-    # Get remote from tracker node if environment variable is set.
-    # To set up the tracker, you'll need to follow the "Auto-tuning
-    # a convolutional network for VTA" tutorial.
-    tracker_host = os.environ.get("TVM_TRACKER_HOST", None)
-    tracker_port = os.environ.get("TVM_TRACKER_PORT", None)
-    # Otherwise if you have a device you want to program directly from
-    # the host, make sure you've set the variables below to the IP of
-    # your board.
-    device_host = os.environ.get("VTA_RPC_HOST", "192.168.2.99")
-    device_port = os.environ.get("VTA_RPC_PORT", "9091")
-    if not tracker_host or not tracker_port:
-        remote = rpc.connect(device_host, int(device_port))
-    else:
-        remote = autotvm.measure.request_remote(env.TARGET,
-                                                tracker_host,
-                                                int(tracker_port),
-                                                timeout=10000)
-    # Reconfigure the JIT runtime and FPGA.
-    # You can program the FPGA with your own custom bitstream
-    # by passing the path to the bitstream file instead of None.
-    reconfig_start = time.time()
-    vta.reconfig_runtime(remote)
-    vta.program_fpga(remote, bitstream=None)
-    reconfig_time = time.time() - reconfig_start
-    print("Reconfigured FPGA and RPC runtime in {0:.2f}s!".format(reconfig_time))
-
-# In simulation mode, host the RPC server locally.
-else:
-    remote = rpc.LocalSession()
-
-# Get execution context from remote
-ctx = remote.ext_dev(0) if device == "vta" else remote.cpu(0)
-
-####################################
-# Build the inference graph runtime.
-# ----------------------------------
-# Using Darknet library load downloaded vision model and compile with Relay.
-# The compilation steps are:
-#
-# 1. Front end translation from Darknet into Relay module.
-# 2. Apply 8-bit quantization: here we skip the first conv layer,
-#    and dense layer which will both be executed in fp32 on the CPU.
-# 3. Perform graph packing to alter the data layout for tensorization.
-# 4. Perform constant folding to reduce number of operators (e.g. eliminate batch norm multiply).
-# 5. Perform relay build to object file.
-# 6. Load the object file onto remote (FPGA device).
-# 7. Generate graph runtime, `m`.
-#
-
-# Load pre-configured AutoTVM schedules
-with autotvm.tophub.context(target):
-    net = __darknetffi__.dlopen(darknet_lib_path).load_network(cfg_path.encode('utf-8'),
-                                                               weights_path.encode('utf-8'),
-                                                               0)
-    dshape = (env.BATCH, net.c, net.h, net.w)
-    dtype = 'float32'
-
-    # Measure build start time
-    build_start = time.time()
-
-    # Start front end compilation
-    mod, params = relay.frontend.from_darknet(net, dtype=dtype, shape=dshape)
-
-    if target.device_name == "vta":
-    # Perform quantization in Relay
-    # Note: We set opt_level to 3 in order to fold batch norm
-        with tvm.transform.PassContext(opt_level=3):
-            with relay.quantize.qconfig(global_scale=33.0,
-                                        skip_conv_layers=[0],
-                                        store_lowbit_output=True,
-                                        round_for_shift=True):
-                mod = relay.quantize.quantize(mod, params=params)
-            # Perform graph packing and constant folding for VTA target
-            mod = graph_pack(
-                mod["main"],
-                env.BATCH,
-                env.BLOCK_OUT,
-                env.WGT_WIDTH,
-                start_name=pack_dict[MODEL_NAME][0],
-                stop_name=pack_dict[MODEL_NAME][1],
-                start_name_idx=pack_dict[MODEL_NAME][2],
-                stop_name_idx=pack_dict[MODEL_NAME][3])
-    else:
-        mod = mod["main"]
-
-    # Compile Relay program with AlterOpLayout disabled
-    with vta.build_config(disabled_pass={"AlterOpLayout"}):
-        graph, lib, params = relay.build(
-            mod,
-            target=target,
-            params=params,
-            target_host=env.target_host)
-
-    # Measure Relay build time
-    build_time = time.time() - build_start
-    print(MODEL_NAME + " inference graph built in {0:.2f}s!".format(build_time))
-
-    # Send the inference library over to the remote RPC server
-    temp = util.tempdir()
-    lib.save(temp.relpath("graphlib.o"))
-    remote.upload(temp.relpath("graphlib.o"))
-    lib = remote.load_module("graphlib.o")
-
-    # Graph runtime
-    m = graph_runtime.create(graph, lib, ctx)
-
-####################################
-# Perform image detection inference.
-# ----------------------------------
-# We run detect on an downloaded image
-# Download test image
-[neth, netw] = dshape[2:]
-test_image = 'person.jpg'
-img_url = REPO_URL + 'data/' + test_image + '?raw=true'
-img_path = download_testdata(img_url, test_image, "data")
-data = darknet.load_image(img_path, neth, netw).transpose(1, 2, 0)
-
-# Prepare test image for inference
-plt.imshow(data)
-plt.show()
-data = data.transpose((2, 0, 1))
-data = data[np.newaxis, :]
-data = np.repeat(data, env.BATCH, axis=0)
-
-# Set the network parameters and inputs
-m.set_input('data', data)
-m.set_input(**params)
-
-# Perform inference and gather execution statistics
-# More on: :py:method:`tvm.runtime.Module.time_evaluator`
-num = 4 # number of times we run module for a single measurement
-rep = 3 # number of measurements (we derive std dev from this)
-timer = m.module.time_evaluator("run", ctx, number=num, repeat=rep)
-
-if env.TARGET in ["sim", "tsim"]:
-    simulator.clear_stats()
-    timer()
-    sim_stats = simulator.stats()
-    print("\nExecution statistics:")
-    for k, v in sim_stats.items():
-        # Since we execute the workload many times, we need to normalize stats
-        # Note that there is always one warm up run
-        # Therefore we divide the overall stats by (num * rep + 1)
-        print("\t{:<16}: {:>16}".format(k, v // (num * rep + 1)))
-else:
-    tcost = timer()
-    std = np.std(tcost.results) * 1000
-    mean = tcost.mean * 1000
-    print("\nPerformed inference in %.2fms (std = %.2f) for %d samples" % (mean, std, env.BATCH))
-    print("Average per sample inference time: %.2fms" % (mean/env.BATCH))
-
-# Get detection results from out
-thresh = 0.5
-nms_thresh = 0.45
-tvm_out = []
-for i in range(2):
-    layer_out = {}
-    layer_out['type'] = 'Yolo'
-    # Get the yolo layer attributes (n, out_c, out_h, out_w, classes, total)
-    layer_attr = m.get_output(i*4+3).asnumpy()
-    layer_out['biases'] = m.get_output(i*4+2).asnumpy()
-    layer_out['mask'] = m.get_output(i*4+1).asnumpy()
-    out_shape = (layer_attr[0], layer_attr[1]//layer_attr[0],
-                 layer_attr[2], layer_attr[3])
-    layer_out['output'] = m.get_output(i*4).asnumpy().reshape(out_shape)
-    layer_out['classes'] = layer_attr[4]
-    tvm_out.append(layer_out)
-    thresh = 0.560
-
-# Show detection results
-img = darknet.load_image_color(img_path)
-_, im_h, im_w = img.shape
-dets = yolo_detection.fill_network_boxes((netw, neth),
-                                         (im_w, im_h),
-                                         thresh,
-                                         1,
-                                         tvm_out)
-last_layer = net.layers[net.n - 1]
-yolo_detection.do_nms_sort(dets, last_layer.classes, nms_thresh)
-yolo_detection.draw_detections(font_path,
-                               img,
-                               dets,
-                               thresh,
-                               names,
-                               last_layer.classes)
-plt.imshow(img.transpose(1, 2, 0))
-plt.show()
diff --git a/docs/_downloads/fd012fa7b67f4e333acce1d25a8e62bc/micro_tflite.py b/docs/_downloads/fd012fa7b67f4e333acce1d25a8e62bc/micro_tflite.py
index 9838df7..0b0af57 100644
--- a/docs/_downloads/fd012fa7b67f4e333acce1d25a8e62bc/micro_tflite.py
+++ b/docs/_downloads/fd012fa7b67f4e333acce1d25a8e62bc/micro_tflite.py
@@ -152,7 +152,7 @@ mod, params = relay.frontend.from_tflite(tflite_model,
 #
 # Setup the device config which is what will be used to communicate
 # with the microcontroller (a STM32F746 Discovery board)
-TARGET = 'c -device=micro_dev'
+TARGET = 'c --system-lib  --runtime=c'
 dev_config = micro.device.arm.stm32f746xx.generate_config("127.0.0.1", 6666)
 
 ######################################################################
diff --git a/docs/_images/sphx_glr_deploy_detection_001.png b/docs/_images/sphx_glr_deploy_detection_001.png
deleted file mode 100644
index 4433e44..0000000
Binary files a/docs/_images/sphx_glr_deploy_detection_001.png and /dev/null differ
diff --git a/docs/_images/sphx_glr_deploy_detection_thumb.png b/docs/_images/sphx_glr_deploy_detection_thumb.png
deleted file mode 100644
index 7520e7a..0000000
Binary files a/docs/_images/sphx_glr_deploy_detection_thumb.png and /dev/null differ
diff --git a/docs/_images/sphx_glr_relay_pass_infra_thumb.png b/docs/_images/sphx_glr_use_pass_infra_thumb.png
similarity index 100%
rename from docs/_images/sphx_glr_relay_pass_infra_thumb.png
rename to docs/_images/sphx_glr_use_pass_infra_thumb.png
diff --git a/docs/_sources/contribute/code_guide.rst.txt b/docs/_sources/contribute/code_guide.rst.txt
index c932e93..c0b022b 100644
--- a/docs/_sources/contribute/code_guide.rst.txt
+++ b/docs/_sources/contribute/code_guide.rst.txt
@@ -82,6 +82,20 @@ Python Code Styles
 - Stick to language features as in ``python 3.5``
 
 
+Writing Python Tests
+--------------------
+We use `pytest <https://docs.pytest.org/en/stable/>`_ for all python testing. ``tests/python`` contains all the tests.
+
+If you want your test to run over a variety of targets, use the :py:func:`tvm.testing.parametrize_targets` decorator. For example:
+
+.. code:: python
+
+  @tvm.testing.parametrize_targets
+  def test_mytest(target, ctx):
+    ...
+
+will run `test_mytest` with `target="llvm"`, `target="cuda"`, and few others. This also ensures that your test is run on the correct hardware by the CI. If you only want to test against a couple targets use `@tvm.testing.parametrize_targets("target_1", "target_2")`. If you want to test on a single target, use the associated decorator from :py:func:`tvm.testing`. For example, CUDA tests use the `@tvm.testing.requires_cuda` decorator.
+
 Handle Integer Constant Expression
 ----------------------------------
 We often need to handle constant integer expressions in TVM. Before we do so, the first question we want to ask is that is it really necessary to get a constant integer. If symbolic expression also works and let the logic flow, we should use symbolic expression as much as possible. So the generated code works for shapes that are not known ahead of time.
diff --git a/docs/_sources/contribute/pull_request.rst.txt b/docs/_sources/contribute/pull_request.rst.txt
index 128ae80..935f2d5 100644
--- a/docs/_sources/contribute/pull_request.rst.txt
+++ b/docs/_sources/contribute/pull_request.rst.txt
@@ -32,8 +32,22 @@ This is a quick guide to submit a pull request, please also refer to the detaile
 
   .. code:: bash
 
-    # Reproduce the lint procedure in the CI.
+    # Run all lint steps.
+    docker/lint.sh
+
+    # To run steps individually, specify their step names on the command-line. An incorrectly
+    # spelled step name causes the tool to print all available steps.
+    docker/lint.sh <step_name> ...
+
+    # While the lint commands used should be identical to those run in CI, this command reproduces
+    # the CI lint procedure exactly (typically helpful for debugging lint script errors).
     docker/bash.sh tvmai/ci-lint ./tests/scripts/task_lint.sh
+
+  When the clang-format lint check fails, run git-clang-format as follows to automatically reformat
+  your code:
+
+  .. code:: bash
+
     # Run clang-format check for all the files that changed since upstream/master
     docker/bash.sh tvmai/ci-lint ./tests/lint/git-clang-format.sh upstream/master
 
diff --git a/docs/_sources/deploy/arm_compute_lib.rst.txt b/docs/_sources/deploy/arm_compute_lib.rst.txt
index 6dc8df0..e3399c5 100644
--- a/docs/_sources/deploy/arm_compute_lib.rst.txt
+++ b/docs/_sources/deploy/arm_compute_lib.rst.txt
@@ -15,8 +15,9 @@
     specific language governing permissions and limitations
     under the License.
 
-Relay Arm|reg| Compute Library Integration
-==========================================
+Relay Arm :sup:`®` Compute Library Integration
+==============================================
+**Author**: `Luke Hutton <https://github.com/lhutton1>`_
 
 Introduction
 ------------
@@ -26,6 +27,35 @@ and GPU's. Currently the integration offloads operators to ACL to use hand-craft
 routines in the library. By offloading select operators from a relay graph to ACL we can achieve
 a performance boost on such devices.
 
+Installing Arm Compute Library
+------------------------------
+
+Before installing Arm Compute Library, it is important to know what architecture to build for. One way
+to determine this is to use `lscpu` and look for the "Model name" of the CPU. You can then use this to
+determine the architecture by looking online.
+
+We recommend two different ways to build and install ACL:
+
+* Use the script located at `docker/install/ubuntu_install_arm_compute_library.sh`. You can use this
+  script for building ACL from source natively or for cross-compiling the library on an x86 machine.
+  You may need to change the architecture of the device you wish to compile for by altering the
+  `target_arch` variable. Binaries will be built from source and installed to the location denoted by
+  `install_path`.
+* Alternatively, you can download and use pre-built binaries from:
+  https://github.com/ARM-software/ComputeLibrary/releases. When using this package, you will need to
+  select the binaries for the architecture you require and make sure they are visible to cmake. This
+  can be done like so:
+
+  .. code:: bash
+
+      cd <acl-prebuilt-package>/lib
+      mv ./linux-<architecture-to-build-for>-neon/* .
+
+
+In both cases you will need to set USE_ARM_COMPUTE_LIB_GRAPH_RUNTIME to the path where the ACL package
+is located. Cmake will look in /path-to-acl/ along with /path-to-acl/lib and /path-to-acl/build for the
+required binaries. See the section below for more information on how to use these configuration options.
+
 Building with ACL support
 -------------------------
 
@@ -42,6 +72,20 @@ to compile an ACL module on an x86 machine and then run the module on a remote A
 need to use USE_ARM_COMPUTE_LIB=ON on the x86 machine and USE_ARM_COMPUTE_LIB_GRAPH_RUNTIME=ON on the remote
 AArch64 device.
 
+By default both options are set to OFF. Using USE_ARM_COMPUTE_LIB_GRAPH_RUNTIME=ON will mean that ACL
+binaries are searched for by cmake in the default locations
+(see https://cmake.org/cmake/help/v3.4/command/find_library.html). In addition to this,
+/path-to-tvm-project/acl/ will also be searched. It is likely that you will need to set your own path to
+locate ACL. This can be done by specifying a path in the place of ON.
+
+These flags should be set in your config.cmake file. For example:
+
+.. code:: cmake
+
+    set(USE_ARM_COMPUTE_LIB ON)
+    set(USE_ARM_COMPUTE_LIB_GRAPH_RUNTIME /path/to/acl)
+
+
 Usage
 -----
 
@@ -74,7 +118,7 @@ max_pool2d operator).
 
 Annotate and partition the graph for ACL.
 
-..code:: python
+.. code:: python
 
     from tvm.relay.op.contrib.arm_compute_lib import partition_for_arm_compute_lib
     module = partition_for_arm_compute_lib(module)
@@ -100,7 +144,7 @@ Export the module.
 
 Run Inference. This must be on an Arm device. If compiling on x86 device and running on AArch64,
 consider using the RPC mechanism. Tutorials for using the RPC mechanism:
-https://tvm.apache.org/docs/tutorials/cross_compilation_and_rpc.html#sphx-glr-tutorials-cross-compilation-and-rpc-py
+https://tvm.apache.org/docs/tutorials/get_started/cross_compilation_and_rpc.html
 
 .. code:: python
 
@@ -118,29 +162,76 @@ More examples
 The example above only shows a basic example of how ACL can be used for offloading a single
 Maxpool2D. If you would like to see more examples for each implemented operator and for
 networks refer to the tests: `tests/python/contrib/test_arm_compute_lib`. Here you can modify
-`infrastructure.py` to use the remote device you have setup.
+`test_config.json` to configure how a remote device is created in `infrastructure.py` and,
+as a result, how runtime tests will be run.
+
+An example configuration for `test_config.json`:
+
+* connection_type - The type of RPC connection. Options: local, tracker, remote.
+* host - The host device to connect to.
+* port - The port to use when connecting.
+* target - The target to use for compilation.
+* device_key - The device key when connecting via a tracker.
+* cross_compile - Path to cross compiler when connecting from a non-arm platform e.g. aarch64-linux-gnu-g++.
+
+.. code:: json
+
+    {
+      "connection_type": "local",
+      "host": "localhost",
+      "port": 9090,
+      "target": "llvm -mtriple=aarch64-linux-gnu -mattr=+neon",
+      "device_key": "",
+      "cross_compile": ""
+    }
 
 
 Operator support
 ----------------
-+--------------+-------------------------------------------------------------------------+
-| Relay Node   | Remarks                                                                 |
-+==============+=========================================================================+
-| nn.conv2d    | fp32:                                                                   |
-|              |   Simple: nn.conv2d                                                     |
-|              |   Composite: nn.pad?, nn.conv2d, nn.bias_add?, nn.relu?                 |
-|              |                                                                         |
-|              | (only groups = 1 supported)                                             |
-+--------------+-------------------------------------------------------------------------+
-| qnn.conv2d   | uint8:                                                                  |
-|              |   Composite: nn.pad?, nn.conv2d, nn.bias_add?, nn.relu?, qnn.requantize |
-|              |                                                                         |
-|              | (only groups = 1 supported)                                             |
-+--------------+-------------------------------------------------------------------------+
-| nn.maxpool2d | fp32, uint8                                                             |
-+--------------+-------------------------------------------------------------------------+
-| reshape      | fp32, uint8                                                             |
-+--------------+-------------------------------------------------------------------------+
++----------------------+-------------------------------------------------------------------------+
+| Relay Node           | Remarks                                                                 |
++======================+=========================================================================+
+| nn.conv2d            | fp32:                                                                   |
+|                      |   Simple: nn.conv2d                                                     |
+|                      |   Composite: nn.pad?, nn.conv2d, nn.bias_add?, nn.relu?                 |
+|                      |                                                                         |
+|                      | (only groups = 1 supported)                                             |
++----------------------+-------------------------------------------------------------------------+
+| qnn.conv2d           | uint8:                                                                  |
+|                      |   Composite: nn.pad?, nn.conv2d, nn.bias_add?, nn.relu?, qnn.requantize |
+|                      |                                                                         |
+|                      | (only groups = 1 supported)                                             |
++----------------------+-------------------------------------------------------------------------+
+| nn.dense             | fp32:                                                                   |
+|                      |   Simple: nn.dense                                                      |
+|                      |   Composite: nn.dense, nn.bias_add?                                     |
++----------------------+-------------------------------------------------------------------------+
+| qnn.dense            | uint8:                                                                  |
+|                      |   Composite: qnn.dense, nn.bias_add?, qnn.requantize                    |
++----------------------+-------------------------------------------------------------------------+
+| nn.max_pool2d        | fp32, uint8                                                             |
++----------------------+-------------------------------------------------------------------------+
+| nn.global_max_pool2d | fp32, uint8                                                             |
++----------------------+-------------------------------------------------------------------------+
+| nn.avg_pool2d        | fp32:                                                                   |
+|                      |    Simple: nn.avg_pool2d                                                |
+|                      |                                                                         |
+|                      | uint8:                                                                  |
+|                      |    Composite: cast(int32), nn.avg_pool2d, cast(uint8)                   |
++----------------------+-------------------------------------------------------------------------+
+| nn.global_avg_pool2d | fp32:                                                                   |
+|                      |    Simple: nn.global_avg_pool2d                                         |
+|                      |                                                                         |
+|                      | uint8:                                                                  |
+|                      |    Composite: cast(int32), nn.avg_pool2d, cast(uint8)                   |
++----------------------+-------------------------------------------------------------------------+
+| power(of 2) +        | A special case for L2 pooling.                                          |
+| nn.avg_pool2d +      |                                                                         |
+| sqrt                 | fp32:                                                                   |
+|                      |    Composite: power(of 2), nn.avg_pool2d, sqrt                          |
++----------------------+-------------------------------------------------------------------------+
+| reshape              | fp32, uint8                                                             |
++----------------------+-------------------------------------------------------------------------+
 
 .. note::
     A composite operator is a series of operators that map to a single Arm Compute Library operator. You can view this
@@ -155,12 +246,12 @@ what needs to be changed and where, it will not however dive into the complexiti
 individual operator. This is left to the developer.
 
 There are a series of files we need to make changes to:
+
 * `python/relay/op/contrib/arm_compute_lib.py` In this file we define the operators we wish to offload using the
-`op.register` decorator. This will mean the annotation pass recognizes this operator as ACL
-offloadable.
+  `op.register` decorator. This will mean the annotation pass recognizes this operator as ACL offloadable.
 * `src/relay/backend/contrib/arm_compute_lib/codegen.cc` Implement `Create[OpName]JSONNode` method. This is where we
-declare how the operator should be represented by JSON. This will be used to create the ACL module.
-* `src/runtime/contrib/arm_compute_lib/acl_kernel.h` Implement `Create[OpName]Layer` method. This is where we
-define how the JSON representation can be used to create an ACL function. We simply define how to
-translate from the JSON representation to ACL API.
+  declare how the operator should be represented by JSON. This will be used to create the ACL module.
+* `src/runtime/contrib/arm_compute_lib/acl_runtime.cc` Implement `Create[OpName]Layer` method. This is where we
+  define how the JSON representation can be used to create an ACL function. We simply define how to
+  translate from the JSON representation to ACL API.
 * `tests/python/contrib/test_arm_compute_lib` Add unit tests for the given operator.
diff --git a/docs/_sources/dev/hybrid_script.rst.txt b/docs/_sources/dev/hybrid_script.rst.txt
index 7bb5e23..939cf05 100644
--- a/docs/_sources/dev/hybrid_script.rst.txt
+++ b/docs/_sources/dev/hybrid_script.rst.txt
@@ -91,3 +91,10 @@ Math Intrinsics
 So far, these math intrinsics, ``log``, ``exp``, ``sigmoid``, ``tanh``, ``power``, and ``popcount``, are supported.
 Math intrinsics will be imported by the decorator. Most of the intrinsics are borrowed by library implementation
 except ``popcount`` and ``sigmoid``. I implemented them manually.
+
+
+Casting
+~~~~~~~
+
+You can cast values by using the keywords ``uint8``, ``uint16`` ``uint32``, ``uint64``, ``int8``, ``int16``, ``int32``, ``int64``, 
+``float16``, ``float32``, ``float64``.
diff --git a/docs/_sources/dev/index.rst.txt b/docs/_sources/dev/index.rst.txt
index c448cb0..2e577df 100644
--- a/docs/_sources/dev/index.rst.txt
+++ b/docs/_sources/dev/index.rst.txt
@@ -295,6 +295,11 @@ The following code snippet gives an example of PassContext configuration.
 Op is the common class to represent all system-defined primitive operator/intrinsics.
 Developers can register new Ops as well as their additional attributes(e.g. whether the Op is elementwise) to the system.
 
+.. toctree::
+   :maxdepth: 1
+
+   pass_infra
+
 
 tvm/target
 ----------
@@ -353,7 +358,6 @@ memory(for memory optimization).
 
    relay_intro
    relay_op_strategy
-   relay_pass_infra
    convert_layout
 
 
diff --git a/docs/_sources/dev/relay_pass_infra.rst.txt b/docs/_sources/dev/pass_infra.rst.txt
similarity index 67%
rename from docs/_sources/dev/relay_pass_infra.rst.txt
rename to docs/_sources/dev/pass_infra.rst.txt
index 446a91b..6fd150d 100644
--- a/docs/_sources/dev/relay_pass_infra.rst.txt
+++ b/docs/_sources/dev/pass_infra.rst.txt
@@ -15,24 +15,28 @@
     specific language governing permissions and limitations
     under the License.
 
-.. _relay-pass-infra:
+.. _pass-infra:
 
-Relay Pass Infrastructure
-=========================
+Pass Infrastructure
+===================
 
-Relay features a series of optimization passes which improve performance metrics
+Both Relay and TVM IR contain a series of optimization passes which improve performance metrics
 of models such as mean inference, memory footprint, or power consumption for
 specific devices. There is a suite of standard optimizations as well as machine
 learning-specific optimizations including constant folding, dead code
-elimination, operator layout alteration, and operator fusion, etc. Each of these
-passes is structured as a Relay-to-Relay transformation on the abstract syntax
-tree (AST) using the analysis result collected during and/or before traversal.
+elimination, operator layout alteration, operator fusion, buffer handling, and
+loop transformation, etc. Each of these passes is structured as a ir-to-ir
+transformation using the analysis result collected during and/or before traversal.
 
-However, as Relay evolves quickly, the need for a more systematic and efficient
-way to manage these passes is becoming apparent. This doc describes the design of
-such an infra that takes the advantage of the way production compilers are used to
-manage the optimization passes and the style modern deep learning frameworks
-adopted to build up layers.
+However, as TVM evolves quickly, the need for a more systematic and efficient
+way to manage these passes is becoming apparent. In addition, a generic
+framework that manages the passes across different layers of the TVM stack (e.g.
+Relay and tir) paves the way for developers to quickly prototype and plug the
+implemented passes into the system.
+
+This doc describes the design of such an infra that takes the advantage of the
+way production compilers are used to manage the optimization passes and the style
+modern deep learning frameworks adopted to build up layers.
 
 For example, many existing production compilers, such as GCC and LLVM, employ
 pass managers to effectively manage the execution of passes. Initially managing
@@ -88,10 +92,10 @@ needs to be executed when running under a user-provided optimization level. The
 
 .. code:: c++
 
-    class PassInfoNode : public RelayNode {
-      std::string name;
+    class PassInfoNode : public Object {
+      String name;
       int opt_level;
-      std::vector<std::string> required;
+      Array<String> required;
     };
 
 PassContext
@@ -111,17 +115,16 @@ This class is designed for users to conveniently write the Python ``with``
 syntax to perform optimizations under a certain configuration. In addition, the
 users can obtain the context that is available within a certain program scope in
 a thread-safe way through ``PassContext::Current()``, since a thread-local store
-``RelayPassContextThreadLocalStore`` is used to hold the created pass context
+``PassContextThreadLocalStore`` is used to hold the created pass context
 objects. Examples will be provided later to show how we can use both the C++ and
 Python APIs to create a compilation pipeline using pass context.
 
 .. code:: c++
 
-    class PassContextNode : public RelayNode {
+    class PassContextNode : public Object {
      public:
       ErrorReporter err_reporter;
       int opt_level{2};
-      int fallback_device{static_cast<int>(kDLCPU)};
       tvm::Array<tvm::Expr> required_pass;
       tvm::Array<tvm::Expr> disabled_pass;
     };
@@ -142,32 +145,32 @@ Python APIs to create a compilation pipeline using pass context.
       friend class tvm::With<PassContext>;
     };
 
-    struct RelayPassContextThreadLocalEntry {
+    struct PassContextThreadLocalEntry {
       /*! \brief The default pass context. */
       PassContext default_context;
       /*! \brief The current pass context. */
       std::stack<PassContext> context_stack;
-      RelayPassContextThreadLocalEntry() {
+      PassContextThreadLocalEntry() {
         default_context = PassContext(make_node<PassContextNode>());
       }
     };
 
     /*! \brief The thread-local store to hold the pass context. */
-    typedef dmlc::ThreadLocalStore<RelayPassContextThreadLocalEntry>
-         RelayPassContextThreadLocalStore;
+    typedef dmlc::ThreadLocalStore<PassContextThreadLocalEntry>
+         PassContextThreadLocalStore;
 
 Pass Constructs
 ^^^^^^^^^^^^^^^
 
 The pass infra is designed in a hierarchical manner, and it could work at
-different granularities of Relay programs. A pure virtual class ``PassNode`` is
+different granularities of Relay/tir programs. A pure virtual class ``PassNode`` is
 introduced to serve as the base of the different optimization passes. This class
 contains several virtual methods that must be implemented by the
-subclasses at the level of modules, functions, or sequences of passes..
+subclasses at the level of modules, functions, or sequences of passes.
 
 .. code:: c++
 
-    class PassNode : RelayNode {
+    class PassNode : Object {
       virtual PassInfo Info() const = 0;
       virtual Module operator()(const IRModule& mod
                                 const PassContext& pass_ctx) const = 0;
@@ -192,7 +195,8 @@ Module level passes are geared mainly for global and inter-procedural
 optimizations (IPO), which are similar to the module pass used in LLVM. Some
 typical passes in Relay that need the global picture of a module, such as
 A-normal form conversion and lambda lifting, etc., fall into this set. At this
-level, users can even add and/or delete functions in a module.
+level, users can even add and/or delete functions in a module. Note that all
+passes 
 
 .. code:: c++
 
@@ -215,13 +219,14 @@ Function-Level Passes
 ^^^^^^^^^^^^^^^^^^^^^
 
 Function-level passes are used to implement various intra-function level
-optimizations for a given Relay module. It fetches one function at a time from
+optimizations for a given Relay/tir module. It fetches one function at a time from
 the function list of a module for optimization and yields a rewritten Relay
-function. Most of Relay's passes can be classified into this category, such as
-common subexpression elimination and inference simplification, etc.
+``Function`` or tir ``PrimFunc``. Most of passes can be classified into this category, such as
+common subexpression elimination and inference simplification in Relay as well as vectorization
+and flattening storage in tir, etc.
 
-Note that the scope of passes at this level is a Relay function. Therefore, we
-cannot add or delete a function through these passes as they are not aware of
+Note that the scope of passes at this level is either a Relay function or a tir primitive function.
+Therefore, we cannot add or delete a function through these passes as they are not aware of
 the global information.
 
 .. code:: c++
@@ -312,74 +317,25 @@ favorably use Python APIs to create a specific pass object.
 
 .. code:: c++
 
-    FunctionPass CreateFunctionPass(std::string name,
-                                    int opt_level,
-                                    PassFunc pass_func);
-
-    ModulePass CreateModulePass(std::string name,
-                                int opt_level,
-                                PassFunc pass_func);
-
-    SequentialPass CreateSequentialPass(std::string name,
-                                        int opt_level,
-                                        Array<Pass> passes,
-                                        Array<tvm::Expr> disabled);
-
-C++ Sequential Example
-^^^^^^^^^^^^^^^^^^^^^^
-
-Let's now take an example to illustrate how the pass infra works on
-``SequentialPass``. For illustrative purpose, only a code snippet is provided.
-First, we create a simple Relay program, ``y = f(x)``. Then, we build a module
-based on the function. After creating the module, we instantiate a sequential
-pass object which contains some standard Relay optimization passes, including
-type inference, dead code elimination, common subexpression elimination, and
-layout alteration.
-
-Finally, a pass context is constructed and the passes will be executed
-sequentially. During the execution of these passes, the pass dependency will be
-resolved automatically as we have encoded the dependent passes during
-registration.
-
-.. code:: c++
-
-    // Create a simple Relay program.
-    auto tensor_type = relay::TensorType({}, tvm::Bool());
-    auto x = relay::Var("x", relay::Type());
-    auto f = relay::Function(tvm::Array<relay::Var>{ x }, x, relay::Type(), {});
+    Pass CreateFunctionPass(
+        const runtime::TypedPackedFunc<PrimFunc(PrimFunc, IRModule, PassContext)>& pass_func,
+        int opt_level,
+        String name,
+        Array<String> required);
 
-    auto y = relay::Var("y", tensor_type);
-    auto call = relay::Call(f, tvm::Array<relay::Expr>{ y });
-    auto fx = relay::Function(tvm::Array<relay::Var>{ y }, call, relay::Type(), {});
+    Pass CreatePrimFuncPass(
+        const runtime::TypedPackedFunc<PrimFunc(PrimFunc, IRModule, PassContext)>& pass_func,
+        int opt_level,
+        String name,
+        Array<String> required);
 
-    // Create a module for optimization.
-    auto mod = IRModule::FromExpr(fx);
+    Pass CreateModulePass(
+        const runtime::TypedPackedFunc<PrimFunc(PrimFunc, IRModule, PassContext)>& pass_func,
+        int opt_level,
+        String name,
+        Array<String> required);
 
-    // Create a sequential pass.
-    tvm::Array<relay::transform::Pass> pass_seqs{
-       relay::transform::InferType(),
-       relay::transform::DeadCodeElimination(),
-       relay::transform::EliminateCommonSubexpr(),
-       relay::transform::AlterOpLayout()
-    };
-    relay::transform::Pass seq = relay::transform::Sequential(pass_seqs);
-
-    // Create a pass context for the optimization.
-    auto ctx = relay::transform::PassContext::Create();
-    ctx->opt_level = 2;
-    ctx->fallback_device = kDLCPU;
-
-    // Use the Python with syntax to execute the sequence of optimizations.
-    tvm::With<relay::transform::PassContext> scope(ctx);
-    mod = seq(mod);
-
-    // View the updated module.
-    LOG(INFO) << relay::AsText(mod) << std::endl;
-
-Other types of passes should be directly invoked for execution on a module. For
-example, users can directly apply const folding pass on a given module, ``mod
-= transform::FoldConstant()(mod)``. However, it is users' responsibility to
-execute the required passes explicitly.
+    Pass Sequential(tvm::Array<Pass> passes, PassInfo pass_info);
 
 Pass Registration
 ~~~~~~~~~~~~~~~~~
@@ -400,7 +356,7 @@ In order to register this pass to the pass infra, we first need to decide at
 which level this pass will be performed. As const folding happens on individual
 functions, we should intuitively create a ``FunctionPass`` for it through
 ``CreateFunctionPass``. The ``pass_func`` is returned as a packed function that
-invokes the ``Expr`` to ``Expr`` API on each function in a Relay module. ``{}``
+invokes the ``Expr`` to ``Expr`` API on each function in a `IRModule`. ``{}``
 indicates that no prerequisite is required for this pass. Otherwise, the pass
 developer has to identify and list them.
 
@@ -414,8 +370,8 @@ Python when needed.
     namespace transform {
 
     Pass FoldConstant() {
-      runtime::TypedPackedFunc<Function(Function, Module, PassContext)> pass_func =
-        [=](Function f, Module m, PassContext pc) {
+      runtime::TypedPackedFunc<Function(Function, IRModule, PassContext)> pass_func =
+        [=](Function f, IRModule m, PassContext pc) {
           return Downcast<Function>(FoldConstant(f));
       };
       return CreateFunctionPass(pass_func, 2, "FoldConstant", {});
@@ -438,7 +394,8 @@ Python Frontend
 
 Only some simple APIs are needed for the frontend side. For example, we can
 provide users the following APIs to create and execute a pass (full
-implementation is provided in `python/tvm/relay/transform.py`_). The backend
+implementation is provided in `python/tvm/relay/transform.py`_ and
+`python/tvm/ir/transform.py`_). The backend
 receives the information and decides which function it should use to create
 a Pass object.
 
@@ -452,13 +409,13 @@ a certain scope.
 
 .. code:: python
 
-    @register_relay_node
-    class PassContext(RelayNode):
+    @tvm._ffi.register_object("transform.PassContext")
+    class PassContext(tvm.runtime.Object):
         def __enter__(self):
             _transform.EnterPassContext(self)
             return self
 
-        def __exit__(self, ptype, value, trace):
+        def __exit__(self, ptype, value, trace, config):
             _transform.ExitPassContext(self)
 
         @staticmethod
@@ -466,10 +423,19 @@ a certain scope.
             """Return the current pass context."""
             return _transform.GetCurrentPassContext()
 
-A ``PassContext`` object can be instantiated through the ``build_config`` API
-which was used by Relay to configure the compilation options, including the
-optimization level, fallback device for heterogeneous execution, and
-required/disabled passes.
+A ``PassContext`` is used to configure the compilation options, including the
+optimization level and required/disabled passes. It can also take a dictionary
+of configs so that different passes can conveniently fetch the passed data, such
+as fallback device info and step/depth for loop unrolling, etc. In order to
+enable fetching the required config, the key must be registered through
+``TVM_REGISTER_PASS_CONFIG_OPTION``. For example, the following is used by the
+loop unrolling pass
+
+.. code:: c++
+
+    TVM_REGISTER_PASS_CONFIG_OPTION("tir.UnrollLoop", UnrollLoopConfig);
+
+Please refer to `src/tir/transforms/unroll_loop.cc`_ for more details.
 
 Pass Objects
 ^^^^^^^^^^^^
@@ -493,7 +459,8 @@ example, ``module_pass``, ``function_pass``, and ``sequential`` are provided to
 users so that they can customize their own pass or pass pipeline.
 
 For all the passes that are implemented in the C++ backend, we provide
-a corresponding Python API in `python/tvm/relay/transform.py`_. For instance,
+corresponding Python APIs in `python/tvm/ir/transform.py`_ and
+`python/tvm/relay/transform.py`_, respectively. For instance,
 const folding has a Python API like the following:
 
 .. code:: python
@@ -555,95 +522,9 @@ instance, an example function-level pass could be written as the following:
 
 
 Alternatively, users can also directly register a pass without using the
-decorators and then invoke it. Let's use ``Sequential`` to demo this scenario.
-
-Python Sequential Example
-^^^^^^^^^^^^^^^^^^^^^^^^^
-
-This example not only illustrates how users can directly create a sequential
-pass using Python APIs (this could be applied to module- and function-level
-passes as well), but also explains how we can build an optimization pipeline
-using ``Sequential`` associated with other types of passes.
-
-.. code:: python
-
-    # Create a simple Relay program.
-    shape = (1, 2, 3)
-    c_data = np.array(shape).astype("float32")
-    tp = relay.TensorType(shape, "float32")
-    c = relay.const(c_data)
-    x = relay.var("x", tp)
-    y = relay.add(c, c)
-    y = relay.multiply(y, relay.const(2, "float32"))
-    y = relay.add(x, y)
-    z = relay.add(y, c)
-    z1 = relay.add(y, c)
-    z2 = relay.add(z, z1)
-    func = relay.Function([x], z2)
-
-    # Customize the optimization pipeline.
-    seq = tvm.transform.Sequential([
-        relay.transform.InferType(),
-        relay.transform.FoldConstant(),
-        relay.transform.EliminateCommonSubexpr(),
-        relay.transform.AlterOpLayout()
-    ])
-
-    # Create a module to perform optimizations.
-    mod = relay.Module({"main": func})
-
-    # Users can disable any passes that they don't want to execute by providing
-    # a list, e.g. disabled_pass=["EliminateCommonSubexpr"].
-    with relay.build_config(opt_level=3):
-        with tvm.target.create("llvm"):
-            # Perform the optimizations.
-            mod = seq(mod)
-
-Debugging
-~~~~~~~~~
-
-The pass infra provides a special pass (``PrintIR``) to dump the IR of the
-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
-``FoldConstant`` optimization.
-
-.. code:: python
-
-    seq = tvm.transform.Sequential([
-        relay.transform.InferType(),
-        relay.transform.FoldConstant(),
-        transform.PrintIR(),
-        relay.transform.EliminateCommonSubexpr(),
-        relay.transform.AlterOpLayout()
-    ])
-
-By inserting the ``PrintIR`` pass after ``FoldConstant``, the pass infra will
-dump out the module IR when ``FoldConstant`` is done. Users can plug in this
-pass after any pass they want to debug for viewing the optimization effect.
-
-There is a more flexible debugging mechanism also exposed by the build configuration
-object. One can pass a tracing function which can be used to execute arbitrary code
-before and/or after each pass. A tracing function will receive a ``IRModule``, ``PassInfo``,
-and a boolean indicating whether you are executing before, or after a pass.
-An example is below.
-
-.. code:: python
-
-    def print_ir(mod, info, is_before):
-        """Print the name of the pass, the IR, only before passes execute."""
-        if is_before:
-            print(f"Running pass: {}", info)
-            print(mod)
-
-    with relay.build_config(opt_level=3, trace=print_ir):
-            with tvm.target.create("llvm"):
-                # Perform the optimizations.
-                mod = seq(mod)
-
-
-For more pass infra related examples in Python and C++, please refer to
-`tests/python/relay/test_pass_manager.py`_ and
-`tests/cpp/relay_transform_sequential.cc`_, respectively.
+decorators and then invoke it. For more examples about how to customize your own
+optimization pipeline and debug Relay and tir passes, please refer to the
+`use pass infra`_ tutorial.
 
 .. _Sequential: https://pytorch.org/docs/stable/nn.html?highlight=sequential#torch.nn.Sequential
 
@@ -659,8 +540,10 @@ For more pass infra related examples in Python and C++, please refer to
 
 .. _python/tvm/relay/transform.py: https://github.com/apache/incubator-tvm/blob/master/python/tvm/relay/transform.py
 
-.. _tests/python/relay/test_pass_manager.py: https://github.com/apache/incubator-tvm/blob/master/tests/python/relay/test_pass_manager.py
+.. _include/tvm/relay/transform.h: https://github.com/apache/incubator-tvm/blob/master/include/tvm/relay/transform.h
+
+.. _python/tvm/ir/transform.py: https://github.com/apache/incubator-tvm/blob/master/python/tvm/ir/transform.py
 
-.. _tests/cpp/relay_transform_sequential.cc: https://github.com/apache/incubator-tvm/blob/master/tests/cpp/relay_transform_sequential.cc
+.. _src/tir/transforms/unroll_loop.cc: https://github.com/apache/incubator-tvm/blob/master/src/tir/transforms/unroll_loop.cc
 
-.. _include/tvm/relay/transform.h: https://github.com/apache/incubator-tvm/blob/master/include/tvm/relay/transform.h
+.. _use pass infra: https://github.com/apache/incubator-tvm/blob/master/tutorials/dev/use_pass_infra.py
diff --git a/docs/_sources/dev/relay_add_pass.rst.txt b/docs/_sources/dev/relay_add_pass.rst.txt
index fc26559..e1a5e7e 100644
--- a/docs/_sources/dev/relay_add_pass.rst.txt
+++ b/docs/_sources/dev/relay_add_pass.rst.txt
@@ -30,7 +30,7 @@ compiler passes.
 At a high level, there are two key components to writing a pass:
 
 - Creating one or more C++ classes that traverse the program
-- Wrapping the traversal implementation and its metadata in the pass manager API so it can neatly interface with the :ref:`relay-pass-infra`
+- Wrapping the traversal implementation and its metadata in the pass manager API so it can neatly interface with the :ref:`pass-infra`
 
 To begin, we'll give an overview of the key mechanisms for writing a compiler
 pass. Then, we'll walk through a concrete example of the constant-folding
@@ -335,7 +335,7 @@ class that takes an expression and internally creates and uses a
 Registering a Pass with the Pass Manager
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-*Note: please see the documentation on the :ref:`relay-pass-infra` for more specific detail on this subject.*
+*Note: please see the documentation on the :ref:`pass-infra` for more specific detail on this subject.*
 
 With the AST traversers written, the pass can be registered to become a TVM
 API endpoint with the following code:
@@ -395,7 +395,7 @@ the below code applies both the ``FoldConstant`` and ``ToANormalForm`` passes
     new_mod = seq(mod)
 
 More detail about registration can be found in :ref:`tvm-runtime-system` and more
-information about the pass manager interface can be found in :ref:`relay-pass-infra`.
+information about the pass manager interface can be found in :ref:`pass-infra`.
 Relay's standard passes are listed in `include/tvm/relay/transform.h`_ and implemented
 in `src/relay/pass/`_.
 
diff --git a/docs/_sources/dev/virtual_machine.rst.txt b/docs/_sources/dev/virtual_machine.rst.txt
index 059878f..ae6cac2 100644
--- a/docs/_sources/dev/virtual_machine.rst.txt
+++ b/docs/_sources/dev/virtual_machine.rst.txt
@@ -110,7 +110,7 @@ InvokePacked
 Invoke the packed function denoted by ``packed_index``. The ``arity``
 and ``output_size`` are used to inform the VM how many inputs and
 outputs to expect. ``packed_args`` stores the list of argument registers. Note ``Index``
-is an alais of ``int64_t``, and it will be used in other instructions as well.
+is an alias of ``int64_t``, and it will be used in other instructions as well.
 
 AllocTensor
 ^^^^^^^^^^^
diff --git a/docs/_sources/install/docker.rst.txt b/docs/_sources/install/docker.rst.txt
index f49c75e..e1e6570 100644
--- a/docs/_sources/install/docker.rst.txt
+++ b/docs/_sources/install/docker.rst.txt
@@ -37,8 +37,7 @@ We can then use the following command to launch a docker image.
 
     /path/to/tvm/docker/bash.sh <image-name>
 
-Here the image-name can be a local docker image name, e.g. `tvm.ci_cpu` after you have done
-the local build. Or a pre-built third party image (`tvmai/demo-cpu` or `tvmai/ci-gpu`).
+Here the image-name can be a local docker image name, e.g. `tvm.ci_cpu` after you have done the local build.
 
 This auxiliary script does the following things:
 
@@ -65,10 +64,22 @@ Note that on macOS, because we use bridge network, jupyter notebook will be repo
 at an URL like ``http://{container_hostname}:8888/?token=...``. You should replace the ``container_hostname``
 with ``localhost`` when pasting it into browser.
 
-You can find some un-official prebuilt images in `<https://hub.docker.com/r/tvmai/>`_.
-Note that these are convenience images and are not part of the ASF release.
 
 Docker Source
 -------------
 Check out `The docker source <https://github.com/apache/incubator-tvm/tree/master/docker>`_ if you are interested in
 building your own docker images.
+
+
+Run the following command to build the docker image.
+
+.. code:: bash
+
+    /path/to/tvm/docker/build.sh <image-name>
+
+
+You can find some un-official thirdparty prebuilt images.
+These images are used for test purposes and are NOT of the ASF release.
+
+
+`<https://hub.docker.com/r/tlpack/>`_.
diff --git a/docs/_sources/install/from_source.rst.txt b/docs/_sources/install/from_source.rst.txt
index 26aec77..9fe6c5e 100644
--- a/docs/_sources/install/from_source.rst.txt
+++ b/docs/_sources/install/from_source.rst.txt
@@ -213,13 +213,6 @@ like ``virtualenv``.
 
        pip3 install --user tornado psutil xgboost
 
-   * If you want to build tvm to compile a model, you must use Python 3 and run the following
-
-   .. code:: bash
-
-       sudo apt install antlr4
-       pip3 install --user mypy orderedset antlr4-python3-runtime
-
 
 Install Contrib Libraries
 -------------------------
diff --git a/docs/_sources/tutorials/autotvm/sg_execution_times.rst.txt b/docs/_sources/tutorials/autotvm/sg_execution_times.rst.txt
index 4839155..6a44793 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.255** total execution time for **tutorials_autotvm** files:
-
-- **00:27.486**: :ref:`sphx_glr_tutorials_autotvm_tune_simple_template.py` (``tune_simple_template.py``)
-- **00:21.211**: :ref:`sphx_glr_tutorials_autotvm_tune_conv2d_cuda.py` (``tune_conv2d_cuda.py``)
-- **00:00.143**: :ref:`sphx_glr_tutorials_autotvm_tune_relay_x86.py` (``tune_relay_x86.py``)
-- **00:00.143**: :ref:`sphx_glr_tutorials_autotvm_tune_relay_cuda.py` (``tune_relay_cuda.py``)
-- **00:00.136**: :ref:`sphx_glr_tutorials_autotvm_tune_relay_mobile_gpu.py` (``tune_relay_mobile_gpu.py``)
-- **00:00.136**: :ref:`sphx_glr_tutorials_autotvm_tune_relay_arm.py` (``tune_relay_arm.py``)
+**00:53.528** total execution time for **tutorials_autotvm** files:
+
+- **00:29.137**: :ref:`sphx_glr_tutorials_autotvm_tune_simple_template.py` (``tune_simple_template.py``)
+- **00:23.762**: :ref:`sphx_glr_tutorials_autotvm_tune_conv2d_cuda.py` (``tune_conv2d_cuda.py``)
+- **00:00.166**: :ref:`sphx_glr_tutorials_autotvm_tune_relay_cuda.py` (``tune_relay_cuda.py``)
+- **00:00.155**: :ref:`sphx_glr_tutorials_autotvm_tune_relay_mobile_gpu.py` (``tune_relay_mobile_gpu.py``)
+- **00:00.155**: :ref:`sphx_glr_tutorials_autotvm_tune_relay_x86.py` (``tune_relay_x86.py``)
+- **00:00.154**: :ref:`sphx_glr_tutorials_autotvm_tune_relay_arm.py` (``tune_relay_arm.py``)
diff --git a/docs/_sources/tutorials/autotvm/tune_conv2d_cuda.rst.txt b/docs/_sources/tutorials/autotvm/tune_conv2d_cuda.rst.txt
index 9d1a408..cc061f4 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] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f38a36cfee1]\n  [bt] (3) /workspace/build/libtvm.so(+0x5d0037) [0x7f38a2c67037]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7f38a2c66ad6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
-    No: 2   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f38a36cfee1]\n  [bt] (3) /workspace/build/libtvm.so(+0x5d0037) [0x7f38a2c67037]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7f38a2c66ad6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
-    No: 3   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f38a36cfee1]\n  [bt] (3) /workspace/build/libtvm.so(+0x5d0037) [0x7f38a2c67037]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7f38a2c66ad6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
-    No: 4   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f38a36cfee1]\n  [bt] (3) /workspace/build/libtvm.so(+0x5d0037) [0x7f38a2c67037]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7f38a2c66ad6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
-    No: 5   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f38a36cfee1]\n  [bt] (3) /workspace/build/libtvm.so(+0x5d0037) [0x7f38a2c67037]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7f38a2c66ad6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
-    No: 6   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f38a36cfee1]\n  [bt] (3) /workspace/build/libtvm.so(+0x5d0037) [0x7f38a2c67037]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7f38a2c66ad6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
-    No: 7   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f38a36cfee1]\n  [bt] (3) /workspace/build/libtvm.so(+0x5d0037) [0x7f38a2c67037]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7f38a2c66ad6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
-    No: 8   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f38a36cfee1]\n  [bt] (3) /workspace/build/libtvm.so(+0x5d0037) [0x7f38a2c67037]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7f38a2c66ad6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
-    No: 9   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f38a36cfee1]\n  [bt] (3) /workspace/build/libtvm.so(+0x5d0037) [0x7f38a2c67037]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7f38a2c66ad6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
-    No: 10  GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f38a36cfee1]\n  [bt] (3) /workspace/build/libtvm.so(+0x5d0037) [0x7f38a2c67037]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7f38a2c66ad6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
-    No: 11  GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f38a36cfee1]\n  [bt] (3) /workspace/build/libtvm.so(+0x5d0037) [0x7f38a2c67037]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7f38a2c66ad6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
-    No: 12  GFLOPS: 70.55/70.55     result: MeasureResult(costs=(0.00328131475,), error_no=0, all_cost=1.6126303672790527, timestamp=1596419638.176739)     [('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/70.55      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f38a36cfee1]\n  [bt] (3) /workspace/build/libtvm.so(+0x5d0037) [0x7f38a2c67037]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7f38a2c66ad6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
-    No: 14  GFLOPS: 0.00/70.55      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f38a36cfee1]\n  [bt] (3) /workspace/build/libtvm.so(+0x5d0037) [0x7f38a2c67037]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7f38a2c66ad6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
-    No: 15  GFLOPS: 0.00/70.55      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f38a36cfee1]\n  [bt] (3) /workspace/build/libtvm.so(+0x5d0037) [0x7f38a2c67037]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7f38a2c66ad6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
-    No: 16  GFLOPS: 0.00/70.55      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f38a36cfee1]\n  [bt] (3) /workspace/build/libtvm.so(+0x5d0037) [0x7f38a2c67037]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7f38a2c66ad6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
-    No: 17  GFLOPS: 0.00/70.55      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f38a36cfee1]\n  [bt] (3) /workspace/build/libtvm.so(+0x5d0037) [0x7f38a2c67037]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7f38a2c66ad6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
-    No: 18  GFLOPS: 0.00/70.55      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f38a36cfee1]\n  [bt] (3) /workspace/build/libtvm.so(+0x5d0037) [0x7f38a2c67037]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7f38a2c66ad6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
-    No: 19  GFLOPS: 739.67/739.67   result: MeasureResult(costs=(0.00031298046559633024,), error_no=0, all_cost=1.9273707866668701, timestamp=1596419642.162234)    [('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: 7.10/739.67     result: MeasureResult(costs=(0.03259615375,), error_no=0, all_cost=1.5985333919525146, timestamp=1596419643.0097616)    [('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] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7fc651973821]\n  [bt] (3) /workspace/build/libtvm.so(+0x668a17) [0x7fc650e76a17]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7fc650e764b6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
+    No: 2   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7fc651973821]\n  [bt] (3) /workspace/build/libtvm.so(+0x668a17) [0x7fc650e76a17]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7fc650e764b6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
+    No: 3   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7fc651973821]\n  [bt] (3) /workspace/build/libtvm.so(+0x668a17) [0x7fc650e76a17]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7fc650e764b6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
+    No: 4   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7fc651973821]\n  [bt] (3) /workspace/build/libtvm.so(+0x668a17) [0x7fc650e76a17]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7fc650e764b6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
+    No: 5   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7fc651973821]\n  [bt] (3) /workspace/build/libtvm.so(+0x668a17) [0x7fc650e76a17]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7fc650e764b6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
+    No: 6   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7fc651973821]\n  [bt] (3) /workspace/build/libtvm.so(+0x668a17) [0x7fc650e76a17]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7fc650e764b6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
+    No: 7   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7fc651973821]\n  [bt] (3) /workspace/build/libtvm.so(+0x668a17) [0x7fc650e76a17]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7fc650e764b6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
+    No: 8   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7fc651973821]\n  [bt] (3) /workspace/build/libtvm.so(+0x668a17) [0x7fc650e76a17]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7fc650e764b6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
+    No: 9   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7fc651973821]\n  [bt] (3) /workspace/build/libtvm.so(+0x668a17) [0x7fc650e76a17]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7fc650e764b6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
+    No: 10  GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7fc651973821]\n  [bt] (3) /workspace/build/libtvm.so(+0x668a17) [0x7fc650e76a17]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7fc650e764b6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
+    No: 11  GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7fc651973821]\n  [bt] (3) /workspace/build/libtvm.so(+0x668a17) [0x7fc650e76a17]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7fc650e764b6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
+    No: 12  GFLOPS: 69.63/69.63     result: MeasureResult(costs=(0.0033246283750000003,), error_no=0, all_cost=1.6560664176940918, timestamp=1599097909.3491123)    [('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/69.63      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7fc651973821]\n  [bt] (3) /workspace/build/libtvm.so(+0x668a17) [0x7fc650e76a17]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7fc650e764b6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
+    No: 14  GFLOPS: 0.00/69.63      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7fc651973821]\n  [bt] (3) /workspace/build/libtvm.so(+0x668a17) [0x7fc650e76a17]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7fc650e764b6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
+    No: 15  GFLOPS: 0.00/69.63      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7fc651973821]\n  [bt] (3) /workspace/build/libtvm.so(+0x668a17) [0x7fc650e76a17]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7fc650e764b6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
+    No: 16  GFLOPS: 0.00/69.63      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7fc651973821]\n  [bt] (3) /workspace/build/libtvm.so(+0x668a17) [0x7fc650e76a17]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7fc650e764b6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
+    No: 17  GFLOPS: 0.00/69.63      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7fc651973821]\n  [bt] (3) /workspace/build/libtvm.so(+0x668a17) [0x7fc650e76a17]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7fc650e764b6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
+    No: 18  GFLOPS: 0.00/69.63      result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  [bt] (4) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7fc651973821]\n  [bt] (3) /workspace/build/libtvm.so(+0x668a17) [0x7fc650e76a17]\n  [bt] (2) /workspace/build/libtvm.so(tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const+0x3e6) [0x7fc650e764b6]\n  [bt] (1) /workspace/build/libtvm.so(tvm::tir::transform::PrimFunc [...]
+    No: 19  GFLOPS: 692.74/692.74   result: MeasureResult(costs=(0.00033418439013452913,), error_no=0, all_cost=2.1232569217681885, timestamp=1599097914.050044)    [('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: 7.06/692.74     result: MeasureResult(costs=(0.03278169025,), error_no=0, all_cost=1.757389783859253, timestamp=1599097915.0128677)     [('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.000359
+    Time cost of this operator: 0.000361
 
 
 
diff --git a/docs/_sources/tutorials/autotvm/tune_simple_template.rst.txt b/docs/_sources/tutorials/autotvm/tune_simple_template.rst.txt
index 9353a5e..4ecc782 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: 7.09/7.09       result: MeasureResult(costs=(0.037853168799999996,), error_no=0, all_cost=1.04099702835083, timestamp=1596419606.6558206)       [('tile_y', [-1, 8]), ('tile_x', [-1, 8])],None,33
-    No: 2   GFLOPS: 2.30/7.09       result: MeasureResult(costs=(0.116738172,), error_no=0, all_cost=2.374105215072632, timestamp=1596419608.9016356)       [('tile_y', [-1, 8]), ('tile_x', [-1, 2])],None,13
-    No: 3   GFLOPS: 7.49/7.49       result: MeasureResult(costs=(0.035850838,), error_no=0, all_cost=1.4166457653045654, timestamp=1596419609.8355696)      [('tile_y', [-1, 16]), ('tile_x', [-1, 128])],None,74
-    No: 4   GFLOPS: 4.48/7.49       result: MeasureResult(costs=(0.0599121328,), error_no=0, all_cost=1.4389441013336182, timestamp=1596419611.1620698)     [('tile_y', [-1, 16]), ('tile_x', [-1, 32])],None,54
-    No: 5   GFLOPS: 6.08/7.49       result: MeasureResult(costs=(0.0441534014,), error_no=0, all_cost=1.1245598793029785, timestamp=1596419612.2320726)     [('tile_y', [-1, 128]), ('tile_x', [-1, 8])],None,37
-    No: 6   GFLOPS: 6.47/7.49       result: MeasureResult(costs=(0.041497002399999997,), error_no=0, all_cost=1.107459306716919, timestamp=1596419613.2634501)      [('tile_y', [-1, 64]), ('tile_x', [-1, 8])],None,36
-    No: 7   GFLOPS: 27.33/27.33     result: MeasureResult(costs=(0.009821894000000001,), error_no=0, all_cost=0.6573705673217773, timestamp=1596419613.7893965)     [('tile_y', [-1, 1]), ('tile_x', [-1, 128])],None,70
-    No: 8   GFLOPS: 21.47/27.33     result: MeasureResult(costs=(0.012502513000000002,), error_no=0, all_cost=0.706108570098877, timestamp=1596419614.3581583)      [('tile_y', [-1, 4]), ('tile_x', [-1, 512])],None,92
-    No: 9   GFLOPS: 0.83/27.33      result: MeasureResult(costs=(0.3229418878,), error_no=0, all_cost=5.547542572021484, timestamp=1596419619.885717)       [('tile_y', [-1, 512]), ('tile_x', [-1, 2])],None,19
-    No: 10  GFLOPS: 0.00/27.33      result: MeasureResult(costs=(RuntimeError('Traceback (most recent call last):\n  [bt] (5) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7f38a36cfee1]\n  [bt] (4) /workspace/build/libtvm.so(+0x106bc12) [0x7f38a3702c12]\n  [bt] (3) /workspace/build/libtvm.so(tvm::runtime::RPCWrappedFunc::operator()(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const+0x26b) [0x7f38a3705d2b]\n  [bt] (2) /workspace/build/libtvm.so(tvm::runtime::RPCClientSession::Call [...]
+    No: 1   GFLOPS: 6.72/6.72       result: MeasureResult(costs=(0.0399487232,), error_no=0, all_cost=0.9529943466186523, timestamp=1599097874.9568658)     [('tile_y', [-1, 8]), ('tile_x', [-1, 8])],None,33
+    No: 2   GFLOPS: 2.20/6.72       result: MeasureResult(costs=(0.1221858156,), error_no=0, all_cost=2.2919247150421143, timestamp=1599097877.3494487)     [('tile_y', [-1, 8]), ('tile_x', [-1, 2])],None,13
+    No: 3   GFLOPS: 7.14/7.14       result: MeasureResult(costs=(0.037595030200000004,), error_no=0, all_cost=1.4327435493469238, timestamp=1599097878.3681812)     [('tile_y', [-1, 16]), ('tile_x', [-1, 128])],None,74
+    No: 4   GFLOPS: 4.28/7.14       result: MeasureResult(costs=(0.062721577,), error_no=0, all_cost=1.4620404243469238, timestamp=1599097879.794526)       [('tile_y', [-1, 16]), ('tile_x', [-1, 32])],None,54
+    No: 5   GFLOPS: 6.10/7.14       result: MeasureResult(costs=(0.0440382272,), error_no=0, all_cost=1.0699217319488525, timestamp=1599097880.9146302)     [('tile_y', [-1, 128]), ('tile_x', [-1, 8])],None,37
+    No: 6   GFLOPS: 6.17/7.14       result: MeasureResult(costs=(0.0435387002,), error_no=0, all_cost=1.103325605392456, timestamp=1599097882.0777445)      [('tile_y', [-1, 64]), ('tile_x', [-1, 8])],None,36
+    No: 7   GFLOPS: 25.21/25.21     result: MeasureResult(costs=(0.010645947999999999,), error_no=0, all_cost=0.6406195163726807, timestamp=1599097882.6758382)     [('tile_y', [-1, 1]), ('tile_x', [-1, 128])],None,70
+    No: 8   GFLOPS: 20.94/25.21     result: MeasureResult(costs=(0.0128166258,), error_no=0, all_cost=0.5873754024505615, timestamp=1599097883.2995389)     [('tile_y', [-1, 4]), ('tile_x', [-1, 512])],None,92
+    No: 9   GFLOPS: 0.71/25.21      result: MeasureResult(costs=(0.3807563502,), error_no=0, all_cost=6.390629291534424, timestamp=1599097889.7905786)      [('tile_y', [-1, 512]), ('tile_x', [-1, 2])],None,19
+    No: 10  GFLOPS: 0.00/25.21      result: MeasureResult(costs=(RuntimeError('Traceback (most recent call last):\n  [bt] (5) /workspace/build/libtvm.so(TVMFuncCall+0x61) [0x7fc651973821]\n  [bt] (4) /workspace/build/libtvm.so(+0x119ab32) [0x7fc6519a8b32]\n  [bt] (3) /workspace/build/libtvm.so(tvm::runtime::RPCWrappedFunc::operator()(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const+0x26b) [0x7fc6519aa12b]\n  [bt] (2) /workspace/build/libtvm.so(tvm::runtime::RPCClientSession::Call [...]
 
 
 
diff --git a/docs/_sources/tutorials/dev/low_level_custom_pass.rst.txt b/docs/_sources/tutorials/dev/low_level_custom_pass.rst.txt
index 8ffdf2b..118c461 100644
--- a/docs/_sources/tutorials/dev/low_level_custom_pass.rst.txt
+++ b/docs/_sources/tutorials/dev/low_level_custom_pass.rst.txt
@@ -74,16 +74,16 @@ our customized lowering pass to manipulate the IR directly instead of using sche
 
     primfn(a_1: handle, b_1: handle, c_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {c: Buffer(c_2: handle, float32, [128], []),
-                 b: Buffer(b_2: handle, float32, [128], []),
-                 a: Buffer(a_2: handle, float32, [128], [])}
+      buffers = {c: Buffer(c_2: Pointer(float32), float32, [128], []),
+                 b: Buffer(b_2: Pointer(float32), float32, [128], []),
+                 a: Buffer(a_2: Pointer(float32), float32, [128], [])}
       buffer_map = {a_1: a, b_1: b, c_1: c} {
       for (i: int32, 0, 128) {
         c_2[i] = ((float32*)a_2[i] + (float32*)b_2[i])
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -217,16 +217,16 @@ Thus, a good place to put this transformation pass is just after Phase 1.
 
     primfn(a_1: handle, b_1: handle, c_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {c: Buffer(c_2: handle, float32, [128], []),
-                 b: Buffer(b_2: handle, float32, [128], []),
-                 a: Buffer(a_2: handle, float32, [128], [])}
+      buffers = {c: Buffer(c_2: Pointer(float32), float32, [128], []),
+                 b: Buffer(b_2: Pointer(float32), float32, [128], []),
+                 a: Buffer(a_2: Pointer(float32), float32, [128], [])}
       buffer_map = {a_1: a, b_1: b, c_1: c} {
       for (i.outer: int32, 0, 16) {
         c_2[ramp((i.outer*8), 1, 8)] = ((float32x8*)a_2[ramp((i.outer*8), 1, 8)] + (float32x8*)b_2[ramp((i.outer*8), 1, 8)])
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
diff --git a/docs/_sources/tutorials/dev/sg_execution_times.rst.txt b/docs/_sources/tutorials/dev/sg_execution_times.rst.txt
index 8df7f88..aaae757 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.440** total execution time for **tutorials_dev** files:
+**00:00.554** total execution time for **tutorials_dev** files:
 
-- **00:00.304**: :ref:`sphx_glr_tutorials_dev_relay_pass_infra.py` (``relay_pass_infra.py``)
-- **00:00.136**: :ref:`sphx_glr_tutorials_dev_low_level_custom_pass.py` (``low_level_custom_pass.py``)
+- **00:00.385**: :ref:`sphx_glr_tutorials_dev_use_pass_infra.py` (``use_pass_infra.py``)
+- **00:00.169**: :ref:`sphx_glr_tutorials_dev_low_level_custom_pass.py` (``low_level_custom_pass.py``)
diff --git a/docs/_sources/tutorials/dev/relay_pass_infra.rst.txt b/docs/_sources/tutorials/dev/use_pass_infra.rst.txt
similarity index 53%
rename from docs/_sources/tutorials/dev/relay_pass_infra.rst.txt
rename to docs/_sources/tutorials/dev/use_pass_infra.rst.txt
index f813330..334c3a5 100644
--- a/docs/_sources/tutorials/dev/relay_pass_infra.rst.txt
+++ b/docs/_sources/tutorials/dev/use_pass_infra.rst.txt
@@ -1,32 +1,34 @@
 .. note::
     :class: sphx-glr-download-link-note
 
-    Click :ref:`here <sphx_glr_download_tutorials_dev_relay_pass_infra.py>` to download the full example code
+    Click :ref:`here <sphx_glr_download_tutorials_dev_use_pass_infra.py>` to download the full example code
 .. rst-class:: sphx-glr-example-title
 
-.. _sphx_glr_tutorials_dev_relay_pass_infra.py:
+.. _sphx_glr_tutorials_dev_use_pass_infra.py:
 
 
-.. _tutorial-relay-pass-infra:
+.. _tutorial-use-pass-infra:
 
-How to Use Relay Pass Infra
-===========================
+How to Use TVM Pass Infra
+=========================
 **Author**: `Zhi Chen <https://github.com/zhiics>`_
 
-As the number of optimization passes increases in Relay, it becomes intractable to
+As the number of optimization passes increases in Relay/tir, it becomes intractable to
 execute them and maintain their dependencies manually. Therefore, we have
-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.transform.Sequential` to apply a sequence of passes
-on a Relay program where the dependencies between passes can be resolved by the
+introduced an infrastructure to manage the optimization passes and make it
+applicable to different layers of the IR in the TVM stack.
+
+The optimizations of a Relay/tir program could be applied at various granularity,
+namely function-level and module-level using :py:class:`tvm.relay.transform.FunctionPass`/
+:py:class:`tvm.tir.transform.PrimFuncPass` and :py:class:`tvm.transform.ModulePass`
+respectively. Or users can rely on :py:class:`tvm.transform.Sequential` to apply a sequence of passes
+on a Relay/tir 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`
+the :ref:`pass-infra`
 
-This tutorial demostrates how developers can use the Relay pass infra to perform
-a certain optimization and create an optimization pipeline.
+This tutorial mainly demostrates how developers can use the pass infra to perform
+a certain optimization and create an optimization pipeline for a Relay program.
+The same approach can be used for tir as well.
 
 
 .. code-block:: default
@@ -47,6 +49,7 @@ Create An Example Relay Program
 -------------------------------
 First of all, we create a simple Relay program for the tutorial. This program
 will be used by various optimizations of the examples in this tutorial.
+Similarly, users can write a tir primitive function and apply the tir passes.
 
 
 .. code-block:: default
@@ -65,7 +68,7 @@ will be used by various optimizations of the examples in this tutorial.
         z = relay.add(y, c)
         z1 = relay.add(y, c)
         z2 = relay.add(z, z1)
-        return relay.Function([x], z2)
+        return relay.Function([x, weight], z2)
 
 
 
@@ -143,7 +146,7 @@ Manually Apply Optimization Passes
       add(%2, %3) /* ty=Tensor[(1, 64, 54, 54), float32] */
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -173,7 +176,7 @@ eliminate the common expressions that used by `z` and `z1`.
       add(%2, %2) /* ty=Tensor[(1, 64, 54, 54), float32] */
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -219,7 +222,7 @@ opt level 0 will not allow operators to be fused together. Users can pass the
       %6(%5) /* ty=Tensor[(1, 64, 54, 54), float32] */
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -278,12 +281,12 @@ pass.
       %4(%x, %weight, meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */, meta[relay.Constant][1] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
 From the transformed Relay program, we can see that there are still two
-identical addition operations. This is because `EliminateCommonSubexpr`
+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.transform.Sequential`. The pass infra,
@@ -318,7 +321,7 @@ for users to customize the optimization level that they want to execute.
       %3(%x, %weight, meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */, meta[relay.Constant][1] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -359,7 +362,7 @@ identical addition operations.
       %4(%x, %weight, meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */, meta[relay.Constant][1] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -401,7 +404,7 @@ alteration pass falls in such category.
       %3(%x, %weight, meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */, meta[relay.Constant][1] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
     def @main(%x: Tensor[(1, 64, 56, 56), float32], %weight: Tensor[(64, 64, 3, 3), float32]) -> Tensor[(1, 64, 54, 54), float32] {
       %0 = layout_transform(%x, src_layout="NCHW", dst_layout="NCHW16c") /* ty=Tensor[(1, 4, 56, 56, 16), float32] */;
       %1 = nn.conv2d(%0, %weight, padding=[0, 0, 0, 0], data_layout="NCHW16c") /* ty=Tensor[(1, 4, 54, 54, 16), float32] */;
@@ -416,7 +419,7 @@ alteration pass falls in such category.
       layout_transform(%9, src_layout="NCHW16c", dst_layout="NCHW") /* ty=Tensor[(1, 64, 54, 54), float32] */
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -480,16 +483,16 @@ customized pass.
       add(%6, %7) /* ty=Tensor[(1, 64, 54, 54), float32] */
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
 Debug a Pass
 ------------
-Relay provides users a plug-and-play style debugging pass that print the IR
-after a certain pass is done. For example, we can print out the IR on the
-completion of constant folding and fusion by adding the debugging pass after
-them.
+TVM provides users a plug-and-play style debugging pass that print the IR
+after a certain pass is done through a special pass (``PrintIR``) to dump the IR of the
+whole module. A slightly modified version of the sequential pass example
+could be like the following to enable IR dumping for ``FoldConstant`` optimization.
 
 
 .. code-block:: default
@@ -501,27 +504,254 @@ them.
                                     tvm.transform.PrintIR(),
                                     relay.transform.EliminateCommonSubexpr(),
                                     relay.transform.FuseOps(),
-                                    tvm.transform.PrintIR()])
-    with tvm.transform.PassContext(opt_level=3):
-        mod = seq(mod)
+                                    relay.transform.AlterOpLayout()])
+
+    # By inserting the ``PrintIR`` pass after ``FoldConstant``, the pass infra will
+    # dump out the module IR when ``FoldConstant`` is done. Users can plug in this
+    # pass after any pass they want to debug for viewing the optimization effect.
+    # 
+    # There is a more flexible debugging mechanism also exposed by the build configuration
+    # object. One can pass a tracing function which can be used to execute arbitrary code
+    # before and/or after each pass. A tracing function will receive a :py::class:`tvm.IRModule`,
+    # a :py:class:`tvm.transform.PassInfo` object,
+    # and a boolean indicating whether you are executing before, or after a pass.
+    # An example is below.
+
+    def print_ir(mod, info, is_before):
+        """Print the name of the pass, the IR, only before passes execute."""
+        if is_before:
+            print("Running pass: {}", info)
+            print(mod)
+
+    with tvm.transform.PassContext(opt_level=3, trace=print_ir):
+        with tvm.target.create("llvm"):
+            # Perform the optimizations.
+            mod = seq(mod)
+    print(mod)
 
     print("done")
 
 
 
 
+
 .. rst-class:: sphx-glr-script-out
 
  Out:
 
  .. code-block:: none
 
+    Running pass: {} The meta data of the pass: pass name: FoldConstantopt_level: 2required passes: [
+    ]
+
+    def @main(%x: Tensor[(1, 64, 56, 56), float32], %weight: Tensor[(64, 64, 3, 3), float32]) -> Tensor[(1, 64, 54, 54), float32] {
+      %0 = nn.conv2d(%x, %weight, padding=[0, 0, 0, 0]) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      %1 = add(meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */, meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      %2 = multiply(%1, 2f /* ty=float32 */) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      %3 = add(%0, %2) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      %4 = add(%3, meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      %5 = add(%3, meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      add(%4, %5) /* ty=Tensor[(1, 64, 54, 54), float32] */
+    }
+
+
+    Running pass: {} The meta data of the pass: pass name: InferTypeopt_level: 0required passes: [
+    ]
+
+    def @main() -> Tensor[(1, 64, 54, 54), float32] {
+      add(meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */, meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */
+    }
+
+
+    Running pass: {} The meta data of the pass: pass name: FuseOpsopt_level: 1required passes: [
+    InferType, ]
+
+    def @main() -> Tensor[(1, 64, 54, 54), float32] {
+      add(meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */, meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */
+    }
+
+
+    Running pass: {} The meta data of the pass: pass name: ToANormalFormopt_level: 1required passes: [
+    ]
+
+    def @main() -> Tensor[(1, 64, 54, 54), float32] {
+      %0 = fn (%p0: Tensor[(1, 64, 54, 54), float32], Primitive=1) -> Tensor[(1, 64, 54, 54), float32] {
+        add(%p0, %p0) /* ty=Tensor[(1, 64, 54, 54), float32] */
+      };
+      %0(meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */
+    }
+
+
+    Running pass: {} The meta data of the pass: pass name: InferTypeopt_level: 0required passes: [
+    ]
+
+    def @main() -> Tensor[(1, 64, 54, 54), float32] {
+      let %x: Tensor[(1, 64, 54, 54), float32] = meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      let %x1: fn (Tensor[(1, 64, 54, 54), float32]) -> Tensor[(1, 64, 54, 54), float32] = fn (%p0: Tensor[(1, 64, 54, 54), float32], Primitive=1) -> Tensor[(1, 64, 54, 54), float32] {
+        add(%p0, %p0) /* ty=Tensor[(1, 64, 54, 54), float32] */
+      };
+      let %x2: Tensor[(1, 64, 54, 54), float32] = %x1(%x) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      %x2
+    }
+
+
+    Running pass: {} The meta data of the pass: pass name: InferTypeopt_level: 0required passes: [
+    ]
+
+    def @main() -> Tensor[(1, 64, 54, 54), float32] {
+      multiply(meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */, 2f /* ty=float32 */) /* ty=Tensor[(1, 64, 54, 54), float32] */
+    }
+
+
+    Running pass: {} The meta data of the pass: pass name: FuseOpsopt_level: 1required passes: [
+    InferType, ]
+
+    def @main() -> Tensor[(1, 64, 54, 54), float32] {
+      multiply(meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */, 2f /* ty=float32 */) /* ty=Tensor[(1, 64, 54, 54), float32] */
+    }
+
+
+    Running pass: {} The meta data of the pass: pass name: ToANormalFormopt_level: 1required passes: [
+    ]
+
+    def @main() -> Tensor[(1, 64, 54, 54), float32] {
+      %0 = fn (%p0: Tensor[(1, 64, 54, 54), float32], %p1: float32, Primitive=1) -> Tensor[(1, 64, 54, 54), float32] {
+        multiply(%p0, %p1) /* ty=Tensor[(1, 64, 54, 54), float32] */
+      };
+      %0(meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */, 2f /* ty=float32 */) /* ty=Tensor[(1, 64, 54, 54), float32] */
+    }
+
+
+    Running pass: {} The meta data of the pass: pass name: InferTypeopt_level: 0required passes: [
+    ]
+
+    def @main() -> Tensor[(1, 64, 54, 54), float32] {
+      let %x: Tensor[(1, 64, 54, 54), float32] = meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      let %x1: float32 = 2f /* ty=float32 */;
+      let %x2: fn (Tensor[(1, 64, 54, 54), float32], float32) -> Tensor[(1, 64, 54, 54), float32] = fn (%p0: Tensor[(1, 64, 54, 54), float32], %p1: float32, Primitive=1) -> Tensor[(1, 64, 54, 54), float32] {
+        multiply(%p0, %p1) /* ty=Tensor[(1, 64, 54, 54), float32] */
+      };
+      let %x3: Tensor[(1, 64, 54, 54), float32] = %x2(%x, %x1) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      %x3
+    }
+
+
+    Running pass: {} The meta data of the pass: pass name: PrintIRopt_level: 0required passes: [
+    ]
+
+    def @main(%x: Tensor[(1, 64, 56, 56), float32], %weight: Tensor[(64, 64, 3, 3), float32]) -> Tensor[(1, 64, 54, 54), float32] {
+      %0 = nn.conv2d(%x, %weight, padding=[0, 0, 0, 0]) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      %1 = add(%0, meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      %2 = add(%1, meta[relay.Constant][1] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      %3 = add(%1, meta[relay.Constant][1] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      add(%2, %3) /* ty=Tensor[(1, 64, 54, 54), float32] */
+    }
+
+
+    Running pass: {} The meta data of the pass: pass name: InferTypeopt_level: 0required passes: [
+    ]
+
+    def @main(%x: Tensor[(1, 64, 56, 56), float32], %weight: Tensor[(64, 64, 3, 3), float32]) -> Tensor[(1, 64, 54, 54), float32] {
+      %0 = nn.conv2d(%x, %weight, padding=[0, 0, 0, 0]) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      %1 = add(%0, meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      %2 = add(%1, meta[relay.Constant][1] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      %3 = add(%1, meta[relay.Constant][1] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      add(%2, %3) /* ty=Tensor[(1, 64, 54, 54), float32] */
+    }
+
+
+    Running pass: {} The meta data of the pass: pass name: EliminateCommonSubexpropt_level: 3required passes: [
+    InferType, ]
+
+    def @main(%x: Tensor[(1, 64, 56, 56), float32], %weight: Tensor[(64, 64, 3, 3), float32]) -> Tensor[(1, 64, 54, 54), float32] {
+      %0 = nn.conv2d(%x, %weight, padding=[0, 0, 0, 0]) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      %1 = add(%0, meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      %2 = add(%1, meta[relay.Constant][1] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      %3 = add(%1, meta[relay.Constant][1] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      add(%2, %3) /* ty=Tensor[(1, 64, 54, 54), float32] */
+    }
+
+
+    Running pass: {} The meta data of the pass: pass name: InferTypeopt_level: 0required passes: [
+    ]
+
+    def @main(%x: Tensor[(1, 64, 56, 56), float32], %weight: Tensor[(64, 64, 3, 3), float32]) -> Tensor[(1, 64, 54, 54), float32] {
+      %0 = nn.conv2d(%x, %weight, padding=[0, 0, 0, 0]) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      %1 = add(%0, meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      %2 = add(%1, meta[relay.Constant][1] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      add(%2, %2) /* ty=Tensor[(1, 64, 54, 54), float32] */
+    }
+
+
+    Running pass: {} The meta data of the pass: pass name: FuseOpsopt_level: 1required passes: [
+    InferType, ]
+
+    def @main(%x: Tensor[(1, 64, 56, 56), float32], %weight: Tensor[(64, 64, 3, 3), float32]) -> Tensor[(1, 64, 54, 54), float32] {
+      %0 = nn.conv2d(%x, %weight, padding=[0, 0, 0, 0]) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      %1 = add(%0, meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      %2 = add(%1, meta[relay.Constant][1] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+      add(%2, %2) /* ty=Tensor[(1, 64, 54, 54), float32] */
+    }
+
+
+    Running pass: {} The meta data of the pass: pass name: InferTypeopt_level: 0required passes: [
+    ]
+
+    def @main(%x: Tensor[(1, 64, 56, 56), float32], %weight: Tensor[(64, 64, 3, 3), float32]) -> Tensor[(1, 64, 54, 54), float32] {
+      %3 = fn (%p0: Tensor[(1, 64, 56, 56), float32], %p1: Tensor[(64, 64, 3, 3), float32], %p2: Tensor[(1, 64, 54, 54), float32], %p3: Tensor[(1, 64, 54, 54), float32], Primitive=1) -> Tensor[(1, 64, 54, 54), float32] {
+        %0 = nn.conv2d(%p0, %p1, padding=[0, 0, 0, 0]) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+        %1 = add(%0, %p2) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+        %2 = add(%1, %p3) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+        add(%2, %2) /* ty=Tensor[(1, 64, 54, 54), float32] */
+      };
+      %3(%x, %weight, meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */, meta[relay.Constant][1] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */
+    }
+
+
+    Running pass: {} The meta data of the pass: pass name: AlterOpLayoutopt_level: 3required passes: [
+    InferType, ]
+
+    def @main(%x: Tensor[(1, 64, 56, 56), float32], %weight: Tensor[(64, 64, 3, 3), float32]) -> Tensor[(1, 64, 54, 54), float32] {
+      %3 = fn (%p0: Tensor[(1, 64, 56, 56), float32], %p1: Tensor[(64, 64, 3, 3), float32], %p2: Tensor[(1, 64, 54, 54), float32], %p3: Tensor[(1, 64, 54, 54), float32], Primitive=1) -> Tensor[(1, 64, 54, 54), float32] {
+        %0 = nn.conv2d(%p0, %p1, padding=[0, 0, 0, 0]) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+        %1 = add(%0, %p2) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+        %2 = add(%1, %p3) /* ty=Tensor[(1, 64, 54, 54), float32] */;
+        add(%2, %2) /* ty=Tensor[(1, 64, 54, 54), float32] */
+      };
+      %3(%x, %weight, meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */, meta[relay.Constant][1] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */
+    }
+
+
+    def @main(%x: Tensor[(1, 64, 56, 56), float32], %weight: Tensor[(64, 64, 3, 3), float32]) -> Tensor[(1, 64, 54, 54), float32] {
+      %7 = fn (%p0: Tensor[(1, 64, 56, 56), float32], %p1: Tensor[(64, 64, 3, 3), float32], %p2: Tensor[(1, 64, 54, 54), float32], %p3: Tensor[(1, 64, 54, 54), float32], Primitive=1) -> Tensor[(1, 64, 54, 54), float32] {
+        %0 = layout_transform(%p0, src_layout="NCHW", dst_layout="NCHW16c") /* ty=Tensor[(1, 4, 56, 56, 16), float32] */;
+        %1 = nn.conv2d(%0, %p1, padding=[0, 0, 0, 0], data_layout="NCHW16c") /* ty=Tensor[(1, 4, 54, 54, 16), float32] */;
+        %2 = layout_transform(%p2, src_layout="NCHW", dst_layout="NCHW16c") /* ty=Tensor[(1, 4, 54, 54, 16), float32] */;
+        %3 = add(%1, %2) /* ty=Tensor[(1, 4, 54, 54, 16), float32] */;
+        %4 = layout_transform(%p3, src_layout="NCHW", dst_layout="NCHW16c") /* ty=Tensor[(1, 4, 54, 54, 16), float32] */;
+        %5 = add(%3, %4) /* ty=Tensor[(1, 4, 54, 54, 16), float32] */;
+        %6 = add(%5, %5) /* ty=Tensor[(1, 4, 54, 54, 16), float32] */;
+        layout_transform(%6, src_layout="NCHW16c", dst_layout="NCHW") /* ty=Tensor[(1, 64, 54, 54), float32] */
+      };
+      %7(%x, %weight, meta[relay.Constant][0] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */, meta[relay.Constant][1] /* ty=Tensor[(1, 64, 54, 54), float32] */ /* ty=Tensor[(1, 64, 54, 54), float32] */) /* ty=Tensor[(1, 64, 54, 54), float32] */
+    }
+
+
     done
 
 
 
+Summary
+-------
+This tutorial has covered how we can write and invoke passes in TVM more
+conveniently using the pass infra. Different ways of invoking a pass are also
+disucssed. Using :py:class:`tvm.transform.Sequential` can largely help
+users to ease the work of handling multiple optimization passes and their
+dependencies. In addition, an example is provided to illustrate
+how we can debug a pass using the ``PrintIR`` and tracing.
+
 
-.. _sphx_glr_download_tutorials_dev_relay_pass_infra.py:
+.. _sphx_glr_download_tutorials_dev_use_pass_infra.py:
 
 
 .. only :: html
@@ -533,13 +763,13 @@ them.
 
   .. container:: sphx-glr-download
 
-     :download:`Download Python source code: relay_pass_infra.py <relay_pass_infra.py>`
+     :download:`Download Python source code: use_pass_infra.py <use_pass_infra.py>`
 
 
 
   .. container:: sphx-glr-download
 
-     :download:`Download Jupyter notebook: relay_pass_infra.ipynb <relay_pass_infra.ipynb>`
+     :download:`Download Jupyter notebook: use_pass_infra.ipynb <use_pass_infra.ipynb>`
 
 
 .. only:: html
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 ef8d312..92ab7ce 100644
--- a/docs/_sources/tutorials/frontend/deploy_model_on_android.rst.txt
+++ b/docs/_sources/tutorials/frontend/deploy_model_on_android.rst.txt
@@ -142,7 +142,7 @@ Here is an example of config.mk. I enabled OpenCL and Vulkan.
 
   .. code-block:: bash
 
-    /opt/android-sdk-linux/ndk-bundle/build/tools/make-standalone-toolchain.sh \
+    $ANDROID_NDK_HOME/build/tools/make-standalone-toolchain.sh \
        --platform=android-24 --use-llvm --arch=arm64 --install-dir=/opt/android-toolchain-arm64
     export TVM_NDK_CC=/opt/android-toolchain-arm64/bin/aarch64-linux-android-g++
 
@@ -413,7 +413,7 @@ Execute on TVM
 
     TVM prediction top-1: tiger cat
     Evaluate inference time cost...
-    Mean inference time (std dev): 4.78 ms (0.81 ms)
+    Mean inference time (std dev): 17.66 ms (0.04 ms)
 
 
 
diff --git a/docs/_sources/tutorials/frontend/deploy_prequantized.rst.txt b/docs/_sources/tutorials/frontend/deploy_prequantized.rst.txt
index b433745..b5dfdc4 100644
--- a/docs/_sources/tutorials/frontend/deploy_prequantized.rst.txt
+++ b/docs/_sources/tutorials/frontend/deploy_prequantized.rst.txt
@@ -245,15 +245,6 @@ qnn.quantize, qnn.dequantize, qnn.requantize, and qnn.conv2d etc.
 
 
 
-.. 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
-
 
 
 Compile and run the Relay module
@@ -351,7 +342,7 @@ Here we give an example of how to measure performance of TVM compiled models.
 
  .. code-block:: none
 
-    Elapsed average ms: 11.722627030000002
+    Elapsed average ms: 15.2029395
 
 
 
diff --git a/docs/_sources/tutorials/frontend/deploy_prequantized_tflite.rst.txt b/docs/_sources/tutorials/frontend/deploy_prequantized_tflite.rst.txt
index 71d858b..3fa51ce 100644
--- a/docs/_sources/tutorials/frontend/deploy_prequantized_tflite.rst.txt
+++ b/docs/_sources/tutorials/frontend/deploy_prequantized_tflite.rst.txt
@@ -359,7 +359,7 @@ Here we give an example of how to measure performance of TVM compiled models.
 
  .. code-block:: none
 
-    Elapsed average ms: 30.09917093
+    Elapsed average ms: 46.384218929999996
 
 
 
@@ -392,7 +392,7 @@ Here we give an example of how to measure performance of TVM compiled models.
 
 .. rst-class:: sphx-glr-timing
 
-   **Total running time of the script:** ( 1 minutes  57.708 seconds)
+   **Total running time of the script:** ( 2 minutes  10.602 seconds)
 
 
 .. _sphx_glr_download_tutorials_frontend_deploy_prequantized_tflite.py:
diff --git a/docs/_sources/tutorials/frontend/deploy_quantized.rst.txt b/docs/_sources/tutorials/frontend/deploy_quantized.rst.txt
index f5ba934..412c244 100644
--- a/docs/_sources/tutorials/frontend/deploy_quantized.rst.txt
+++ b/docs/_sources/tutorials/frontend/deploy_quantized.rst.txt
@@ -209,15 +209,6 @@ We create a Relay VM to build and execute the model.
 
 
 
-.. 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
-
 
 
 
diff --git a/docs/_sources/tutorials/frontend/deploy_ssd_gluoncv.rst.txt b/docs/_sources/tutorials/frontend/deploy_ssd_gluoncv.rst.txt
index b121041..1a7a0f9 100644
--- a/docs/_sources/tutorials/frontend/deploy_ssd_gluoncv.rst.txt
+++ b/docs/_sources/tutorials/frontend/deploy_ssd_gluoncv.rst.txt
@@ -22,7 +22,6 @@ We will use GluonCV pre-trained SSD model and convert it to Relay IR
     from tvm import te
 
     from matplotlib import pyplot as plt
-    from tvm.relay.testing.config import ctx_list
     from tvm import relay
     from tvm.contrib import graph_runtime
     from tvm.contrib.download import download_testdata
@@ -74,7 +73,6 @@ Preliminary and Set parameters
 
     model_name = supported_model[0]
     dshape = (1, 3, 512, 512)
-    target_list = ctx_list()
 
 
 
@@ -154,9 +152,11 @@ Create TVM runtime and do inference
         class_IDs, scores, bounding_boxs = m.get_output(0), m.get_output(1), m.get_output(2)
         return class_IDs, scores, bounding_boxs
 
-    for target, ctx in target_list:
-        lib = build(target)
-        class_IDs, scores, bounding_boxs = run(lib, ctx)
+    for target in ["llvm", "cuda"]:
+        ctx = tvm.context(target, 0)
+        if ctx.exist:
+            lib = build(target)
+            class_IDs, scores, bounding_boxs = run(lib, ctx)
 
 
 
@@ -168,45 +168,6 @@ Create TVM runtime and do inference
 
  .. code-block:: none
 
-    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, 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.
-    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 64, 128, 128), 'float32'), ('TENSOR', (256, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 256, 128, 128), 'float32'), ('TENSOR', (64, 256, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 256, 128, 128), 'float32'), ('TENSOR', (128, 256, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 128, 64, 64), '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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 128, 64, 64), 'float32'), ('TENSOR', (512, 128, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 256, 128, 128), 'float32'), ('TENSOR', (512, 256, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 64, 64), 'float32'), ('TENSOR', (128, 512, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 64, 64), 'float32'), ('TENSOR', (256, 512, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 256, 32, 32), '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.
-    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 256, 32, 32), 'float32'), ('TENSOR', (1024, 256, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 64, 64), 'float32'), ('TENSOR', (1024, 512, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 1024, 32, 32), 'float32'), ('TENSOR', (256, 1024, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 1024, 32, 32), 'float32'), ('TENSOR', (84, 1024, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 1024, 32, 32), 'float32'), ('TENSOR', (512, 1024, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 16, 16), 'float32'), ('TENSOR', (512, 512, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 16, 16), 'float32'), ('TENSOR', (2048, 512, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 1024, 32, 32), 'float32'), ('TENSOR', (2048, 1024, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 2048, 16, 16), 'float32'), ('TENSOR', (512, 2048, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 2048, 16, 16), 'float32'), ('TENSOR', (126, 2048, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 16, 16), 'float32'), ('TENSOR', (512, 512, 3, 3), 'float32'), (2, 2), (1, 1, 1, 1), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 8, 8), 'float32'), ('TENSOR', (126, 512, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 8, 8), 'float32'), ('TENSOR', (512, 512, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 8, 8), 'float32'), ('TENSOR', (512, 512, 3, 3), 'float32'), (2, 2), (1, 1, 1, 1), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 4, 4), 'float32'), ('TENSOR', (126, 512, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 4, 4), 'float32'), ('TENSOR', (256, 512, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 256, 4, 4), 'float32'), ('TENSOR', (256, 256, 3, 3), 'float32'), (2, 2), (1, 1, 1, 1), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 256, 2, 2), 'float32'), ('TENSOR', (84, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 256, 2, 2), 'float32'), ('TENSOR', (256, 256, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 256, 2, 2), 'float32'), ('TENSOR', (256, 256, 3, 3), 'float32'), (2, 2), (1, 1, 1, 1), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
-    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 256, 1, 1), 'float32'), ('TENSOR', (84, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 1024, 32, 32), 'float32'), ('TENSOR', (16, 1024, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 2048, 16, 16), 'float32'), ('TENSOR', (24, 2048, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 8, 8), 'float32'), ('TENSOR', (24, 512, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 4, 4), 'float32'), ('TENSOR', (24, 512, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, 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=llvm -keys=cpu, 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 -keys=cpu, 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 -keys=cpu, 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.
@@ -285,6 +246,45 @@ Create TVM runtime and do inference
     Cannot find config for target=llvm -keys=cpu, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 64, 4, 4, 8), 'float32'), ('TENSOR', (3, 64, 3, 3, 8, 8), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW8c', 'NCHW8c', 'float32'). A fallback configuration is used, which may bring great performance regression.
     Cannot find config for target=llvm -keys=cpu, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 32, 2, 2, 8), 'float32'), ('TENSOR', (2, 32, 3, 3, 8, 8), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW8c', 'NCHW8c', 'float32'). A fallback configuration is used, which may bring great performance regression.
     Cannot find config for target=llvm -keys=cpu, workload=('conv2d_NCHWc.x86', ('TENSOR', (1, 32, 1, 1, 8), 'float32'), ('TENSOR', (2, 32, 3, 3, 8, 8), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'NCHW8c', 'NCHW8c', 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, 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.
+    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 64, 128, 128), 'float32'), ('TENSOR', (256, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 256, 128, 128), 'float32'), ('TENSOR', (64, 256, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 256, 128, 128), 'float32'), ('TENSOR', (128, 256, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 128, 64, 64), '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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 128, 64, 64), 'float32'), ('TENSOR', (512, 128, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 256, 128, 128), 'float32'), ('TENSOR', (512, 256, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 64, 64), 'float32'), ('TENSOR', (128, 512, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 64, 64), 'float32'), ('TENSOR', (256, 512, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 256, 32, 32), '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.
+    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 256, 32, 32), 'float32'), ('TENSOR', (1024, 256, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 64, 64), 'float32'), ('TENSOR', (1024, 512, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 1024, 32, 32), 'float32'), ('TENSOR', (256, 1024, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 1024, 32, 32), 'float32'), ('TENSOR', (84, 1024, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 1024, 32, 32), 'float32'), ('TENSOR', (512, 1024, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 16, 16), 'float32'), ('TENSOR', (512, 512, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 16, 16), 'float32'), ('TENSOR', (2048, 512, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 1024, 32, 32), 'float32'), ('TENSOR', (2048, 1024, 1, 1), 'float32'), (2, 2), (0, 0, 0, 0), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 2048, 16, 16), 'float32'), ('TENSOR', (512, 2048, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 2048, 16, 16), 'float32'), ('TENSOR', (126, 2048, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 16, 16), 'float32'), ('TENSOR', (512, 512, 3, 3), 'float32'), (2, 2), (1, 1, 1, 1), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 8, 8), 'float32'), ('TENSOR', (126, 512, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 8, 8), 'float32'), ('TENSOR', (512, 512, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 8, 8), 'float32'), ('TENSOR', (512, 512, 3, 3), 'float32'), (2, 2), (1, 1, 1, 1), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 4, 4), 'float32'), ('TENSOR', (126, 512, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 4, 4), 'float32'), ('TENSOR', (256, 512, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 256, 4, 4), 'float32'), ('TENSOR', (256, 256, 3, 3), 'float32'), (2, 2), (1, 1, 1, 1), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 256, 2, 2), 'float32'), ('TENSOR', (84, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 256, 2, 2), 'float32'), ('TENSOR', (256, 256, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 256, 2, 2), 'float32'), ('TENSOR', (256, 256, 3, 3), 'float32'), (2, 2), (1, 1, 1, 1), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
+    Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 256, 1, 1), 'float32'), ('TENSOR', (84, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 1024, 32, 32), 'float32'), ('TENSOR', (16, 1024, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 2048, 16, 16), 'float32'), ('TENSOR', (24, 2048, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 8, 8), 'float32'), ('TENSOR', (24, 512, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 512, 4, 4), 'float32'), ('TENSOR', (24, 512, 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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.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 -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, 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.
 
 
 
@@ -307,6 +307,11 @@ Display result
 
 
 
+.. rst-class:: sphx-glr-timing
+
+   **Total running time of the script:** ( 1 minutes  23.470 seconds)
+
+
 .. _sphx_glr_download_tutorials_frontend_deploy_ssd_gluoncv.py:
 
 
diff --git a/docs/_sources/tutorials/frontend/from_onnx.rst.txt b/docs/_sources/tutorials/frontend/from_onnx.rst.txt
index adae6d8..a5cf3dc 100644
--- a/docs/_sources/tutorials/frontend/from_onnx.rst.txt
+++ b/docs/_sources/tutorials/frontend/from_onnx.rst.txt
@@ -125,7 +125,7 @@ Compile the model with relay
 
  .. code-block:: none
 
-    /workspace/docs/../python/tvm/relay/frontend/onnx.py:2409: UserWarning: Mismatched attribute type in ' : kernel_shape'
+    /workspace/docs/../python/tvm/relay/frontend/onnx.py:2420: UserWarning: Mismatched attribute type in ' : kernel_shape'
 
     ==> Context: Bad node spec: input: "1" input: "2" output: "11" op_type: "Conv" attribute { name: "kernel_shape" ints: 5 ints: 5 } attribute { name: "strides" ints: 1 ints: 1 } attribute { name: "pads" ints: 2 ints: 2 ints: 2 ints: 2 } attribute { name: "dilations" ints: 1 ints: 1 } attribute { name: "group" i: 1 }
       warnings.warn(str(e))
@@ -151,7 +151,7 @@ Execute on TVM
 
  .. code-block:: none
 
-
    ...47%, 0.01 MB, 47 KB/s, 0 seconds passed
    ...94%, 0.02 MB, 94 KB/s, 0 seconds passed
    ...100%, 0.02 MB, 140 KB/s, 0 seconds passed
+
    ...47%, 0.01 MB, 654 KB/s, 0 seconds passed
    ...94%, 0.02 MB, 1246 KB/s, 0 seconds passed
    ...100%, 0.02 MB, 1828 KB/s, 0 seconds passed
     Cannot find config for target=llvm -keys=cpu, 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 -keys=cpu, 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 -keys=cpu, 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 0b360f6..2de794a 100644
--- a/docs/_sources/tutorials/frontend/from_pytorch.rst.txt
+++ b/docs/_sources/tutorials/frontend/from_pytorch.rst.txt
@@ -128,15 +128,6 @@ Convert PyTorch graph to Relay graph. The input name can be arbitrary.
 
 
 
-.. 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/from_tensorflow.rst.txt b/docs/_sources/tutorials/frontend/from_tensorflow.rst.txt
index fdb4b07..06ab917 100644
--- a/docs/_sources/tutorials/frontend/from_tensorflow.rst.txt
+++ b/docs/_sources/tutorials/frontend/from_tensorflow.rst.txt
@@ -195,8 +195,6 @@ Results:
 
  .. 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
     /workspace/docs/../python/tvm/relay/frontend/tensorflow.py:2661: UserWarning: Ignore the passed shape. Shape in graphdef will be used for operator DecodeJpeg/contents.
       "will be used for operator %s." % node.name)
     /workspace/docs/../python/tvm/relay/frontend/tensorflow.py:686: UserWarning: DecodeJpeg: It's a pass through, please handle preprocessing before input
diff --git a/docs/_sources/tutorials/frontend/sg_execution_times.rst.txt b/docs/_sources/tutorials/frontend/sg_execution_times.rst.txt
index cf7c24a..24f8180 100644
--- a/docs/_sources/tutorials/frontend/sg_execution_times.rst.txt
+++ b/docs/_sources/tutorials/frontend/sg_execution_times.rst.txt
@@ -5,23 +5,23 @@
 
 Computation times
 =================
-**05:28.927** total execution time for **tutorials_frontend** files:
+**06:58.557** total execution time for **tutorials_frontend** files:
 
-- **01:57.708**: :ref:`sphx_glr_tutorials_frontend_deploy_prequantized_tflite.py` (``deploy_prequantized_tflite.py``)
-- **00:31.096**: :ref:`sphx_glr_tutorials_frontend_deploy_ssd_gluoncv.py` (``deploy_ssd_gluoncv.py``)
-- **00:27.286**: :ref:`sphx_glr_tutorials_frontend_deploy_prequantized.py` (``deploy_prequantized.py``)
-- **00:25.435**: :ref:`sphx_glr_tutorials_frontend_from_tensorflow.py` (``from_tensorflow.py``)
-- **00:19.997**: :ref:`sphx_glr_tutorials_frontend_from_tflite.py` (``from_tflite.py``)
-- **00:17.655**: :ref:`sphx_glr_tutorials_frontend_deploy_quantized.py` (``deploy_quantized.py``)
-- **00:17.600**: :ref:`sphx_glr_tutorials_frontend_from_darknet.py` (``from_darknet.py``)
-- **00:12.539**: :ref:`sphx_glr_tutorials_frontend_from_caffe2.py` (``from_caffe2.py``)
-- **00:10.911**: :ref:`sphx_glr_tutorials_frontend_deploy_model_on_rasp.py` (``deploy_model_on_rasp.py``)
-- **00:09.774**: :ref:`sphx_glr_tutorials_frontend_deploy_model_on_android.py` (``deploy_model_on_android.py``)
-- **00:08.931**: :ref:`sphx_glr_tutorials_frontend_from_pytorch.py` (``from_pytorch.py``)
-- **00:08.328**: :ref:`sphx_glr_tutorials_frontend_from_keras.py` (``from_keras.py``)
-- **00:07.266**: :ref:`sphx_glr_tutorials_frontend_from_coreml.py` (``from_coreml.py``)
-- **00:06.399**: :ref:`sphx_glr_tutorials_frontend_from_mxnet.py` (``from_mxnet.py``)
-- **00:04.607**: :ref:`sphx_glr_tutorials_frontend_build_gcn.py` (``build_gcn.py``)
-- **00:01.752**: :ref:`sphx_glr_tutorials_frontend_using_external_lib.py` (``using_external_lib.py``)
-- **00:01.497**: :ref:`sphx_glr_tutorials_frontend_from_onnx.py` (``from_onnx.py``)
-- **00:00.145**: :ref:`sphx_glr_tutorials_frontend_deploy_sparse.py` (``deploy_sparse.py``)
+- **02:10.602**: :ref:`sphx_glr_tutorials_frontend_deploy_prequantized_tflite.py` (``deploy_prequantized_tflite.py``)
+- **01:23.470**: :ref:`sphx_glr_tutorials_frontend_deploy_ssd_gluoncv.py` (``deploy_ssd_gluoncv.py``)
+- **00:31.979**: :ref:`sphx_glr_tutorials_frontend_deploy_prequantized.py` (``deploy_prequantized.py``)
+- **00:28.920**: :ref:`sphx_glr_tutorials_frontend_from_tensorflow.py` (``from_tensorflow.py``)
+- **00:22.131**: :ref:`sphx_glr_tutorials_frontend_from_tflite.py` (``from_tflite.py``)
+- **00:20.266**: :ref:`sphx_glr_tutorials_frontend_from_darknet.py` (``from_darknet.py``)
+- **00:19.613**: :ref:`sphx_glr_tutorials_frontend_deploy_quantized.py` (``deploy_quantized.py``)
+- **00:14.318**: :ref:`sphx_glr_tutorials_frontend_from_caffe2.py` (``from_caffe2.py``)
+- **00:12.623**: :ref:`sphx_glr_tutorials_frontend_deploy_model_on_android.py` (``deploy_model_on_android.py``)
+- **00:11.926**: :ref:`sphx_glr_tutorials_frontend_deploy_model_on_rasp.py` (``deploy_model_on_rasp.py``)
+- **00:09.563**: :ref:`sphx_glr_tutorials_frontend_from_pytorch.py` (``from_pytorch.py``)
+- **00:09.231**: :ref:`sphx_glr_tutorials_frontend_from_keras.py` (``from_keras.py``)
+- **00:08.213**: :ref:`sphx_glr_tutorials_frontend_from_coreml.py` (``from_coreml.py``)
+- **00:06.999**: :ref:`sphx_glr_tutorials_frontend_from_mxnet.py` (``from_mxnet.py``)
+- **00:05.069**: :ref:`sphx_glr_tutorials_frontend_build_gcn.py` (``build_gcn.py``)
+- **00:01.982**: :ref:`sphx_glr_tutorials_frontend_using_external_lib.py` (``using_external_lib.py``)
+- **00:01.492**: :ref:`sphx_glr_tutorials_frontend_from_onnx.py` (``from_onnx.py``)
+- **00:00.160**: :ref:`sphx_glr_tutorials_frontend_deploy_sparse.py` (``deploy_sparse.py``)
diff --git a/docs/_sources/tutorials/frontend/using_external_lib.rst.txt b/docs/_sources/tutorials/frontend/using_external_lib.rst.txt
index 1655ec3..b0053ae 100644
--- a/docs/_sources/tutorials/frontend/using_external_lib.rst.txt
+++ b/docs/_sources/tutorials/frontend/using_external_lib.rst.txt
@@ -105,18 +105,18 @@ By setting the logging level to DEBUG, the result of Relay graph compilation wil
  .. code-block:: none
 
     DEBUG:autotvm:Finish loading 688 records
-    INFO:compile_engine:Use implementation injective.cpu for op add
-    INFO:compile_engine:Use implementation injective.cpu for op sqrt
-    INFO:compile_engine:Use implementation injective.cpu for op divide
-    INFO:compile_engine:Use implementation injective.cpu for op multiply
-    INFO:compile_engine:Use implementation injective.cpu for op expand_dims
-    INFO:compile_engine:Use implementation injective.cpu for op negative
-    INFO:compile_engine:Use implementation injective.cpu for op add
+    INFO:compile_engine:Using injective.cpu for add based on highest priority (10)
+    INFO:compile_engine:Using injective.cpu for sqrt based on highest priority (10)
+    INFO:compile_engine:Using injective.cpu for divide based on highest priority (10)
+    INFO:compile_engine:Using injective.cpu for multiply based on highest priority (10)
+    INFO:compile_engine:Using injective.cpu for expand_dims based on highest priority (10)
+    INFO:compile_engine:Using injective.cpu for negative based on highest priority (10)
+    INFO:compile_engine:Using injective.cpu for add based on highest priority (10)
     WARNING:autotvm:Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -thread_warp_size=32, workload=('conv2d_nchw.cuda', ('TENSOR', (1, 3, 224, 224), 'float32'), ('TENSOR', (16, 3, 3, 3), 'float32'), (1, 1), (1, 1, 1, 1), (1, 1), 'float32'). A fallback configuration is used, which may bring great performance regression.
-    INFO:compile_engine:Use implementation conv2d_nchw.cuda for op nn.conv2d
-    INFO:compile_engine:Use implementation injective.cuda for op multiply
-    INFO:compile_engine:Use implementation injective.cuda for op add
-    INFO:compile_engine:Use implementation injective.cuda for op nn.relu
+    INFO:compile_engine:Using conv2d_nchw.cuda for nn.conv2d based on highest priority (10)
+    INFO:compile_engine:Using injective.cuda for multiply based on highest priority (10)
+    INFO:compile_engine:Using injective.cuda for add based on highest priority (10)
+    INFO:compile_engine:Using injective.cuda for nn.relu based on highest priority (10)
 
 
 
diff --git a/docs/_sources/tutorials/get_started/cross_compilation_and_rpc.rst.txt b/docs/_sources/tutorials/get_started/cross_compilation_and_rpc.rst.txt
index 4d27b6a..64e0f5e 100644
--- a/docs/_sources/tutorials/get_started/cross_compilation_and_rpc.rst.txt
+++ b/docs/_sources/tutorials/get_started/cross_compilation_and_rpc.rst.txt
@@ -235,7 +235,7 @@ device and returns the measured cost. Network overhead is excluded.
 
  .. code-block:: none
 
-    1.894e-07 secs/op
+    1.292e-07 secs/op
 
 
 
diff --git a/docs/_sources/tutorials/get_started/relay_quick_start.rst.txt b/docs/_sources/tutorials/get_started/relay_quick_start.rst.txt
index 19be2c9..ee6359e 100644
--- a/docs/_sources/tutorials/get_started/relay_quick_start.rst.txt
+++ b/docs/_sources/tutorials/get_started/relay_quick_start.rst.txt
@@ -84,7 +84,7 @@ to show the network structure.
 
  .. code-block:: none
 
-    v0.0.4
+    #[version = "0.0.5"]
     def @main(%data: Tensor[(1, 3, 224, 224), float32], %bn_data_gamma: Tensor[(3), float32], %bn_data_beta: Tensor[(3), float32], %bn_data_moving_mean: Tensor[(3), float32], %bn_data_moving_var: Tensor[(3), float32], %conv0_weight: Tensor[(64, 3, 7, 7), float32], %bn0_gamma: Tensor[(64), float32], %bn0_beta: Tensor[(64), float32], %bn0_moving_mean: Tensor[(64), float32], %bn0_moving_var: Tensor[(64), float32], %stage1_unit1_bn1_gamma: Tensor[(64), float32], %stage1_unit1_bn1_beta: Tenso [...]
       %0 = nn.batch_norm(%data, %bn_data_gamma, %bn_data_beta, %bn_data_moving_mean, %bn_data_moving_var, epsilon=2e-05f, scale=False) /* ty=(Tensor[(1, 3, 224, 224), float32], Tensor[(3), float32], Tensor[(3), float32]) */;
       %1 = %0.0;
@@ -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, 28 KB/s, 0 seconds passed
    ...3%, 0.02 MB, 57 KB/s, 0 seconds passed
    ...5%, 0.02 MB, 86 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, 171 KB/s, 0 seconds passed
    ...13%, 0.05 MB, 200 KB/s, 0 seconds passed
    ...15%, 0.06 MB, 228 KB/s, 0 seconds passed
    ...17%, 0.07 MB, 257 KB/s, 0 seconds passed
    ...19%, 0.08 MB, 285 KB/s, 0 seconds passed
    ...21%, 0.09 MB, 313 KB/s, 0 seconds passed
    ...23%, 0.09 MB, 341 KB/s, 0 seconds passed
    ...25%, 0.10 MB, 369 KB/s, 0 seconds passed
    ...27%, 0.11 MB, 398 KB/s, 0 seconds passed
    ...29%, 0.12 MB, 425 KB/s, 0 seconds passed
    ...31%, 0.12 MB, 454 KB/s, 0 seconds passed
    ...33%, 0.13 MB, 482 KB/s, 0 seconds passed
    ...35%, 0.14 MB, 510 KB/s, 0 seconds passed
    ...37%, 0.15 MB, 537 KB/s, 0 seconds passed
    ...39%, 0.16 MB, 565 KB/s, 0 seconds passed
    ...41%, 0.16 MB, 593 KB/s, 0 seconds pas
 sed
    ...43%, 0.17 MB, 621 KB/s, 0 seconds passed
    ...45%, 0.18 MB, 649 KB/s, 0 seconds passed
    ...47%, 0.19 MB, 677 KB/s, 0 seconds passed
    ...49%, 0.20 MB, 705 KB/s, 0 seconds passed
    ...51%, 0.20 MB, 732 KB/s, 0 seconds passed
    ...53%, 0.21 MB, 760 KB/s, 0 seconds passed
    ...55%, 0.22 MB, 788 KB/s, 0 seconds passed
    ...57%, 0.23 MB, 815 KB/s, 0 seconds passed
    ...59%, 0.23 MB, 843 KB/s, 0 seconds passed
    ...61%, 0.24 MB, 870 KB/s, 0 seconds passed
    ...63%, 0.25 MB, 898 KB/s, 0 seconds passed
    ...65%, 0.26 MB, 925 KB/s, 0 seconds passed
    ...67%, 0.27 MB, 953 KB/s, 0 seconds passed
    ...69%, 0.27 MB, 980 KB/s, 0 seconds passed
    ...71%, 0.28 MB, 1008 KB/s, 0 seconds passed
    ...73%, 0.29 MB, 1035 KB/s, 0 seconds passed
    ...75%, 0.30 MB, 1062 KB/s, 0 seconds passed
    ...77%, 0.30 MB, 1090 KB/s, 0 seconds passed
    ...79%, 0.31 MB, 1117 KB/s, 0 seconds passed
    ...81%, 0.32 MB, 1144 KB/s, 0 seconds passed
    ...83%, 0.33 MB, 1172 K
 B/s, 0 seconds passed
    ...85%, 0.34 MB, 1199 KB/s, 0 seconds passed
    ...87%, 0.34 MB, 1227 KB/s, 0 seconds passed
    ...89%, 0.35 MB, 1253 KB/s, 0 seconds passed
    ...91%, 0.36 MB, 1281 KB/s, 0 seconds passed
    ...93%, 0.37 MB, 1308 KB/s, 0 seconds passed
    ...95%, 0.38 MB, 1336 KB/s, 0 seconds passed
    ...97%, 0.38 MB, 1361 KB/s, 0 seconds passed
    ...99%, 0.39 MB, 1389 KB/s, 0 seconds passed
    ...100%, 0.40 MB, 1416 KB/s, 0 seconds passed
+
    ...1%, 0.01 MB, 268 KB/s, 0 seconds passed
    ...3%, 0.02 MB, 529 KB/s, 0 seconds passed
    ...5%, 0.02 MB, 783 KB/s, 0 seconds passed
    ...7%, 0.03 MB, 1037 KB/s, 0 seconds passed
    ...9%, 0.04 MB, 1273 KB/s, 0 seconds passed
    ...11%, 0.05 MB, 1517 KB/s, 0 seconds passed
    ...13%, 0.05 MB, 1740 KB/s, 0 seconds passed
    ...15%, 0.06 MB, 1966 KB/s, 0 seconds passed
    ...17%, 0.07 MB, 2197 KB/s, 0 seconds passed
    ...19%, 0.08 MB, 2427 KB/s, 0 seconds passed
    ...21%, 0.09 MB, 2604 KB/s, 0 seconds passed
    ...23%, 0.09 MB, 2825 KB/s, 0 seconds passed
    ...25%, 0.10 MB, 3043 KB/s, 0 seconds passed
    ...27%, 0.11 MB, 3218 KB/s, 0 seconds passed
    ...29%, 0.12 MB, 3425 KB/s, 0 seconds passed
    ...31%, 0.12 MB, 3597 KB/s, 0 seconds passed
    ...33%, 0.13 MB, 3803 KB/s, 0 seconds passed
    ...35%, 0.14 MB, 3794 KB/s, 0 seconds passed
    ...37%, 0.15 MB, 3982 KB/s, 0 seconds passed
    ...39%, 0.16 MB, 4173 KB/s, 0 seconds passed
    ...41%, 0.16 MB, 425
 0 KB/s, 0 seconds passed
    ...43%, 0.17 MB, 4426 KB/s, 0 seconds passed
    ...45%, 0.18 MB, 4607 KB/s, 0 seconds passed
    ...47%, 0.19 MB, 4786 KB/s, 0 seconds passed
    ...49%, 0.20 MB, 4920 KB/s, 0 seconds passed
    ...51%, 0.20 MB, 5088 KB/s, 0 seconds passed
    ...53%, 0.21 MB, 5239 KB/s, 0 seconds passed
    ...55%, 0.22 MB, 5420 KB/s, 0 seconds passed
    ...57%, 0.23 MB, 5543 KB/s, 0 seconds passed
    ...59%, 0.23 MB, 5720 KB/s, 0 seconds passed
    ...61%, 0.24 MB, 5846 KB/s, 0 seconds passed
    ...63%, 0.25 MB, 6020 KB/s, 0 seconds passed
    ...65%, 0.26 MB, 6165 KB/s, 0 seconds passed
    ...67%, 0.27 MB, 6337 KB/s, 0 seconds passed
    ...69%, 0.27 MB, 6481 KB/s, 0 seconds passed
    ...71%, 0.28 MB, 6650 KB/s, 0 seconds passed
    ...73%, 0.29 MB, 6762 KB/s, 0 seconds passed
    ...75%, 0.30 MB, 6928 KB/s, 0 seconds passed
    ...77%, 0.30 MB, 7035 KB/s, 0 seconds passed
    ...79%, 0.31 MB, 7200 KB/s, 0 seconds passed
    ...81%, 0.32 MB, 7326 KB/s, 0 seconds
  passed
    ...83%, 0.33 MB, 7488 KB/s, 0 seconds passed
    ...85%, 0.34 MB, 7583 KB/s, 0 seconds passed
    ...87%, 0.34 MB, 7743 KB/s, 0 seconds passed
    ...89%, 0.35 MB, 7824 KB/s, 0 seconds passed
    ...91%, 0.36 MB, 7980 KB/s, 0 seconds passed
    ...93%, 0.37 MB, 8130 KB/s, 0 seconds passed
    ...95%, 0.38 MB, 8286 KB/s, 0 seconds passed
    ...97%, 0.38 MB, 8381 KB/s, 0 seconds passed
    ...99%, 0.39 MB, 8533 KB/s, 0 seconds passed
    ...100%, 0.40 MB, 8658 KB/s, 0 seconds passed
     Cannot find config for target=cuda -keys=cuda,gpu -max_num_threads=1024 -model=unknown -thread_warp_size=32, workload=('dense_small_batch.cuda', ('TENSOR', (1, 512), 'float32'), ('TENSOR', (1000, 512), 'float32'), None, 'float32'). A fallback configuration is used, which may bring great performance regression.
 
 
diff --git a/docs/_sources/tutorials/get_started/sg_execution_times.rst.txt b/docs/_sources/tutorials/get_started/sg_execution_times.rst.txt
index ab65508..fe2274d 100644
--- a/docs/_sources/tutorials/get_started/sg_execution_times.rst.txt
+++ b/docs/_sources/tutorials/get_started/sg_execution_times.rst.txt
@@ -5,8 +5,8 @@
 
 Computation times
 =================
-**00:09.442** total execution time for **tutorials_get_started** files:
+**00:10.063** total execution time for **tutorials_get_started** files:
 
-- **00:09.035**: :ref:`sphx_glr_tutorials_get_started_relay_quick_start.py` (``relay_quick_start.py``)
-- **00:00.296**: :ref:`sphx_glr_tutorials_get_started_tensor_expr_get_started.py` (``tensor_expr_get_started.py``)
-- **00:00.111**: :ref:`sphx_glr_tutorials_get_started_cross_compilation_and_rpc.py` (``cross_compilation_and_rpc.py``)
+- **00:09.575**: :ref:`sphx_glr_tutorials_get_started_relay_quick_start.py` (``relay_quick_start.py``)
+- **00:00.342**: :ref:`sphx_glr_tutorials_get_started_tensor_expr_get_started.py` (``tensor_expr_get_started.py``)
+- **00:00.146**: :ref:`sphx_glr_tutorials_get_started_cross_compilation_and_rpc.py` (``cross_compilation_and_rpc.py``)
diff --git a/docs/_sources/tutorials/get_started/tensor_expr_get_started.rst.txt b/docs/_sources/tutorials/get_started/tensor_expr_get_started.rst.txt
index eb64516..629e56d 100644
--- a/docs/_sources/tutorials/get_started/tensor_expr_get_started.rst.txt
+++ b/docs/_sources/tutorials/get_started/tensor_expr_get_started.rst.txt
@@ -254,12 +254,12 @@ The following code fetches the device module and prints the content code.
  .. code-block:: none
 
     -----GPU code-----
-    extern "C" __global__ void myadd_kernel0(void* __restrict__ C, void* __restrict__ A, void* __restrict__ B, int n, int stride, int stride1, int stride2) {
+    extern "C" __global__ void myadd_kernel0(float* __restrict__ C, float* __restrict__ A, float* __restrict__ B, int n, int stride, int stride1, int stride2) {
       if (((int)blockIdx.x) < (n >> 6)) {
-        ((float*)C)[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride2))] = (((float*)A)[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride))] + ((float*)B)[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride1))]);
+        C[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride2))] = (A[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride))] + B[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride1))]);
       } else {
         if (((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) < n) {
-          ((float*)C)[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride2))] = (((float*)A)[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride))] + ((float*)B)[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride1))]);
+          C[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride2))] = (A[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride))] + B[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride1))]);
         }
       }
     }
diff --git a/docs/_sources/tutorials/index.rst.txt b/docs/_sources/tutorials/index.rst.txt
index 40a8f65..d571d7a 100644
--- a/docs/_sources/tutorials/index.rst.txt
+++ b/docs/_sources/tutorials/index.rst.txt
@@ -887,13 +887,13 @@ Developer Tutorials
 
 .. raw:: html
 
-    <div class="sphx-glr-thumbcontainer" tooltip="As the number of optimization passes increases in Relay, it becomes intractable to execute them...">
+    <div class="sphx-glr-thumbcontainer" tooltip="As the number of optimization passes increases in Relay/tir, it becomes intractable to execute ...">
 
 .. only:: html
 
-    .. figure:: /tutorials/dev/images/thumb/sphx_glr_relay_pass_infra_thumb.png
+    .. figure:: /tutorials/dev/images/thumb/sphx_glr_use_pass_infra_thumb.png
 
-        :ref:`sphx_glr_tutorials_dev_relay_pass_infra.py`
+        :ref:`sphx_glr_tutorials_dev_use_pass_infra.py`
 
 .. raw:: html
 
@@ -903,7 +903,7 @@ Developer Tutorials
 .. toctree::
    :hidden:
 
-   /tutorials/dev/relay_pass_infra
+   /tutorials/dev/use_pass_infra
 .. raw:: html
 
     <div style='clear:both'></div>
diff --git a/docs/_sources/tutorials/language/intrin_math.rst.txt b/docs/_sources/tutorials/language/intrin_math.rst.txt
index f7584fb..869e9d9 100644
--- a/docs/_sources/tutorials/language/intrin_math.rst.txt
+++ b/docs/_sources/tutorials/language/intrin_math.rst.txt
@@ -69,12 +69,12 @@ In the following example, we use :any:`tvm.tir.call_pure_extern` to call
 
  .. code-block:: none
 
-    extern "C" __global__ void myexp_kernel0(void* __restrict__ B, void* __restrict__ A, int n, int stride, int stride1) {
+    extern "C" __global__ void myexp_kernel0(float* __restrict__ B, float* __restrict__ A, int n, int stride, int stride1) {
       if (((int)blockIdx.x) < (n >> 6)) {
-        ((float*)B)[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride1))] = __expf(((float*)A)[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride))]);
+        B[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride1))] = __expf(A[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride))]);
       } else {
         if (((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) < n) {
-          ((float*)B)[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride1))] = __expf(((float*)A)[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride))]);
+          B[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride1))] = __expf(A[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride))]);
         }
       }
     }
@@ -119,12 +119,12 @@ The following code use te.exp instead, which create an intrinsic call
 
  .. code-block:: none
 
-    extern "C" __global__ void myexp_kernel0(void* __restrict__ B, void* __restrict__ A, int n, int stride, int stride1) {
+    extern "C" __global__ void myexp_kernel0(float* __restrict__ B, float* __restrict__ A, int n, int stride, int stride1) {
       if (((int)blockIdx.x) < (n >> 6)) {
-        ((float*)B)[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride1))] = __expf(((float*)A)[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride))]);
+        B[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride1))] = __expf(A[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride))]);
       } else {
         if (((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) < n) {
-          ((float*)B)[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride1))] = __expf(((float*)A)[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride))]);
+          B[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride1))] = __expf(A[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride))]);
         }
       }
     }
@@ -153,12 +153,12 @@ The same te.exp can also be used for float64 data types.
 
  .. code-block:: none
 
-    __kernel void myexp_kernel0(__global void* restrict B, __global void* restrict A, int n, int stride, int stride1) {
+    __kernel void myexp_kernel0(__global float* restrict B, __global float* restrict A, int n, int stride, int stride1) {
       if (((int)get_group_id(0)) < (n >> 6)) {
-        ((__global float*)B)[((((((int)get_group_id(0)) * 64) + ((int)get_local_id(0))) * stride1))] = exp(((__global float*)A)[((((((int)get_group_id(0)) * 64) + ((int)get_local_id(0))) * stride))]);
+        B[((((((int)get_group_id(0)) * 64) + ((int)get_local_id(0))) * stride1))] = exp(A[((((((int)get_group_id(0)) * 64) + ((int)get_local_id(0))) * stride))]);
       } else {
         if (((((int)get_group_id(0)) * 64) + ((int)get_local_id(0))) < n) {
-          ((__global float*)B)[((((((int)get_group_id(0)) * 64) + ((int)get_local_id(0))) * stride1))] = exp(((__global float*)A)[((((((int)get_group_id(0)) * 64) + ((int)get_local_id(0))) * stride))]);
+          B[((((((int)get_group_id(0)) * 64) + ((int)get_local_id(0))) * stride1))] = exp(A[((((((int)get_group_id(0)) * 64) + ((int)get_local_id(0))) * stride))]);
         }
       }
     }
@@ -228,12 +228,12 @@ fast math version :code:`__expf`.
 
  .. code-block:: none
 
-    extern "C" __global__ void myexp_kernel0(void* __restrict__ B, void* __restrict__ A, int n, int stride, int stride1) {
+    extern "C" __global__ void myexp_kernel0(float* __restrict__ B, float* __restrict__ A, int n, int stride, int stride1) {
       if (((int)blockIdx.x) < (n >> 6)) {
-        ((float*)B)[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride1))] = expf(((float*)A)[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride))]);
+        B[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride1))] = expf(A[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride))]);
       } else {
         if (((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) < n) {
-          ((float*)B)[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride1))] = expf(((float*)A)[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride))]);
+          B[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride1))] = expf(A[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride))]);
         }
       }
     }
@@ -293,12 +293,12 @@ The following example add an intrinsic :code:`mylog` to the system.
 
  .. code-block:: none
 
-    extern "C" __global__ void mylog_kernel0(void* __restrict__ B, void* __restrict__ A, int n, int stride, int stride1) {
+    extern "C" __global__ void mylog_kernel0(float* __restrict__ B, float* __restrict__ A, int n, int stride, int stride1) {
       if (((int)blockIdx.x) < (n >> 6)) {
-        ((float*)B)[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride1))] = logf(((float*)A)[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride))]);
+        B[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride1))] = logf(A[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride))]);
       } else {
         if (((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) < n) {
-          ((float*)B)[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride1))] = logf(((float*)A)[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride))]);
+          B[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride1))] = logf(A[((((((int)blockIdx.x) * 64) + ((int)threadIdx.x)) * stride))]);
         }
       }
     }
diff --git a/docs/_sources/tutorials/language/reduction.rst.txt b/docs/_sources/tutorials/language/reduction.rst.txt
index 5938d1e..fc891cc 100644
--- a/docs/_sources/tutorials/language/reduction.rst.txt
+++ b/docs/_sources/tutorials/language/reduction.rst.txt
@@ -94,8 +94,8 @@ Before doing anything, let us print out the IR code of default schedule.
 
     primfn(A_1: handle, B_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {B: Buffer(B_2: handle, float32, [n: int32], [stride: int32], type="auto"),
-                 A: Buffer(A_2: handle, float32, [n, m: int32], [stride_1: int32, stride_2: int32], type="auto")}
+      buffers = {B: Buffer(B_2: Pointer(float32), float32, [n: int32], [stride: int32], type="auto"),
+                 A: Buffer(A_2: Pointer(float32), float32, [n, m: int32], [stride_1: int32, stride_2: int32], type="auto")}
       buffer_map = {A_1: A, B_1: B} {
       for (i: int32, 0, n) {
         B_2[(i*stride)] = 0f32
@@ -105,7 +105,7 @@ Before doing anything, let us print out the IR code of default schedule.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -135,17 +135,17 @@ axis by different factors. The result is a nested reduction.
 
     primfn(A_1: handle, B_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {B: Buffer(B_2: handle, float32, [n: int32], [stride: int32], type="auto"),
-                 A: Buffer(A_2: handle, float32, [n, m: int32], [stride_1: int32, stride_2: int32], type="auto")}
+      buffers = {B: Buffer(B_2: Pointer(float32), float32, [n: int32], [stride: int32], type="auto"),
+                 A: Buffer(A_2: Pointer(float32), float32, [n, m: int32], [stride_1: int32, stride_2: int32], type="auto")}
       buffer_map = {A_1: A, B_1: B} {
       for (i.outer: int32, 0, floordiv((n + 31), 32)) {
         for (i.inner: int32, 0, 32) {
           if @tir.likely((((i.outer*32) + i.inner) < n), dtype=bool) {
             B_2[(((i.outer*32) + i.inner)*stride)] = 0f32
           }
-          for (k.outer: int32, 0, floordiv((m + 15), 16)) {
-            for (k.inner: int32, 0, 16) {
-              if @tir.likely((((i.outer*32) + i.inner) < n), dtype=bool) {
+          if @tir.likely((((i.outer*32) + i.inner) < n), dtype=bool) {
+            for (k.outer: int32, 0, floordiv((m + 15), 16)) {
+              for (k.inner: int32, 0, 16) {
                 if @tir.likely((((k.outer*16) + k.inner) < m), dtype=bool) {
                   B_2[(((i.outer*32) + i.inner)*stride)] = ((float32*)B_2[(((i.outer*32) + i.inner)*stride)] + (float32*)A_2[((((i.outer*32) + i.inner)*stride_1) + (((k.outer*16) + k.inner)*stride_2))])
                 }
@@ -156,7 +156,7 @@ axis by different factors. The result is a nested reduction.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -181,8 +181,8 @@ If we are building a GPU kernel, we can bind the rows of B to GPU threads.
 
     primfn(A_1: handle, B_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {B: Buffer(B_2: handle, float32, [n: int32], [stride: int32], type="auto"),
-                 A: Buffer(A_2: handle, float32, [n, m: int32], [stride_1: int32, stride_2: int32], type="auto")}
+      buffers = {B: Buffer(B_2: Pointer(float32), float32, [n: int32], [stride: int32], type="auto"),
+                 A: Buffer(A_2: Pointer(float32), float32, [n, m: int32], [stride_1: int32, stride_2: int32], type="auto")}
       buffer_map = {A_1: A, B_1: B} {
       attr [IterVar(blockIdx.x: int32, (nullptr), "ThreadIndex", "blockIdx.x")] "thread_extent" = floordiv((n + 31), 32);
       attr [IterVar(threadIdx.x: int32, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 32 {
@@ -201,7 +201,7 @@ If we are building a GPU kernel, we can bind the rows of B to GPU threads.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -237,10 +237,10 @@ result B.rf. The factored dimension becomes the first dimension of B.rf.
 
     primfn(A_1: handle, B_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {B: Buffer(B_2: handle, float32, [n: int32], [stride: int32], type="auto"),
-                 A: Buffer(A_2: handle, float32, [n, m: int32], [stride_1: int32, stride_2: int32], type="auto")}
+      buffers = {B: Buffer(B_2: Pointer(float32), float32, [n: int32], [stride: int32], type="auto"),
+                 A: Buffer(A_2: Pointer(float32), float32, [n, m: int32], [stride_1: int32, stride_2: int32], type="auto")}
       buffer_map = {A_1: A, B_1: B} {
-      attr [B.rf: handle] "storage_scope" = "global";
+      attr [B.rf: Pointer(float32)] "storage_scope" = "global";
       allocate(B.rf, float32, [(n*16)]) {
         for (k.inner: int32, 0, 16) {
           for (i: int32, 0, n) {
@@ -261,7 +261,7 @@ result B.rf. The factored dimension becomes the first dimension of B.rf.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -284,7 +284,7 @@ the first axis of reduced result of B.f
 
  .. code-block:: none
 
-    [reduce(combiner=comm_reducer(result=[(x + y)], lhs=[x], rhs=[y], identity_element=[0f]), source=[B.rf[k.inner.v, ax0]], axis=[iter_var(k.inner.v, range(min=0, ext=16))], where=(bool)1, value_index=0)]
+    [reduce(combiner=comm_reducer(result=[(x + y)], lhs=[x], rhs=[y], identity_element=[0f]), source=[B.rf[k.inner.v, ax0]], init=[], axis=[iter_var(k.inner.v, range(min=0, ext=16))], where=(bool)1, value_index=0)]
 
 
 
@@ -324,19 +324,19 @@ columns by threadIdx.x and finally do a cross thread reduction over threadIdx.x
 
  .. code-block:: none
 
-    extern "C" __global__ void default_function_kernel0(void* __restrict__ A, void* __restrict__ B, int m, int n, int stride, int stride1, int stride2) {
+    extern "C" __global__ void default_function_kernel0(float* __restrict__ A, float* __restrict__ B, int m, int n, int stride, int stride1, int stride2) {
       float B_rf[1];
       __shared__ float red_buf0[512];
       B_rf[(0)] = 0.000000e+00f;
       for (int k_outer = 0; k_outer < (m >> 4); ++k_outer) {
         if (((((int)blockIdx.x) * 32) + ((int)threadIdx.y)) < n) {
-          B_rf[(0)] = (B_rf[(0)] + ((float*)A)[(((((((int)blockIdx.x) * 32) + ((int)threadIdx.y)) * stride) + (((k_outer * 16) + ((int)threadIdx.x)) * stride1)))]);
+          B_rf[(0)] = (B_rf[(0)] + A[(((((((int)blockIdx.x) * 32) + ((int)threadIdx.y)) * stride) + (((k_outer * 16) + ((int)threadIdx.x)) * stride1)))]);
         }
       }
       for (int k_outer1 = 0; k_outer1 < (((m & 15) + 15) >> 4); ++k_outer1) {
         if (((((int)blockIdx.x) * 32) + ((int)threadIdx.y)) < n) {
           if (((((m >> 4) * 16) + (k_outer1 * 16)) + ((int)threadIdx.x)) < m) {
-            B_rf[(0)] = (B_rf[(0)] + ((float*)A)[(((((((int)blockIdx.x) * 32) + ((int)threadIdx.y)) * stride) + (((((m >> 4) * 16) + (k_outer1 * 16)) + ((int)threadIdx.x)) * stride1)))]);
+            B_rf[(0)] = (B_rf[(0)] + A[(((((((int)blockIdx.x) * 32) + ((int)threadIdx.y)) * stride) + (((((m >> 4) * 16) + (k_outer1 * 16)) + ((int)threadIdx.x)) * stride1)))]);
           }
         }
       }
@@ -351,7 +351,7 @@ columns by threadIdx.x and finally do a cross thread reduction over threadIdx.x
       }
       __syncthreads();
       if (((int)threadIdx.x) == 0) {
-        ((float*)B)[((((((int)blockIdx.x) * 32) + ((int)threadIdx.y)) * stride2))] = ((volatile float*)red_buf0)[((((int)threadIdx.y) * 16))];
+        B[((((((int)blockIdx.x) * 32) + ((int)threadIdx.y)) * stride2))] = ((volatile float*)red_buf0)[((((int)threadIdx.y) * 16))];
       }
     }
 
@@ -412,9 +412,9 @@ Here is an example for 2D convolution with filter size = [3, 3] and strides = [1
 
     primfn(Input_1: handle, Filter_1: handle, Output_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {Output: Buffer(Output_2: handle, float32, [(n: int32 - 2), (n - 2)], []),
-                 Filter: Buffer(Filter_2: handle, float32, [3, 3], []),
-                 Input: Buffer(Input_2: handle, float32, [n, n], [stride: int32, stride_1: int32], type="auto")}
+      buffers = {Output: Buffer(Output_2: Pointer(float32), float32, [(n: int32 - 2), (n - 2)], []),
+                 Filter: Buffer(Filter_2: Pointer(float32), float32, [3, 3], []),
+                 Input: Buffer(Input_2: Pointer(float32), float32, [n, n], [stride: int32, stride_1: int32], type="auto")}
       buffer_map = {Input_1: Input, Filter_1: Filter, Output_1: Output} {
       for (i: int32, 0, (n - 2)) {
         for (j: int32, 0, (n - 2)) {
@@ -428,7 +428,7 @@ Here is an example for 2D convolution with filter size = [3, 3] and strides = [1
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
diff --git a/docs/_sources/tutorials/language/scan.rst.txt b/docs/_sources/tutorials/language/scan.rst.txt
index f63c38a..24567b7 100644
--- a/docs/_sources/tutorials/language/scan.rst.txt
+++ b/docs/_sources/tutorials/language/scan.rst.txt
@@ -100,8 +100,8 @@ To split on the time iteration, user can schedule on scan_op.scan_axis instead.
 
     primfn(X_1: handle, scan_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {scan: Buffer(scan_2: handle, float32, [m: int32, n: int32], [stride: int32, stride_1: int32], type="auto"),
-                 X: Buffer(X_2: handle, float32, [m, n], [stride_2: int32, stride_3: int32], type="auto")}
+      buffers = {scan: Buffer(scan_2: Pointer(float32), float32, [m: int32, n: int32], [stride: int32, stride_1: int32], type="auto"),
+                 X: Buffer(X_2: Pointer(float32), float32, [m, n], [stride_2: int32, stride_3: int32], type="auto")}
       buffer_map = {X_1: X, scan_1: scan} {
       attr [IterVar(blockIdx.x: int32, (nullptr), "ThreadIndex", "blockIdx.x")] "thread_extent" = floordiv((n + 255), 256);
       attr [IterVar(threadIdx.x: int32, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 256;
@@ -117,7 +117,7 @@ To split on the time iteration, user can schedule on scan_op.scan_axis instead.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -199,10 +199,10 @@ the body of scan to be compute_at locations outside the scan loop.
 
     primfn(X_1: handle, scan_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {scan: Buffer(scan_2: handle, float32, [m: int32, n: int32], [stride: int32, stride_1: int32], type="auto"),
-                 X: Buffer(X_2: handle, float32, [m, n], [stride_2: int32, stride_3: int32], type="auto")}
+      buffers = {scan: Buffer(scan_2: Pointer(float32), float32, [m: int32, n: int32], [stride: int32, stride_1: int32], type="auto"),
+                 X: Buffer(X_2: Pointer(float32), float32, [m, n], [stride_2: int32, stride_3: int32], type="auto")}
       buffer_map = {X_1: X, scan_1: scan} {
-      attr [s1: handle] "storage_scope" = "global";
+      attr [s1: Pointer(float32)] "storage_scope" = "global";
       allocate(s1, float32, [32]) {
         for (i: int32, 0, n) {
           scan_2[(i*stride_1)] = (float32*)X_2[(i*stride_3)]
@@ -224,7 +224,7 @@ the body of scan to be compute_at locations outside the scan loop.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -266,9 +266,9 @@ The following example demonstrates how we can build recurrence with two states.
 
     primfn(X_1: handle, scan.v0_1: handle, scan.v1_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {scan.v1: Buffer(scan.v1_2: handle, float32, [m: int32, l: int32], [stride: int32, stride_1: int32], type="auto"),
-                 scan.v0: Buffer(scan.v0_2: handle, float32, [m, n: int32], [stride_2: int32, stride_3: int32], type="auto"),
-                 X: Buffer(X_2: handle, float32, [m, n], [stride_4: int32, stride_5: int32], type="auto")}
+      buffers = {scan.v1: Buffer(scan.v1_2: Pointer(float32), float32, [m: int32, l: int32], [stride: int32, stride_1: int32], type="auto"),
+                 scan.v0: Buffer(scan.v0_2: Pointer(float32), float32, [m, n: int32], [stride_2: int32, stride_3: int32], type="auto"),
+                 X: Buffer(X_2: Pointer(float32), float32, [m, n], [stride_4: int32, stride_5: int32], type="auto")}
       buffer_map = {X_1: X, scan.v0_1: scan.v0, scan.v1_1: scan.v1} {
       for (i: int32, 0, n) {
         scan.v0_2[(i*stride_3)] = (float32*)X_2[(i*stride_5)]
@@ -286,7 +286,7 @@ The following example demonstrates how we can build recurrence with two states.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
diff --git a/docs/_sources/tutorials/language/schedule_primitives.rst.txt b/docs/_sources/tutorials/language/schedule_primitives.rst.txt
index c06efa3..36213b9 100644
--- a/docs/_sources/tutorials/language/schedule_primitives.rst.txt
+++ b/docs/_sources/tutorials/language/schedule_primitives.rst.txt
@@ -85,9 +85,9 @@ schedule computes tensor in a serial manner in a row-major order.
 
     primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {C: Buffer(C_2: handle, float32, [m: int32, n: int32], [stride: int32, stride_1: int32], type="auto"),
-                 B: Buffer(B_2: handle, float32, [m, n], [stride_2: int32, stride_3: int32], type="auto"),
-                 A: Buffer(A_2: handle, float32, [m, n], [stride_4: int32, stride_5: int32], type="auto")}
+      buffers = {C: Buffer(C_2: Pointer(float32), float32, [m: int32, n: int32], [stride: int32, stride_1: int32], type="auto"),
+                 B: Buffer(B_2: Pointer(float32), float32, [m, n], [stride_2: int32, stride_3: int32], type="auto"),
+                 A: Buffer(A_2: Pointer(float32), float32, [m, n], [stride_4: int32, stride_5: int32], type="auto")}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
       for (i: int32, 0, m) {
         for (j: int32, 0, n) {
@@ -96,7 +96,7 @@ schedule computes tensor in a serial manner in a row-major order.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -131,8 +131,8 @@ split
 
     primfn(A_1: handle, B_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {B: Buffer(B_2: handle, float32, [m: int32], [stride: int32], type="auto"),
-                 A: Buffer(A_2: handle, float32, [m], [stride_1: int32], type="auto")}
+      buffers = {B: Buffer(B_2: Pointer(float32), float32, [m: int32], [stride: int32], type="auto"),
+                 A: Buffer(A_2: Pointer(float32), float32, [m], [stride_1: int32], type="auto")}
       buffer_map = {A_1: A, B_1: B} {
       for (i.outer: int32, 0, floordiv((m + 31), 32)) {
         for (i.inner: int32, 0, 32) {
@@ -143,7 +143,7 @@ split
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -172,8 +172,8 @@ contrary with :code:`factor`.
 
     primfn(A_1: handle, B_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {B: Buffer(B_2: handle, float32, [m: int32], [stride: int32], type="auto"),
-                 A: Buffer(A_2: handle, float32, [m], [stride_1: int32], type="auto")}
+      buffers = {B: Buffer(B_2: Pointer(float32), float32, [m: int32], [stride: int32], type="auto"),
+                 A: Buffer(A_2: Pointer(float32), float32, [m], [stride_1: int32], type="auto")}
       buffer_map = {A_1: A, B_1: B} {
       for (i.outer: int32, 0, 32) {
         for (i.inner: int32, 0, floordiv((m + 31), 32)) {
@@ -184,7 +184,7 @@ contrary with :code:`factor`.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -215,14 +215,14 @@ axises.
 
     primfn(A_1: handle, B_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {B: Buffer(B_2: handle, float32, [m: int32, n: int32], [stride: int32, stride_1: int32], type="auto"),
-                 A: Buffer(A_2: handle, float32, [m, n], [stride_2: int32, stride_3: int32], type="auto")}
+      buffers = {B: Buffer(B_2: Pointer(float32), float32, [m: int32, n: int32], [stride: int32, stride_1: int32], type="auto"),
+                 A: Buffer(A_2: Pointer(float32), float32, [m, n], [stride_2: int32, stride_3: int32], type="auto")}
       buffer_map = {A_1: A, B_1: B} {
       for (i.outer: int32, 0, floordiv((m + 9), 10)) {
         for (j.outer: int32, 0, floordiv((n + 4), 5)) {
           for (i.inner: int32, 0, 10) {
-            for (j.inner: int32, 0, 5) {
-              if @tir.likely((((i.outer*10) + i.inner) < m), dtype=bool) {
+            if @tir.likely((((i.outer*10) + i.inner) < m), dtype=bool) {
+              for (j.inner: int32, 0, 5) {
                 if @tir.likely((((j.outer*5) + j.inner) < n), dtype=bool) {
                   B_2[((((i.outer*10) + i.inner)*stride) + (((j.outer*5) + j.inner)*stride_1))] = (float32*)A_2[((((i.outer*10) + i.inner)*stride_2) + (((j.outer*5) + j.inner)*stride_3))]
                 }
@@ -233,7 +233,7 @@ axises.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -266,8 +266,8 @@ fuse
 
     primfn(A_1: handle, B_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {B: Buffer(B_2: handle, float32, [m: int32, n: int32], [stride: int32, stride_1: int32], type="auto"),
-                 A: Buffer(A_2: handle, float32, [m, n], [stride_2: int32, stride_3: int32], type="auto")}
+      buffers = {B: Buffer(B_2: Pointer(float32), float32, [m: int32, n: int32], [stride: int32, stride_1: int32], type="auto"),
+                 A: Buffer(A_2: Pointer(float32), float32, [m, n], [stride_2: int32, stride_3: int32], type="auto")}
       buffer_map = {A_1: A, B_1: B} {
       for (i.outer: int32, 0, floordiv((m + 9), 10)) {
         for (j.outer: int32, 0, floordiv((n + 4), 5)) {
@@ -282,7 +282,7 @@ fuse
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -315,14 +315,14 @@ reorder
 
     primfn(A_1: handle, B_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {B: Buffer(B_2: handle, float32, [m: int32, n: int32], [stride: int32, stride_1: int32], type="auto"),
-                 A: Buffer(A_2: handle, float32, [m, n], [stride_2: int32, stride_3: int32], type="auto")}
+      buffers = {B: Buffer(B_2: Pointer(float32), float32, [m: int32, n: int32], [stride: int32, stride_1: int32], type="auto"),
+                 A: Buffer(A_2: Pointer(float32), float32, [m, n], [stride_2: int32, stride_3: int32], type="auto")}
       buffer_map = {A_1: A, B_1: B} {
       for (i.inner: int32, 0, 10) {
         for (j.outer: int32, 0, floordiv((n + 4), 5)) {
           for (i.outer: int32, 0, floordiv((m + 9), 10)) {
-            for (j.inner: int32, 0, 5) {
-              if @tir.likely((((i.outer*10) + i.inner) < m), dtype=bool) {
+            if @tir.likely((((i.outer*10) + i.inner) < m), dtype=bool) {
+              for (j.inner: int32, 0, 5) {
                 if @tir.likely((((j.outer*5) + j.inner) < n), dtype=bool) {
                   B_2[((((i.outer*10) + i.inner)*stride) + (((j.outer*5) + j.inner)*stride_1))] = (float32*)A_2[((((i.outer*10) + i.inner)*stride_2) + (((j.outer*5) + j.inner)*stride_3))]
                 }
@@ -333,7 +333,7 @@ reorder
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -366,8 +366,8 @@ in gpu programming.
 
     primfn(A_1: handle, B_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {B: Buffer(B_2: handle, float32, [n: int32], [stride: int32], type="auto"),
-                 A: Buffer(A_2: handle, float32, [n], [stride_1: int32], type="auto")}
+      buffers = {B: Buffer(B_2: Pointer(float32), float32, [n: int32], [stride: int32], type="auto"),
+                 A: Buffer(A_2: Pointer(float32), float32, [n], [stride_1: int32], type="auto")}
       buffer_map = {A_1: A, B_1: B} {
       attr [IterVar(blockIdx.x: int32, (nullptr), "ThreadIndex", "blockIdx.x")] "thread_extent" = floordiv((n + 63), 64);
       attr [IterVar(threadIdx.x: int32, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
@@ -376,7 +376,7 @@ in gpu programming.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -407,19 +407,19 @@ tensors at the root separately by default.
 
     primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {B: Buffer(B_2: handle, float32, [m: int32], [stride: int32], type="auto"),
-                 C: Buffer(C_2: handle, float32, [m], [stride_1: int32], type="auto"),
-                 A: Buffer(A_2: handle, float32, [m], [stride_2: int32], type="auto")}
+      buffers = {C: Buffer(C_2: Pointer(float32), float32, [m: int32], [stride: int32], type="auto"),
+                 B: Buffer(B_2: Pointer(float32), float32, [m], [stride_1: int32], type="auto"),
+                 A: Buffer(A_2: Pointer(float32), float32, [m], [stride_2: int32], type="auto")}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
       for (i: int32, 0, m) {
-        B_2[(i*stride)] = ((float32*)A_2[(i*stride_2)] + 1f32)
+        B_2[(i*stride_1)] = ((float32*)A_2[(i*stride_2)] + 1f32)
       }
       for (i_1: int32, 0, m) {
-        C_2[(i_1*stride_1)] = ((float32*)B_2[(i_1*stride)]*2f32)
+        C_2[(i_1*stride)] = ((float32*)B_2[(i_1*stride_1)]*2f32)
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -449,9 +449,9 @@ of computation of `C`.
 
     primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {C: Buffer(C_2: handle, float32, [m: int32], [stride: int32], type="auto"),
-                 B: Buffer(B_2: handle, float32, [m], [stride_1: int32], type="auto"),
-                 A: Buffer(A_2: handle, float32, [m], [stride_2: int32], type="auto")}
+      buffers = {C: Buffer(C_2: Pointer(float32), float32, [m: int32], [stride: int32], type="auto"),
+                 B: Buffer(B_2: Pointer(float32), float32, [m], [stride_1: int32], type="auto"),
+                 A: Buffer(A_2: Pointer(float32), float32, [m], [stride_2: int32], type="auto")}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
       for (i: int32, 0, m) {
         B_2[(i*stride_1)] = ((float32*)A_2[(i*stride_2)] + 1f32)
@@ -459,7 +459,7 @@ of computation of `C`.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -492,16 +492,16 @@ tensor is required.
 
     primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {C: Buffer(C_2: handle, float32, [m: int32], [stride: int32], type="auto"),
-                 B: Buffer(B_2: handle, float32, [m], [stride_1: int32], type="auto"),
-                 A: Buffer(A_2: handle, float32, [m], [stride_2: int32], type="auto")}
+      buffers = {B: Buffer(B_2: Pointer(float32), float32, [m: int32], [stride: int32], type="auto"),
+                 C: Buffer(C_2: Pointer(float32), float32, [m], [stride_1: int32], type="auto"),
+                 A: Buffer(A_2: Pointer(float32), float32, [m], [stride_2: int32], type="auto")}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
       for (i: int32, 0, m) {
-        C_2[(i*stride)] = (((float32*)A_2[(i*stride_2)] + 1f32)*2f32)
+        C_2[(i*stride_1)] = (((float32*)A_2[(i*stride_2)] + 1f32)*2f32)
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -533,9 +533,9 @@ compute_root
 
     primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {C: Buffer(C_2: handle, float32, [m: int32], [stride: int32], type="auto"),
-                 B: Buffer(B_2: handle, float32, [m], [stride_1: int32], type="auto"),
-                 A: Buffer(A_2: handle, float32, [m], [stride_2: int32], type="auto")}
+      buffers = {C: Buffer(C_2: Pointer(float32), float32, [m: int32], [stride: int32], type="auto"),
+                 B: Buffer(B_2: Pointer(float32), float32, [m], [stride_1: int32], type="auto"),
+                 A: Buffer(A_2: Pointer(float32), float32, [m], [stride_2: int32], type="auto")}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
       for (i: int32, 0, m) {
         B_2[(i*stride_1)] = ((float32*)A_2[(i*stride_2)] + 1f32)
@@ -545,7 +545,7 @@ compute_root
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
diff --git a/docs/_sources/tutorials/language/sg_execution_times.rst.txt b/docs/_sources/tutorials/language/sg_execution_times.rst.txt
index c1b7b67..645c7b1 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.450** total execution time for **tutorials_language** files:
+**00:04.036** total execution time for **tutorials_language** files:
 
-- **00:01.225**: :ref:`sphx_glr_tutorials_language_intrin_math.py` (``intrin_math.py``)
-- **00:00.611**: :ref:`sphx_glr_tutorials_language_tensorize.py` (``tensorize.py``)
-- **00:00.524**: :ref:`sphx_glr_tutorials_language_reduction.py` (``reduction.py``)
-- **00:00.421**: :ref:`sphx_glr_tutorials_language_scan.py` (``scan.py``)
-- **00:00.211**: :ref:`sphx_glr_tutorials_language_extern_op.py` (``extern_op.py``)
-- **00:00.158**: :ref:`sphx_glr_tutorials_language_schedule_primitives.py` (``schedule_primitives.py``)
-- **00:00.157**: :ref:`sphx_glr_tutorials_language_tedd.py` (``tedd.py``)
-- **00:00.141**: :ref:`sphx_glr_tutorials_language_tuple_inputs.py` (``tuple_inputs.py``)
+- **00:01.485**: :ref:`sphx_glr_tutorials_language_intrin_math.py` (``intrin_math.py``)
+- **00:00.702**: :ref:`sphx_glr_tutorials_language_tensorize.py` (``tensorize.py``)
+- **00:00.567**: :ref:`sphx_glr_tutorials_language_reduction.py` (``reduction.py``)
+- **00:00.507**: :ref:`sphx_glr_tutorials_language_scan.py` (``scan.py``)
+- **00:00.256**: :ref:`sphx_glr_tutorials_language_extern_op.py` (``extern_op.py``)
+- **00:00.188**: :ref:`sphx_glr_tutorials_language_tedd.py` (``tedd.py``)
+- **00:00.182**: :ref:`sphx_glr_tutorials_language_schedule_primitives.py` (``schedule_primitives.py``)
+- **00:00.149**: :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 003d3f7..04cb605 100644
--- a/docs/_sources/tutorials/language/tensorize.rst.txt
+++ b/docs/_sources/tutorials/language/tensorize.rst.txt
@@ -71,9 +71,9 @@ The following lines describe the computation :code:`A * B^T` in TVM.
 
     primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {B: Buffer(B_2: handle, float32, [512, 64], []),
-                 C: Buffer(C_2: handle, float32, [1024, 512], []),
-                 A: Buffer(A_2: handle, float32, [1024, 64], [])}
+      buffers = {C: Buffer(C_2: Pointer(float32), float32, [1024, 512], []),
+                 B: Buffer(B_2: Pointer(float32), float32, [512, 64], []),
+                 A: Buffer(A_2: Pointer(float32), float32, [1024, 64], [])}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
       for (i: int32, 0, 1024) {
         for (j: int32, 0, 512) {
@@ -85,7 +85,7 @@ The following lines describe the computation :code:`A * B^T` in TVM.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -120,9 +120,9 @@ Thus we break down the matmul loops to make the innermost loops a (16x64) GEMV.
 
     primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {C: Buffer(C_2: handle, float32, [1024, 512], []),
-                 B: Buffer(B_2: handle, float32, [512, 64], []),
-                 A: Buffer(A_2: handle, float32, [1024, 64], [])}
+      buffers = {B: Buffer(B_2: Pointer(float32), float32, [512, 64], []),
+                 C: Buffer(C_2: Pointer(float32), float32, [1024, 512], []),
+                 A: Buffer(A_2: Pointer(float32), float32, [1024, 64], [])}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
       for (i: int32, 0, 1024) {
         for (j.outer: int32, 0, 32) {
@@ -136,7 +136,7 @@ Thus we break down the matmul loops to make the innermost loops a (16x64) GEMV.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -236,9 +236,9 @@ such placeholder can be put to let TVM automatically bind the inferred value for
 
     primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {C: Buffer(C_2: handle, float32, [1024, 512], []),
-                 B: Buffer(B_2: handle, float32, [512, 64], []),
-                 A: Buffer(A_2: handle, float32, [1024, 64], [])}
+      buffers = {C: Buffer(C_2: Pointer(float32), float32, [1024, 512], []),
+                 B: Buffer(B_2: Pointer(float32), float32, [512, 64], []),
+                 A: Buffer(A_2: Pointer(float32), float32, [1024, 64], [])}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
       for (i: int32, 0, 1024) {
         for (j.outer: int32, 0, 32) {
@@ -247,7 +247,7 @@ such placeholder can be put to let TVM automatically bind the inferred value for
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -306,12 +306,12 @@ The importing needs to happen before the tensorized GEMV being executed.
 
     primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {C: Buffer(C_2: handle, float32, [1024, 512], []),
-                 B: Buffer(B_2: handle, float32, [512, 64], []),
-                 A: Buffer(A_2: handle, float32, [1024, 64], [])}
+      buffers = {C: Buffer(C_2: Pointer(float32), float32, [1024, 512], []),
+                 B: Buffer(B_2: Pointer(float32), float32, [512, 64], []),
+                 A: Buffer(A_2: Pointer(float32), float32, [1024, 64], [])}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
-      attr [IterVar(i: int32, (nullptr), "DataPar", "")] "pragma_import_llvm" = "; ModuleID = '/tmp/tmpwb3x0ppk/input0.cc'
-    source_filename = "/tmp/tmpwb3x0ppk/input0.cc"
+      attr [IterVar(i: int32, (nullptr), "DataPar", "")] "pragma_import_llvm" = "; ModuleID = '/tmp/tmp8w4jrxj5/input0.cc'
+    source_filename = "/tmp/tmp8w4jrxj5/input0.cc"
     target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
     target triple = "x86_64-pc-linux-gnu"
 
@@ -409,7 +409,7 @@ The importing needs to happen before the tensorized GEMV being executed.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
diff --git a/docs/_sources/tutorials/language/tuple_inputs.rst.txt b/docs/_sources/tutorials/language/tuple_inputs.rst.txt
index 135a6bc..1340ee4 100644
--- a/docs/_sources/tutorials/language/tuple_inputs.rst.txt
+++ b/docs/_sources/tutorials/language/tuple_inputs.rst.txt
@@ -64,20 +64,20 @@ together in the next schedule procedure.
 
     primfn(A0_1: handle, A1_1: handle, B.v0_1: handle, B.v1_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {B.v0: Buffer(B.v0_2: handle, float32, [m: int32, n: int32], [stride: int32, stride_1: int32], type="auto"),
-                 B.v1: Buffer(B.v1_2: handle, float32, [m, n], [stride_2: int32, stride_3: int32], type="auto"),
-                 A1: Buffer(A1_2: handle, float32, [m, n], [stride_4: int32, stride_5: int32], type="auto"),
-                 A0: Buffer(A0_2: handle, float32, [m, n], [stride_6: int32, stride_7: int32], type="auto")}
+      buffers = {B.v1: Buffer(B.v1_2: Pointer(float32), float32, [m: int32, n: int32], [stride: int32, stride_1: int32], type="auto"),
+                 B.v0: Buffer(B.v0_2: Pointer(float32), float32, [m, n], [stride_2: int32, stride_3: int32], type="auto"),
+                 A1: Buffer(A1_2: Pointer(float32), float32, [m, n], [stride_4: int32, stride_5: int32], type="auto"),
+                 A0: Buffer(A0_2: Pointer(float32), float32, [m, n], [stride_6: int32, stride_7: int32], type="auto")}
       buffer_map = {A0_1: A0, A1_1: A1, B.v0_1: B.v0, B.v1_1: B.v1} {
       for (i: int32, 0, m) {
         for (j: int32, 0, n) {
-          B.v0_2[((i*stride) + (j*stride_1))] = ((float32*)A0_2[((i*stride_6) + (j*stride_7))] + 2f32)
-          B.v1_2[((i*stride_2) + (j*stride_3))] = ((float32*)A1_2[((i*stride_4) + (j*stride_5))]*3f32)
+          B.v0_2[((i*stride_2) + (j*stride_3))] = ((float32*)A0_2[((i*stride_6) + (j*stride_7))] + 2f32)
+          B.v1_2[((i*stride) + (j*stride_1))] = ((float32*)A1_2[((i*stride_4) + (j*stride_5))]*3f32)
         }
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -133,10 +133,10 @@ with :py:func:`te.comm_reducer` as below:
 
     primfn(idx_1: handle, val_1: handle, T.v0_1: handle, T.v1_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {T.v1: Buffer(T.v1_2: handle, int32, [m: int32], [stride: int32], type="auto"),
-                 T.v0: Buffer(T.v0_2: handle, int32, [m], [stride_1: int32], type="auto"),
-                 val: Buffer(val_2: handle, int32, [m, n: int32], [stride_2: int32, stride_3: int32], type="auto"),
-                 idx: Buffer(idx_2: handle, int32, [m, n], [stride_4: int32, stride_5: int32], type="auto")}
+      buffers = {T.v1: Buffer(T.v1_2: Pointer(int32), int32, [m: int32], [stride: int32], type="auto"),
+                 T.v0: Buffer(T.v0_2: Pointer(int32), int32, [m], [stride_1: int32], type="auto"),
+                 val: Buffer(val_2: Pointer(int32), int32, [m, n: int32], [stride_2: int32, stride_3: int32], type="auto"),
+                 idx: Buffer(idx_2: Pointer(int32), int32, [m, n], [stride_4: int32, stride_5: int32], type="auto")}
       buffer_map = {idx_1: idx, val_1: val, T.v0_1: T.v0, T.v1_1: T.v1} {
       for (i: int32, 0, m) {
         T.v0_2[(i*stride_1)] = -1
@@ -148,7 +148,7 @@ with :py:func:`te.comm_reducer` as below:
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -191,13 +191,13 @@ in terms of operation.
 
     primfn(A0_1: handle, A1_1: handle, C_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {C: Buffer(C_2: handle, float32, [m: int32, n: int32], [stride: int32, stride_1: int32], type="auto"),
-                 A1: Buffer(A1_2: handle, float32, [m, n], [stride_2: int32, stride_3: int32], type="auto"),
-                 A0: Buffer(A0_2: handle, float32, [m, n], [stride_4: int32, stride_5: int32], type="auto")}
+      buffers = {C: Buffer(C_2: Pointer(float32), float32, [m: int32, n: int32], [stride: int32, stride_1: int32], type="auto"),
+                 A1: Buffer(A1_2: Pointer(float32), float32, [m, n], [stride_2: int32, stride_3: int32], type="auto"),
+                 A0: Buffer(A0_2: Pointer(float32), float32, [m, n], [stride_4: int32, stride_5: int32], type="auto")}
       buffer_map = {A0_1: A0, A1_1: A1, C_1: C} {
-      attr [B.v0: handle] "storage_scope" = "global";
+      attr [B.v0: Pointer(float32)] "storage_scope" = "global";
       allocate(B.v0, float32, [n]);
-      attr [B.v1: handle] "storage_scope" = "global";
+      attr [B.v1: Pointer(float32)] "storage_scope" = "global";
       allocate(B.v1, float32, [n]);
       for (i: int32, 0, m) {
         for (j: int32, 0, n) {
@@ -210,7 +210,7 @@ in terms of operation.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
diff --git a/docs/_sources/tutorials/micro/micro_tflite.rst.txt b/docs/_sources/tutorials/micro/micro_tflite.rst.txt
index 668be1b..5ff5ed8 100644
--- a/docs/_sources/tutorials/micro/micro_tflite.rst.txt
+++ b/docs/_sources/tutorials/micro/micro_tflite.rst.txt
@@ -190,7 +190,7 @@ See : How do I inspect a .tflite file? `<https://www.tensorflow.org/lite/guide/f
     #
     # Setup the device config which is what will be used to communicate
     # with the microcontroller (a STM32F746 Discovery board)
-    TARGET = 'c -device=micro_dev'
+    TARGET = 'c --system-lib  --runtime=c'
     dev_config = micro.device.arm.stm32f746xx.generate_config("127.0.0.1", 6666)
 
 
diff --git a/docs/_sources/tutorials/micro/sg_execution_times.rst.txt b/docs/_sources/tutorials/micro/sg_execution_times.rst.txt
index 0bf985d..f09ec7a 100644
--- a/docs/_sources/tutorials/micro/sg_execution_times.rst.txt
+++ b/docs/_sources/tutorials/micro/sg_execution_times.rst.txt
@@ -5,6 +5,6 @@
 
 Computation times
 =================
-**00:00.147** total execution time for **tutorials_micro** files:
+**00:00.164** total execution time for **tutorials_micro** files:
 
-- **00:00.147**: :ref:`sphx_glr_tutorials_micro_micro_tflite.py` (``micro_tflite.py``)
+- **00:00.164**: :ref:`sphx_glr_tutorials_micro_micro_tflite.py` (``micro_tflite.py``)
diff --git a/docs/_sources/tutorials/optimize/opt_conv_cuda.rst.txt b/docs/_sources/tutorials/optimize/opt_conv_cuda.rst.txt
index 69bd38d..2080119 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: 19.770489 ms
+    Convolution: 18.827409 ms
 
 
 
diff --git a/docs/_sources/tutorials/optimize/opt_conv_tensorcore.rst.txt b/docs/_sources/tutorials/optimize/opt_conv_tensorcore.rst.txt
index 4128075..9ef72a7 100644
--- a/docs/_sources/tutorials/optimize/opt_conv_tensorcore.rst.txt
+++ b/docs/_sources/tutorials/optimize/opt_conv_tensorcore.rst.txt
@@ -342,20 +342,20 @@ one time.
 
     primfn(A_1: handle, W_1: handle, Conv_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {Conv: Buffer(Conv_2: handle, float32, [16, 14, 14, 32, 16, 16], []),
-                 W: Buffer(W_2: handle, float16, [3, 3, 16, 32, 16, 16], []),
-                 A: Buffer(A_2: handle, float16, [16, 14, 14, 16, 16, 16], [])}
+      buffers = {Conv: Buffer(Conv_2: Pointer(float32), float32, [16, 14, 14, 32, 16, 16], []),
+                 W: Buffer(W_2: Pointer(float16), float16, [3, 3, 16, 32, 16, 16], []),
+                 A: Buffer(A_2: Pointer(float16), float16, [16, 14, 14, 16, 16, 16], [])}
       buffer_map = {A_1: A, W_1: W, Conv_1: Conv} {
       attr [IterVar(blockIdx.z: int32, (nullptr), "ThreadIndex", "blockIdx.z")] "thread_extent" = 196;
-      attr [Conv.wmma.accumulator: handle] "storage_scope" = "wmma.accumulator";
+      attr [Conv.wmma.accumulator: Pointer(float32)] "storage_scope" = "wmma.accumulator";
       allocate(Conv.wmma.accumulator, float32, [2048]);
-      attr [Apad.shared: handle] "storage_scope" = "shared";
+      attr [Apad.shared: Pointer(float16)] "storage_scope" = "shared";
       allocate(Apad.shared, float16, [12288]);
-      attr [W.shared: handle] "storage_scope" = "shared";
+      attr [W.shared: Pointer(float16)] "storage_scope" = "shared";
       allocate(W.shared, float16, [12288]);
-      attr [Apad.shared.wmma.matrix_a: handle] "storage_scope" = "wmma.matrix_a";
+      attr [Apad.shared.wmma.matrix_a: Pointer(float16)] "storage_scope" = "wmma.matrix_a";
       allocate(Apad.shared.wmma.matrix_a, float16, [512]);
-      attr [W.shared.wmma.matrix_b: handle] "storage_scope" = "wmma.matrix_b";
+      attr [W.shared.wmma.matrix_b: Pointer(float16)] "storage_scope" = "wmma.matrix_b";
       allocate(W.shared.wmma.matrix_b, float16, [1024]);
       attr [IterVar(blockIdx.x: int32, (nullptr), "ThreadIndex", "blockIdx.x")] "thread_extent" = 2;
       attr [IterVar(blockIdx.y: int32, (nullptr), "ThreadIndex", "blockIdx.y")] "thread_extent" = 4;
@@ -429,7 +429,7 @@ one time.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -460,20 +460,20 @@ by mapping the 2D convolution to tensor intrinsics
 
     primfn(A_1: handle, W_1: handle, Conv_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {Conv: Buffer(Conv_2: handle, float32, [16, 14, 14, 32, 16, 16], []),
-                 W: Buffer(W_2: handle, float16, [3, 3, 16, 32, 16, 16], []),
-                 A: Buffer(A_2: handle, float16, [16, 14, 14, 16, 16, 16], [])}
+      buffers = {Conv: Buffer(Conv_2: Pointer(float32), float32, [16, 14, 14, 32, 16, 16], []),
+                 W: Buffer(W_2: Pointer(float16), float16, [3, 3, 16, 32, 16, 16], []),
+                 A: Buffer(A_2: Pointer(float16), float16, [16, 14, 14, 16, 16, 16], [])}
       buffer_map = {A_1: A, W_1: W, Conv_1: Conv} {
       attr [IterVar(blockIdx.z: int32, (nullptr), "ThreadIndex", "blockIdx.z")] "thread_extent" = 196;
-      attr [Conv.wmma.accumulator: handle] "storage_scope" = "wmma.accumulator";
+      attr [Conv.wmma.accumulator: Pointer(float32)] "storage_scope" = "wmma.accumulator";
       allocate(Conv.wmma.accumulator, float32, [2048]);
-      attr [Apad.shared: handle] "storage_scope" = "shared";
+      attr [Apad.shared: Pointer(float16)] "storage_scope" = "shared";
       allocate(Apad.shared, float16, [12288]);
-      attr [W.shared: handle] "storage_scope" = "shared";
+      attr [W.shared: Pointer(float16)] "storage_scope" = "shared";
       allocate(W.shared, float16, [12288]);
-      attr [Apad.shared.wmma.matrix_a: handle] "storage_scope" = "wmma.matrix_a";
+      attr [Apad.shared.wmma.matrix_a: Pointer(float16)] "storage_scope" = "wmma.matrix_a";
       allocate(Apad.shared.wmma.matrix_a, float16, [512]);
-      attr [W.shared.wmma.matrix_b: handle] "storage_scope" = "wmma.matrix_b";
+      attr [W.shared.wmma.matrix_b: Pointer(float16)] "storage_scope" = "wmma.matrix_b";
       allocate(W.shared.wmma.matrix_b, float16, [1024]);
       attr [IterVar(blockIdx.x: int32, (nullptr), "ThreadIndex", "blockIdx.x")] "thread_extent" = 2;
       attr [IterVar(blockIdx.y: int32, (nullptr), "ThreadIndex", "blockIdx.y")] "thread_extent" = 4;
@@ -525,7 +525,7 @@ by mapping the 2D convolution to tensor intrinsics
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -563,7 +563,7 @@ be able to run on our build server
 
  .. code-block:: none
 
-    conv2d with tensor core: 6.656447 ms
+    conv2d with tensor core: 6.651443 ms
 
 
 
diff --git a/docs/_sources/tutorials/optimize/opt_gemm.rst.txt b/docs/_sources/tutorials/optimize/opt_gemm.rst.txt
index 6cf0cbb..b8570aa 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.006930
-    Baseline: 5.833613
+    Numpy running time: 0.010477
+    Baseline: 6.061385
 
 
 
@@ -144,9 +144,9 @@ Here is the generated IR using our baseline schedule.
 
     primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {C: Buffer(C_2: handle, float32, [1024, 1024], []),
-                 B: Buffer(B_2: handle, float32, [1024, 1024], []),
-                 A: Buffer(A_2: handle, float32, [1024, 1024], [])}
+      buffers = {C: Buffer(C_2: Pointer(float32), float32, [1024, 1024], []),
+                 B: Buffer(B_2: Pointer(float32), float32, [1024, 1024], []),
+                 A: Buffer(A_2: Pointer(float32), float32, [1024, 1024], [])}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
       for (x: int32, 0, 1024) {
         for (y: int32, 0, 1024) {
@@ -158,7 +158,7 @@ Here is the generated IR using our baseline schedule.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -206,7 +206,7 @@ fill 32 * 32 * sizeof(float) which is 4KB in the cache whose total size is 32KB
 
  .. code-block:: none
 
-    Opt1: 0.108537
+    Opt1: 0.174518
 
 
 
@@ -230,9 +230,9 @@ Here is the generated IR after blocking.
 
     primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {C: Buffer(C_2: handle, float32, [1024, 1024], []),
-                 B: Buffer(B_2: handle, float32, [1024, 1024], []),
-                 A: Buffer(A_2: handle, float32, [1024, 1024], [])}
+      buffers = {C: Buffer(C_2: Pointer(float32), float32, [1024, 1024], []),
+                 B: Buffer(B_2: Pointer(float32), float32, [1024, 1024], []),
+                 A: Buffer(A_2: Pointer(float32), float32, [1024, 1024], [])}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
       for (x.outer: int32, 0, 32) {
         for (y.outer: int32, 0, 32) {
@@ -254,7 +254,7 @@ Here is the generated IR after blocking.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -300,7 +300,7 @@ In this tutorial, we chose to vectorize the inner loop row data since it is cach
 
  .. code-block:: none
 
-    Opt2: 0.115233
+    Opt2: 0.170520
 
 
 
@@ -324,9 +324,9 @@ Here is the generated IR after vectorization.
 
     primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {C: Buffer(C_2: handle, float32, [1024, 1024], []),
-                 B: Buffer(B_2: handle, float32, [1024, 1024], []),
-                 A: Buffer(A_2: handle, float32, [1024, 1024], [])}
+      buffers = {C: Buffer(C_2: Pointer(float32), float32, [1024, 1024], []),
+                 B: Buffer(B_2: Pointer(float32), float32, [1024, 1024], []),
+                 A: Buffer(A_2: Pointer(float32), float32, [1024, 1024], [])}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
       for (x.outer: int32, 0, 32) {
         for (y.outer: int32, 0, 32) {
@@ -344,7 +344,7 @@ Here is the generated IR after vectorization.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -389,7 +389,7 @@ the access pattern for A matrix is more cache friendly.
 
  .. code-block:: none
 
-    Opt3: 0.059706
+    Opt3: 0.071670
 
 
 
@@ -413,9 +413,9 @@ Here is the generated IR after loop permutation.
 
     primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {C: Buffer(C_2: handle, float32, [1024, 1024], []),
-                 B: Buffer(B_2: handle, float32, [1024, 1024], []),
-                 A: Buffer(A_2: handle, float32, [1024, 1024], [])}
+      buffers = {C: Buffer(C_2: Pointer(float32), float32, [1024, 1024], []),
+                 B: Buffer(B_2: Pointer(float32), float32, [1024, 1024], []),
+                 A: Buffer(A_2: Pointer(float32), float32, [1024, 1024], [])}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
       for (x.outer: int32, 0, 32) {
         for (y.outer: int32, 0, 32) {
@@ -433,7 +433,7 @@ Here is the generated IR after loop permutation.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -497,7 +497,7 @@ the corresponding value from the packed array.
 
  .. code-block:: none
 
-    Opt4: 0.060272
+    Opt4: 0.062465
 
 
 
@@ -521,11 +521,11 @@ Here is the generated IR after array packing.
 
     primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {C: Buffer(C_2: handle, float32, [1024, 1024], []),
-                 B: Buffer(B_2: handle, float32, [1024, 1024], []),
-                 A: Buffer(A_2: handle, float32, [1024, 1024], [])}
+      buffers = {B: Buffer(B_2: Pointer(float32), float32, [1024, 1024], []),
+                 C: Buffer(C_2: Pointer(float32), float32, [1024, 1024], []),
+                 A: Buffer(A_2: Pointer(float32), float32, [1024, 1024], [])}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
-      attr [packedB: handle] "storage_scope" = "global";
+      attr [packedB: Pointer(float32)] "storage_scope" = "global";
       allocate(packedB, float32x32, [32768]) {
         for (x: int32, 0, 32) "parallel" {
           for (y: int32, 0, 1024) {
@@ -549,7 +549,7 @@ Here is the generated IR after array packing.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -607,7 +607,7 @@ write to C when all the block results are ready.
 
  .. code-block:: none
 
-    Opt5: 0.058253
+    Opt5: 0.081238
 
 
 
@@ -631,13 +631,13 @@ Here is the generated IR after blocking.
 
     primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {C: Buffer(C_2: handle, float32, [1024, 1024], []),
-                 B: Buffer(B_2: handle, float32, [1024, 1024], []),
-                 A: Buffer(A_2: handle, float32, [1024, 1024], [])}
+      buffers = {B: Buffer(B_2: Pointer(float32), float32, [1024, 1024], []),
+                 C: Buffer(C_2: Pointer(float32), float32, [1024, 1024], []),
+                 A: Buffer(A_2: Pointer(float32), float32, [1024, 1024], [])}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
-      attr [packedB: handle] "storage_scope" = "global";
+      attr [packedB: Pointer(float32)] "storage_scope" = "global";
       allocate(packedB, float32x32, [32768]);
-      attr [C.global: handle] "storage_scope" = "global";
+      attr [C.global: Pointer(float32)] "storage_scope" = "global";
       allocate(C.global, float32, [1024]) {
         for (x: int32, 0, 32) "parallel" {
           for (y: int32, 0, 1024) {
@@ -667,7 +667,7 @@ Here is the generated IR after blocking.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -723,7 +723,7 @@ Futhermore, we can also utilize multi-core processors to do the thread-level par
 
  .. code-block:: none
 
-    Opt6: 0.015962
+    Opt6: 0.020309
 
 
 
@@ -747,11 +747,11 @@ Here is the generated IR after parallelization.
 
     primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {C: Buffer(C_2: handle, float32, [1024, 1024], []),
-                 B: Buffer(B_2: handle, float32, [1024, 1024], []),
-                 A: Buffer(A_2: handle, float32, [1024, 1024], [])}
+      buffers = {C: Buffer(C_2: Pointer(float32), float32, [1024, 1024], []),
+                 B: Buffer(B_2: Pointer(float32), float32, [1024, 1024], []),
+                 A: Buffer(A_2: Pointer(float32), float32, [1024, 1024], [])}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
-      attr [packedB: handle] "storage_scope" = "global";
+      attr [packedB: Pointer(float32)] "storage_scope" = "global";
       allocate(packedB, float32x32, [32768]) {
         for (x: int32, 0, 32) "parallel" {
           for (y: int32, 0, 1024) {
@@ -759,7 +759,7 @@ Here is the generated IR after parallelization.
           }
         }
         for (x.outer: int32, 0, 32) "parallel" {
-          attr [C.global: handle] "storage_scope" = "global";
+          attr [C.global: Pointer(float32)] "storage_scope" = "global";
           allocate(C.global, float32, [1024]);
           for (y.outer: int32, 0, 32) {
             for (x.c.init: int32, 0, 32) {
@@ -783,7 +783,7 @@ Here is the generated IR after parallelization.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
diff --git a/docs/_sources/tutorials/optimize/sg_execution_times.rst.txt b/docs/_sources/tutorials/optimize/sg_execution_times.rst.txt
index 9f7db25..b1b6380 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.384** total execution time for **tutorials_optimize** files:
+**00:29.757** total execution time for **tutorials_optimize** files:
 
-- **00:24.629**: :ref:`sphx_glr_tutorials_optimize_opt_gemm.py` (``opt_gemm.py``)
-- **00:00.917**: :ref:`sphx_glr_tutorials_optimize_opt_conv_tensorcore.py` (``opt_conv_tensorcore.py``)
-- **00:00.685**: :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``)
+- **00:27.804**: :ref:`sphx_glr_tutorials_optimize_opt_gemm.py` (``opt_gemm.py``)
+- **00:01.005**: :ref:`sphx_glr_tutorials_optimize_opt_conv_tensorcore.py` (``opt_conv_tensorcore.py``)
+- **00:00.754**: :ref:`sphx_glr_tutorials_optimize_opt_conv_cuda.py` (``opt_conv_cuda.py``)
+- **00:00.194**: :ref:`sphx_glr_tutorials_optimize_opt_matmul_auto_tensorcore.py` (``opt_matmul_auto_tensorcore.py``)
diff --git a/docs/_sources/tutorials/topi/intro_topi.rst.txt b/docs/_sources/tutorials/topi/intro_topi.rst.txt
index dcfeb87..d699190 100644
--- a/docs/_sources/tutorials/topi/intro_topi.rst.txt
+++ b/docs/_sources/tutorials/topi/intro_topi.rst.txt
@@ -74,9 +74,9 @@ and to examine the IR code in human readable format, we can do
 
     primfn(A_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {A: Buffer(A_2: handle, float32, [n: int32, m: int32], [stride: int32, stride_1: int32], type="auto")}
+      buffers = {A: Buffer(A_2: Pointer(float32), float32, [n: int32, m: int32], [stride: int32, stride_1: int32], type="auto")}
       buffer_map = {A_1: A} {
-      attr [B: handle] "storage_scope" = "global";
+      attr [B: Pointer(float32)] "storage_scope" = "global";
       allocate(B, float32, [n]);
       for (i: int32, 0, n) {
         B[i] = 0f32
@@ -86,7 +86,7 @@ and to examine the IR code in human readable format, we can do
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -114,9 +114,9 @@ Fortunately, we can replace those two lines with simple :code:`topi.sum` much li
 
     primfn(A_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {A: Buffer(A_2: handle, float32, [n: int32, m: int32], [stride: int32, stride_1: int32], type="auto")}
+      buffers = {A: Buffer(A_2: Pointer(float32), float32, [n: int32, m: int32], [stride: int32, stride_1: int32], type="auto")}
       buffer_map = {A_1: A} {
-      attr [A_red: handle] "storage_scope" = "global";
+      attr [A_red: Pointer(float32)] "storage_scope" = "global";
       allocate(A_red, float32, [n]);
       for (ax0: int32, 0, n) {
         A_red[ax0] = 0f32
@@ -126,7 +126,7 @@ Fortunately, we can replace those two lines with simple :code:`topi.sum` much li
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -184,13 +184,13 @@ we can schedule the following series of operations ending with :code:`topi.sum`
 
     primfn(a_1: handle, b_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {b: Buffer(b_2: handle, float32, [10, 10], []),
-                 a: Buffer(a_2: handle, float32, [100, 10, 10], [])}
+      buffers = {b: Buffer(b_2: Pointer(float32), float32, [10, 10], []),
+                 a: Buffer(a_2: Pointer(float32), float32, [100, 10, 10], [])}
       buffer_map = {a_1: a, b_1: b} {
-      attr [T_divide_red: handle] "storage_scope" = "global";
+      attr [T_divide_red: Pointer(float32)] "storage_scope" = "global";
       allocate(T_divide_red, float32, [1]);
       attr [IterVar(threadIdx.x: int32, [0:1024], "ThreadIndex", "threadIdx.x")] "thread_extent" = 1024;
-      attr [T_divide_red.rf: handle] "storage_scope" = "local";
+      attr [T_divide_red.rf: Pointer(float32)] "storage_scope" = "local";
       allocate(T_divide_red.rf, float32, [1]);
       attr [reduce_temp0: handle] "storage_scope" = "local";
       allocate(reduce_temp0, float32, [1]) {
@@ -208,7 +208,7 @@ we can schedule the following series of operations ending with :code:`topi.sum`
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -230,7 +230,7 @@ As you can see, scheduled stages of computation have been accumulated and we can
 
  .. code-block:: none
 
-    [stage(a, 0x83da2ab0), stage(b, 0x9090f790), stage(T_add, 0x86d0bf20), stage(T_multiply, 0x88f3e0e0), stage(T_elemwise_sum, 0x7edb6330), stage(T_divide, 0x7f8347f0), stage(T_divide_red.rf, 0x80ff0c20), stage(T_divide_red, 0x7f85a5e0)]
+    [stage(a, 0x80353420), stage(b, 0x92595380), stage(T_add, 0x6c054870), stage(T_multiply, 0x742ca280), stage(T_elemwise_sum, 0x98f0fc80), stage(T_divide, 0x8e0e1aa0), stage(T_divide_red.rf, 0x61917c90), stage(T_divide_red, 0x956adf90)]
 
 
 
@@ -281,16 +281,16 @@ TOPI also provides common neural nets operations such as _softmax_ with optimize
 
     primfn(tarray_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {tarray: Buffer(tarray_2: handle, float32, [512, 512], [])}
+      buffers = {tarray: Buffer(tarray_2: Pointer(float32), float32, [512, 512], [])}
       buffer_map = {tarray_1: tarray} {
-      attr [T_softmax_norm: handle] "storage_scope" = "global";
+      attr [T_softmax_norm: Pointer(float32)] "storage_scope" = "global";
       allocate(T_softmax_norm, float32x4, [65536]);
       attr [IterVar(blockIdx.x: int32, (nullptr), "ThreadIndex", "blockIdx.x")] "thread_extent" = 512;
       attr [normal_reduce_temp0: handle] "storage_scope" = "local";
       allocate(normal_reduce_temp0, float32, [1]);
       attr [reduce_temp0: handle] "storage_scope" = "local";
       allocate(reduce_temp0, float32, [1]);
-      attr [T_softmax_exp: handle] "storage_scope" = "warp";
+      attr [T_softmax_exp: Pointer(float32)] "storage_scope" = "warp";
       allocate(T_softmax_exp, float32, [512]);
       attr [normal_reduce_temp0_1: handle] "storage_scope" = "local";
       allocate(normal_reduce_temp0_1, float32, [1]);
@@ -321,7 +321,7 @@ TOPI also provides common neural nets operations such as _softmax_ with optimize
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -362,17 +362,17 @@ We can fuse :code:`topi.nn.conv2d` and :code:`topi.nn.relu` together.
 
     primfn(placeholder_2: handle, placeholder_3: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {placeholder_1: Buffer(placeholder_4: handle, float32, [10, 3, 5, 5], []),
-                 placeholder: Buffer(placeholder_5: handle, float32, [1, 3, 224, 224], [])}
+      buffers = {placeholder_1: Buffer(placeholder_4: Pointer(float32), float32, [10, 3, 5, 5], []),
+                 placeholder: Buffer(placeholder_5: Pointer(float32), float32, [1, 3, 224, 224], [])}
       buffer_map = {placeholder_2: placeholder, placeholder_3: placeholder_1} {
-      attr [compute: handle] "storage_scope" = "global";
+      attr [compute: Pointer(float32)] "storage_scope" = "global";
       allocate(compute, float32, [501760]);
       attr [IterVar(blockIdx.z: int32, (nullptr), "ThreadIndex", "blockIdx.z")] "thread_extent" = 5;
-      attr [compute_1: handle] "storage_scope" = "local";
+      attr [compute_1: Pointer(float32)] "storage_scope" = "local";
       allocate(compute_1, float32, [14]);
-      attr [pad_temp.shared: handle] "storage_scope" = "shared";
+      attr [pad_temp.shared: Pointer(float32)] "storage_scope" = "shared";
       allocate(pad_temp.shared, float32, [112]);
-      attr [placeholder.shared: handle] "storage_scope" = "shared";
+      attr [placeholder.shared: Pointer(float32)] "storage_scope" = "shared";
       allocate(placeholder.shared, float32, [2]);
       attr [IterVar(blockIdx.y: int32, (nullptr), "ThreadIndex", "blockIdx.y")] "thread_extent" = 224;
       attr [IterVar(blockIdx.x: int32, (nullptr), "ThreadIndex", "blockIdx.x")] "thread_extent" = 2;
@@ -569,7 +569,7 @@ We can fuse :code:`topi.nn.conv2d` and :code:`topi.nn.relu` together.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
diff --git a/docs/_sources/tutorials/topi/sg_execution_times.rst.txt b/docs/_sources/tutorials/topi/sg_execution_times.rst.txt
index ad7d3a9..470e85a 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.482** total execution time for **tutorials_topi** files:
+**00:00.566** total execution time for **tutorials_topi** files:
 
-- **00:00.482**: :ref:`sphx_glr_tutorials_topi_intro_topi.py` (``intro_topi.py``)
+- **00:00.566**: :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 10dea85..316aa3d 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:05.278** total execution time for **vta_tutorials_autotvm** files:
+**00:06.714** total execution time for **vta_tutorials_autotvm** files:
 
-- **00:05.278**: :ref:`sphx_glr_vta_tutorials_autotvm_tune_relay_vta.py` (``tune_relay_vta.py``)
+- **00:06.714**: :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 3a263b8..ca2b8b2 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, 37 KB/s, 0 seconds passed
    ...2%, 0.02 MB, 75 KB/s, 0 seconds passed
    ...3%, 0.02 MB, 113 KB/s, 0 seconds passed
    ...4%, 0.03 MB, 151 KB/s, 0 seconds passed
    ...5%, 0.04 MB, 188 KB/s, 0 seconds passed
    ...6%, 0.05 MB, 226 KB/s, 0 seconds passed
    ...7%, 0.05 MB, 263 KB/s, 0 seconds passed
    ...8%, 0.06 MB, 301 KB/s, 0 seconds passed
    ...9%, 0.07 MB, 338 KB/s, 0 seconds passed
    ...10%, 0.08 MB, 375 KB/s, 0 seconds passed
    ...11%, 0.09 MB, 411 KB/s, 0 seconds passed
    ...13%, 0.09 MB, 447 KB/s, 0 seconds passed
    ...14%, 0.10 MB, 483 KB/s, 0 seconds passed
    ...15%, 0.11 MB, 519 KB/s, 0 seconds passed
    ...16%, 0.12 MB, 555 KB/s, 0 seconds passed
    ...17%, 0.12 MB, 591 KB/s, 0 seconds passed
    ...18%, 0.13 MB, 627 KB/s, 0 seconds passed
    ...19%, 0.14 MB, 662 KB/s, 0 seconds passed
    ...20%, 0.15 MB, 697 KB/s, 0 seconds passed
    ...21%, 0.16 MB, 733 KB/s, 0 seconds passed
    ...22%, 0.16 MB, 769 KB/s, 0 seconds passed
 
    ...23%, 0.17 MB, 803 KB/s, 0 seconds passed
    ...25%, 0.18 MB, 838 KB/s, 0 seconds passed
    ...26%, 0.19 MB, 874 KB/s, 0 seconds passed
    ...27%, 0.20 MB, 907 KB/s, 0 seconds passed
    ...28%, 0.20 MB, 940 KB/s, 0 seconds passed
    ...29%, 0.21 MB, 975 KB/s, 0 seconds passed
    ...30%, 0.22 MB, 1010 KB/s, 0 seconds passed
    ...31%, 0.23 MB, 1045 KB/s, 0 seconds passed
    ...32%, 0.23 MB, 1078 KB/s, 0 seconds passed
    ...33%, 0.24 MB, 1113 KB/s, 0 seconds passed
    ...34%, 0.25 MB, 1145 KB/s, 0 seconds passed
    ...35%, 0.26 MB, 1181 KB/s, 0 seconds passed
    ...36%, 0.27 MB, 1214 KB/s, 0 seconds passed
    ...38%, 0.27 MB, 1249 KB/s, 0 seconds passed
    ...39%, 0.28 MB, 1281 KB/s, 0 seconds passed
    ...40%, 0.29 MB, 1316 KB/s, 0 seconds passed
    ...41%, 0.30 MB, 1350 KB/s, 0 seconds passed
    ...42%, 0.30 MB, 1384 KB/s, 0 seconds passed
    ...43%, 0.31 MB, 1419 KB/s, 0 seconds passed
    ...44%, 0.32 MB, 1454 KB/s, 0 seconds passed
    ...45%, 0.33 MB, 1
 487 KB/s, 0 seconds passed
    ...46%, 0.34 MB, 1521 KB/s, 0 seconds passed
    ...47%, 0.34 MB, 1552 KB/s, 0 seconds passed
    ...48%, 0.35 MB, 1587 KB/s, 0 seconds passed
    ...50%, 0.36 MB, 1620 KB/s, 0 seconds passed
    ...51%, 0.37 MB, 1654 KB/s, 0 seconds passed
    ...52%, 0.38 MB, 1689 KB/s, 0 seconds passed
    ...53%, 0.38 MB, 1723 KB/s, 0 seconds passed
    ...54%, 0.39 MB, 1756 KB/s, 0 seconds passed
    ...55%, 0.40 MB, 1791 KB/s, 0 seconds passed
    ...56%, 0.41 MB, 1823 KB/s, 0 seconds passed
    ...57%, 0.41 MB, 1858 KB/s, 0 seconds passed
    ...58%, 0.42 MB, 1891 KB/s, 0 seconds passed
    ...59%, 0.43 MB, 1925 KB/s, 0 seconds passed
    ...60%, 0.44 MB, 1957 KB/s, 0 seconds passed
    ...62%, 0.45 MB, 1991 KB/s, 0 seconds passed
    ...63%, 0.45 MB, 2024 KB/s, 0 seconds passed
    ...64%, 0.46 MB, 2058 KB/s, 0 seconds passed
    ...65%, 0.47 MB, 2092 KB/s, 0 seconds passed
    ...66%, 0.48 MB, 2126 KB/s, 0 seconds passed
    ...67%, 0.48 MB, 2158 KB/s, 0 secon
 ds passed
    ...68%, 0.49 MB, 2192 KB/s, 0 seconds passed
    ...69%, 0.50 MB, 2224 KB/s, 0 seconds passed
    ...70%, 0.51 MB, 2258 KB/s, 0 seconds passed
    ...71%, 0.52 MB, 2290 KB/s, 0 seconds passed
    ...72%, 0.52 MB, 2323 KB/s, 0 seconds passed
    ...73%, 0.53 MB, 2357 KB/s, 0 seconds passed
    ...75%, 0.54 MB, 2391 KB/s, 0 seconds passed
    ...76%, 0.55 MB, 2422 KB/s, 0 seconds passed
    ...77%, 0.55 MB, 2456 KB/s, 0 seconds passed
    ...78%, 0.56 MB, 2487 KB/s, 0 seconds passed
    ...79%, 0.57 MB, 2521 KB/s, 0 seconds passed
    ...80%, 0.58 MB, 2554 KB/s, 0 seconds passed
    ...81%, 0.59 MB, 2588 KB/s, 0 seconds passed
    ...82%, 0.59 MB, 2619 KB/s, 0 seconds passed
    ...83%, 0.60 MB, 2652 KB/s, 0 seconds passed
    ...84%, 0.61 MB, 2685 KB/s, 0 seconds passed
    ...85%, 0.62 MB, 2719 KB/s, 0 seconds passed
    ...87%, 0.62 MB, 2750 KB/s, 0 seconds passed
    ...88%, 0.63 MB, 2783 KB/s, 0 seconds passed
    ...89%, 0.64 MB, 2816 KB/s, 0 seconds passed
    ...
 90%, 0.65 MB, 2850 KB/s, 0 seconds passed
    ...91%, 0.66 MB, 2882 KB/s, 0 seconds passed
    ...92%, 0.66 MB, 2915 KB/s, 0 seconds passed
    ...93%, 0.67 MB, 2948 KB/s, 0 seconds passed
    ...94%, 0.68 MB, 2981 KB/s, 0 seconds passed
    ...95%, 0.69 MB, 3014 KB/s, 0 seconds passed
    ...96%, 0.70 MB, 3046 KB/s, 0 seconds passed
    ...97%, 0.70 MB, 3080 KB/s, 0 seconds passed
    ...99%, 0.71 MB, 3110 KB/s, 0 seconds passed
    ...100%, 0.72 MB, 3141 KB/s, 0 seconds passed
+
    ...1%, 0.01 MB, 312 KB/s, 0 seconds passed
    ...2%, 0.02 MB, 578 KB/s, 0 seconds passed
    ...3%, 0.02 MB, 844 KB/s, 0 seconds passed
    ...4%, 0.03 MB, 1076 KB/s, 0 seconds passed
    ...5%, 0.04 MB, 1326 KB/s, 0 seconds passed
    ...6%, 0.05 MB, 1560 KB/s, 0 seconds passed
    ...7%, 0.05 MB, 1774 KB/s, 0 seconds passed
    ...8%, 0.06 MB, 2002 KB/s, 0 seconds passed
    ...9%, 0.07 MB, 2193 KB/s, 0 seconds passed
    ...10%, 0.08 MB, 2406 KB/s, 0 seconds passed
    ...11%, 0.09 MB, 2633 KB/s, 0 seconds passed
    ...13%, 0.09 MB, 2792 KB/s, 0 seconds passed
    ...14%, 0.10 MB, 2975 KB/s, 0 seconds passed
    ...15%, 0.11 MB, 3187 KB/s, 0 seconds passed
    ...16%, 0.12 MB, 3377 KB/s, 0 seconds passed
    ...17%, 0.12 MB, 3565 KB/s, 0 seconds passed
    ...18%, 0.13 MB, 3768 KB/s, 0 seconds passed
    ...19%, 0.14 MB, 3901 KB/s, 0 seconds passed
    ...20%, 0.15 MB, 4099 KB/s, 0 seconds passed
    ...21%, 0.16 MB, 4296 KB/s, 0 seconds passed
    ...22%, 0.16 MB, 4436 KB
 /s, 0 seconds passed
    ...23%, 0.17 MB, 4622 KB/s, 0 seconds passed
    ...25%, 0.18 MB, 4807 KB/s, 0 seconds passed
    ...26%, 0.19 MB, 4951 KB/s, 0 seconds passed
    ...27%, 0.20 MB, 5138 KB/s, 0 seconds passed
    ...28%, 0.20 MB, 5302 KB/s, 0 seconds passed
    ...29%, 0.21 MB, 5448 KB/s, 0 seconds passed
    ...30%, 0.22 MB, 5617 KB/s, 0 seconds passed
    ...31%, 0.23 MB, 5768 KB/s, 0 seconds passed
    ...32%, 0.23 MB, 5931 KB/s, 0 seconds passed
    ...33%, 0.24 MB, 6053 KB/s, 0 seconds passed
    ...34%, 0.25 MB, 6213 KB/s, 0 seconds passed
    ...35%, 0.26 MB, 6353 KB/s, 0 seconds passed
    ...36%, 0.27 MB, 6526 KB/s, 0 seconds passed
    ...38%, 0.27 MB, 6698 KB/s, 0 seconds passed
    ...39%, 0.28 MB, 6831 KB/s, 0 seconds passed
    ...40%, 0.29 MB, 6928 KB/s, 0 seconds passed
    ...41%, 0.30 MB, 7095 KB/s, 0 seconds passed
    ...42%, 0.30 MB, 7218 KB/s, 0 seconds passed
    ...43%, 0.31 MB, 7364 KB/s, 0 seconds passed
    ...44%, 0.32 MB, 7487 KB/s, 0 seconds pas
 sed
    ...45%, 0.33 MB, 7648 KB/s, 0 seconds passed
    ...46%, 0.34 MB, 7806 KB/s, 0 seconds passed
    ...47%, 0.34 MB, 7925 KB/s, 0 seconds passed
    ...48%, 0.35 MB, 8083 KB/s, 0 seconds passed
    ...50%, 0.36 MB, 8217 KB/s, 0 seconds passed
    ...51%, 0.37 MB, 8357 KB/s, 0 seconds passed
    ...52%, 0.38 MB, 8369 KB/s, 0 seconds passed
    ...53%, 0.38 MB, 8460 KB/s, 0 seconds passed
    ...54%, 0.39 MB, 8609 KB/s, 0 seconds passed
    ...55%, 0.40 MB, 8758 KB/s, 0 seconds passed
    ...56%, 0.41 MB, 8769 KB/s, 0 seconds passed
    ...57%, 0.41 MB, 8795 KB/s, 0 seconds passed
    ...58%, 0.42 MB, 8938 KB/s, 0 seconds passed
    ...59%, 0.43 MB, 9078 KB/s, 0 seconds passed
    ...60%, 0.44 MB, 9041 KB/s, 0 seconds passed
    ...62%, 0.45 MB, 9178 KB/s, 0 seconds passed
    ...63%, 0.45 MB, 9150 KB/s, 0 seconds passed
    ...64%, 0.46 MB, 9292 KB/s, 0 seconds passed
    ...65%, 0.47 MB, 9357 KB/s, 0 seconds passed
    ...66%, 0.48 MB, 9497 KB/s, 0 seconds passed
    ...67%, 0
 .48 MB, 9562 KB/s, 0 seconds passed
    ...68%, 0.49 MB, 9701 KB/s, 0 seconds passed
    ...69%, 0.50 MB, 9800 KB/s, 0 seconds passed
    ...70%, 0.51 MB, 9937 KB/s, 0 seconds passed
    ...71%, 0.52 MB, 10030 KB/s, 0 seconds passed
    ...72%, 0.52 MB, 10166 KB/s, 0 seconds passed
    ...73%, 0.53 MB, 10182 KB/s, 0 seconds passed
    ...75%, 0.54 MB, 10316 KB/s, 0 seconds passed
    ...76%, 0.55 MB, 10294 KB/s, 0 seconds passed
    ...77%, 0.55 MB, 10424 KB/s, 0 seconds passed
    ...78%, 0.56 MB, 10550 KB/s, 0 seconds passed
    ...79%, 0.57 MB, 10679 KB/s, 0 seconds passed
    ...80%, 0.58 MB, 10727 KB/s, 0 seconds passed
    ...81%, 0.59 MB, 10856 KB/s, 0 seconds passed
    ...82%, 0.59 MB, 10879 KB/s, 0 seconds passed
    ...83%, 0.60 MB, 11005 KB/s, 0 seconds passed
    ...84%, 0.61 MB, 11129 KB/s, 0 seconds passed
    ...85%, 0.62 MB, 11255 KB/s, 0 seconds passed
    ...87%, 0.62 MB, 11335 KB/s, 0 seconds passed
    ...88%, 0.63 MB, 11459 KB/s, 0 seconds passed
    ...89%, 0.
 64 MB, 11541 KB/s, 0 seconds passed
    ...90%, 0.65 MB, 11664 KB/s, 0 seconds passed
    ...91%, 0.66 MB, 11783 KB/s, 0 seconds passed
    ...92%, 0.66 MB, 11883 KB/s, 0 seconds passed
    ...93%, 0.67 MB, 12005 KB/s, 0 seconds passed
    ...94%, 0.68 MB, 12082 KB/s, 0 seconds passed
    ...95%, 0.69 MB, 12201 KB/s, 0 seconds passed
    ...96%, 0.70 MB, 12276 KB/s, 0 seconds passed
    ...97%, 0.70 MB, 12395 KB/s, 0 seconds passed
    ...99%, 0.71 MB, 12509 KB/s, 0 seconds passed
    ...100%, 0.72 MB, 12590 KB/s, 0 seconds passed
     Extracted 10 conv2d tasks:
     (1, 14, 14, 256, 512, 1, 1, 0, 0, 2, 2)
     (1, 28, 28, 128, 256, 1, 1, 0, 0, 2, 2)
diff --git a/docs/_sources/vta/tutorials/frontend/deploy_classification.rst.txt b/docs/_sources/vta/tutorials/frontend/deploy_classification.rst.txt
index f9bca79..b04e9d7 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, 97 KB/s, 0 seconds passed
    ...38%, 0.02 MB, 145 KB/s, 0 seconds passed
    ...51%, 0.03 MB, 194 KB/s, 0 seconds passed
    ...64%, 0.04 MB, 241 KB/s, 0 seconds passed
    ...77%, 0.05 MB, 289 KB/s, 0 seconds passed
    ...89%, 0.05 MB, 336 KB/s, 0 seconds passed
    ...100%, 0.06 MB, 383 KB/s, 0 seconds passed
-    resnet18_v1 inference graph built in 5.85s!
+
    ...12%, 0.01 MB, 41 KB/s, 0 seconds passed
    ...25%, 0.02 MB, 83 KB/s, 0 seconds passed
    ...38%, 0.02 MB, 124 KB/s, 0 seconds passed
    ...51%, 0.03 MB, 165 KB/s, 0 seconds passed
    ...64%, 0.04 MB, 206 KB/s, 0 seconds passed
    ...77%, 0.05 MB, 247 KB/s, 0 seconds passed
    ...89%, 0.05 MB, 287 KB/s, 0 seconds passed
    ...100%, 0.06 MB, 327 KB/s, 0 seconds passed
+    resnet18_v1 inference graph built in 7.56s!
 
 
 
diff --git a/docs/_sources/vta/tutorials/frontend/deploy_detection.rst.txt b/docs/_sources/vta/tutorials/frontend/deploy_detection.rst.txt
deleted file mode 100644
index 6182de0..0000000
--- a/docs/_sources/vta/tutorials/frontend/deploy_detection.rst.txt
+++ /dev/null
@@ -1,458 +0,0 @@
-.. note::
-    :class: sphx-glr-download-link-note
-
-    Click :ref:`here <sphx_glr_download_vta_tutorials_frontend_deploy_detection.py>` to download the full example code
-.. rst-class:: sphx-glr-example-title
-
-.. _sphx_glr_vta_tutorials_frontend_deploy_detection.py:
-
-
-Deploy Pretrained Vision Detection Model from Darknet on VTA
-============================================================
-**Author**: `Hua Jiang <https://github.com/huajsj>`_
-
-This tutorial provides an end-to-end demo, on how to run Darknet YoloV3-tiny
-inference onto the VTA accelerator design to perform Image detection tasks.
-It showcases Relay as a front end compiler that can perform quantization (VTA
-only supports int8/32 inference) as well as graph packing (in order to enable
-tensorization in the core) to massage the compute graph for the hardware target.
-
-Install dependencies
---------------------
-To use the autotvm package in tvm, we need to install some extra dependencies.
-(change "3" to "2" if you use python2):
-
-.. code-block:: bash
-
-pip3 install "Pillow<7"
-
-YOLO-V3-tiny Model with Darknet parsing have dependancy with CFFI and CV2 library,
-we need to install CFFI and CV2 before executing this script.
-
-pip3 install "Pillow<7"
-
-pip3 install cffi
-pip3 install opencv-python
-
-Now return to the python code. Import packages.
-
-
-.. code-block:: default
-
-
-    from __future__ import absolute_import, print_function
-
-    import sys
-    import os
-    import time
-    import matplotlib.pyplot as plt
-    import numpy as np
-    import tvm
-    import vta
-    from tvm import rpc, autotvm, relay
-    from tvm.relay.testing import yolo_detection, darknet
-    from tvm.relay.testing.darknet import __darknetffi__
-    from tvm.contrib import graph_runtime, graph_runtime, util
-    from tvm.contrib.download import download_testdata
-    from vta.testing import simulator
-    from vta.top import graph_pack
-    # Make sure that TVM was compiled with RPC=1
-    assert tvm.runtime.enabled("rpc")
-
-
-
-
-
-
-
-Download yolo net configure file, weight file, darknet library file based on
-Model Name
-----------------------------------------------------------------------------
-
-
-.. code-block:: default
-
-    MODEL_NAME = 'yolov3-tiny'
-    REPO_URL = 'https://github.com/dmlc/web-data/blob/master/darknet/'
-
-    cfg_path = download_testdata('https://github.com/pjreddie/darknet/blob/master/cfg/'
-                                 + MODEL_NAME + '.cfg' + '?raw=true',
-                                 MODEL_NAME + '.cfg',
-                                 module="darknet")
-    weights_path = download_testdata('https://pjreddie.com/media/files/'
-                                     + MODEL_NAME + '.weights' + '?raw=true',
-                                     MODEL_NAME + '.weights',
-                                     module="darknet")
-
-    if sys.platform in ['linux', 'linux2']:
-        darknet_lib_path = download_testdata(REPO_URL + 'lib/' + 'libdarknet2.0.so' + '?raw=true',
-                                             'libdarknet2.0.so',
-                                             module="darknet")
-    elif sys.platform == 'darwin':
-        darknet_lib_path = download_testdata(REPO_URL+'lib_osx/'+'libdarknet_mac2.0.so'+'?raw=true',
-                                             'libdarknet_mac2.0.so',
-                                             module="darknet")
-    else:
-        raise NotImplementedError("Darknet lib is not supported on {} platform"
-                                  .format(sys.platform))
-
-
-
-
-
-.. rst-class:: sphx-glr-script-out
-
- Out:
-
- .. code-block:: none
-
-    File /workspace/.tvm_test_data/darknet/yolov3-tiny.cfg exists, skip.
-    File /workspace/.tvm_test_data/darknet/yolov3-tiny.weights exists, skip.
-    File /workspace/.tvm_test_data/darknet/libdarknet2.0.so exists, skip.
-
-
-
-Download yolo categories and illustration front.
-------------------------------------------------
-
-
-.. code-block:: default
-
-    coco_path = download_testdata(REPO_URL + 'data/' + 'coco.names' + '?raw=true',
-                                  'coco.names',
-                                  module='data')
-    font_path = download_testdata(REPO_URL + 'data/' + 'arial.ttf' + '?raw=true',
-                                  'arial.ttf',
-                                  module='data')
-    with open(coco_path) as f:
-        content = f.readlines()
-    names = [x.strip() for x in content]
-
-
-
-
-
-.. rst-class:: sphx-glr-script-out
-
- Out:
-
- .. code-block:: none
-
-    File /workspace/.tvm_test_data/data/coco.names exists, skip.
-    File /workspace/.tvm_test_data/data/arial.ttf exists, skip.
-
-
-
-Define the platform and model targets.
---------------------------------------
-Execute on CPU vs. VTA, and define the model.
-
-
-.. code-block:: default
-
-
-    # Load VTA parameters from the 3rdparty/vta-hw/config/vta_config.json file
-    env = vta.get_env()
-    # Set ``device=arm_cpu`` to run inference on the CPU
-    # or ``device=vta`` to run inference on the FPGA.
-    device = "vta"
-    target = env.target if device == "vta" else env.target_vta_cpu
-
-    pack_dict = {
-        "yolov3-tiny": ["nn.max_pool2d", "cast", 4, 185],
-    }
-
-    # Name of Darknet model to compile
-    # The ``start_pack`` and ``stop_pack`` labels indicate where
-    # to start and end the graph packing relay pass: in other words
-    # where to start and finish offloading to VTA.
-    # the number 4 indicate the the ``start_pack`` index is 4, the
-    # number 185 indicate the ``stop_pack index`` is 185, by using
-    # name and index number, here we can located to correct place
-    # where to start/end when there are multiple ``nn.max_pool2d``
-    # or ``cast``, print(mod.astext(show_meta_data=False)) can help
-    # to find operator name and index information.
-    assert MODEL_NAME in pack_dict
-
-
-
-
-
-
-
-Obtain an execution remote.
----------------------------
-When target is 'pynq' or other FPGA backend, reconfigure FPGA and runtime.
-Otherwise, if target is 'sim', execute locally.
-
-
-.. code-block:: default
-
-
-    if env.TARGET not in ["sim", "tsim"]:
-        # Get remote from tracker node if environment variable is set.
-        # To set up the tracker, you'll need to follow the "Auto-tuning
-        # a convolutional network for VTA" tutorial.
-        tracker_host = os.environ.get("TVM_TRACKER_HOST", None)
-        tracker_port = os.environ.get("TVM_TRACKER_PORT", None)
-        # Otherwise if you have a device you want to program directly from
-        # the host, make sure you've set the variables below to the IP of
-        # your board.
-        device_host = os.environ.get("VTA_RPC_HOST", "192.168.2.99")
-        device_port = os.environ.get("VTA_RPC_PORT", "9091")
-        if not tracker_host or not tracker_port:
-            remote = rpc.connect(device_host, int(device_port))
-        else:
-            remote = autotvm.measure.request_remote(env.TARGET,
-                                                    tracker_host,
-                                                    int(tracker_port),
-                                                    timeout=10000)
-        # Reconfigure the JIT runtime and FPGA.
-        # You can program the FPGA with your own custom bitstream
-        # by passing the path to the bitstream file instead of None.
-        reconfig_start = time.time()
-        vta.reconfig_runtime(remote)
-        vta.program_fpga(remote, bitstream=None)
-        reconfig_time = time.time() - reconfig_start
-        print("Reconfigured FPGA and RPC runtime in {0:.2f}s!".format(reconfig_time))
-
-    # In simulation mode, host the RPC server locally.
-    else:
-        remote = rpc.LocalSession()
-
-    # Get execution context from remote
-    ctx = remote.ext_dev(0) if device == "vta" else remote.cpu(0)
-
-
-
-
-
-
-
-Build the inference graph runtime.
-----------------------------------
-Using Darknet library load downloaded vision model and compile with Relay.
-The compilation steps are:
-
-1. Front end translation from Darknet into Relay module.
-2. Apply 8-bit quantization: here we skip the first conv layer,
-   and dense layer which will both be executed in fp32 on the CPU.
-3. Perform graph packing to alter the data layout for tensorization.
-4. Perform constant folding to reduce number of operators (e.g. eliminate batch norm multiply).
-5. Perform relay build to object file.
-6. Load the object file onto remote (FPGA device).
-7. Generate graph runtime, `m`.
-
-
-
-.. code-block:: default
-
-
-    # Load pre-configured AutoTVM schedules
-    with autotvm.tophub.context(target):
-        net = __darknetffi__.dlopen(darknet_lib_path).load_network(cfg_path.encode('utf-8'),
-                                                                   weights_path.encode('utf-8'),
-                                                                   0)
-        dshape = (env.BATCH, net.c, net.h, net.w)
-        dtype = 'float32'
-
-        # Measure build start time
-        build_start = time.time()
-
-        # Start front end compilation
-        mod, params = relay.frontend.from_darknet(net, dtype=dtype, shape=dshape)
-
-        if target.device_name == "vta":
-        # Perform quantization in Relay
-        # Note: We set opt_level to 3 in order to fold batch norm
-            with tvm.transform.PassContext(opt_level=3):
-                with relay.quantize.qconfig(global_scale=33.0,
-                                            skip_conv_layers=[0],
-                                            store_lowbit_output=True,
-                                            round_for_shift=True):
-                    mod = relay.quantize.quantize(mod, params=params)
-                # Perform graph packing and constant folding for VTA target
-                mod = graph_pack(
-                    mod["main"],
-                    env.BATCH,
-                    env.BLOCK_OUT,
-                    env.WGT_WIDTH,
-                    start_name=pack_dict[MODEL_NAME][0],
-                    stop_name=pack_dict[MODEL_NAME][1],
-                    start_name_idx=pack_dict[MODEL_NAME][2],
-                    stop_name_idx=pack_dict[MODEL_NAME][3])
-        else:
-            mod = mod["main"]
-
-        # Compile Relay program with AlterOpLayout disabled
-        with vta.build_config(disabled_pass={"AlterOpLayout"}):
-            graph, lib, params = relay.build(
-                mod,
-                target=target,
-                params=params,
-                target_host=env.target_host)
-
-        # Measure Relay build time
-        build_time = time.time() - build_start
-        print(MODEL_NAME + " inference graph built in {0:.2f}s!".format(build_time))
-
-        # Send the inference library over to the remote RPC server
-        temp = util.tempdir()
-        lib.save(temp.relpath("graphlib.o"))
-        remote.upload(temp.relpath("graphlib.o"))
-        lib = remote.load_module("graphlib.o")
-
-        # Graph runtime
-        m = graph_runtime.create(graph, lib, ctx)
-
-
-
-
-
-.. rst-class:: sphx-glr-script-out
-
- Out:
-
- .. code-block:: none
-
-    yolov3-tiny inference graph built in 7.33s!
-
-
-
-Perform image detection inference.
-----------------------------------
-We run detect on an downloaded image
-Download test image
-
-
-.. code-block:: default
-
-    [neth, netw] = dshape[2:]
-    test_image = 'person.jpg'
-    img_url = REPO_URL + 'data/' + test_image + '?raw=true'
-    img_path = download_testdata(img_url, test_image, "data")
-    data = darknet.load_image(img_path, neth, netw).transpose(1, 2, 0)
-
-    # Prepare test image for inference
-    plt.imshow(data)
-    plt.show()
-    data = data.transpose((2, 0, 1))
-    data = data[np.newaxis, :]
-    data = np.repeat(data, env.BATCH, axis=0)
-
-    # Set the network parameters and inputs
-    m.set_input('data', data)
-    m.set_input(**params)
-
-    # Perform inference and gather execution statistics
-    # More on: :py:method:`tvm.runtime.Module.time_evaluator`
-    num = 4 # number of times we run module for a single measurement
-    rep = 3 # number of measurements (we derive std dev from this)
-    timer = m.module.time_evaluator("run", ctx, number=num, repeat=rep)
-
-    if env.TARGET in ["sim", "tsim"]:
-        simulator.clear_stats()
-        timer()
-        sim_stats = simulator.stats()
-        print("\nExecution statistics:")
-        for k, v in sim_stats.items():
-            # Since we execute the workload many times, we need to normalize stats
-            # Note that there is always one warm up run
-            # Therefore we divide the overall stats by (num * rep + 1)
-            print("\t{:<16}: {:>16}".format(k, v // (num * rep + 1)))
-    else:
-        tcost = timer()
-        std = np.std(tcost.results) * 1000
-        mean = tcost.mean * 1000
-        print("\nPerformed inference in %.2fms (std = %.2f) for %d samples" % (mean, std, env.BATCH))
-        print("Average per sample inference time: %.2fms" % (mean/env.BATCH))
-
-    # Get detection results from out
-    thresh = 0.5
-    nms_thresh = 0.45
-    tvm_out = []
-    for i in range(2):
-        layer_out = {}
-        layer_out['type'] = 'Yolo'
-        # Get the yolo layer attributes (n, out_c, out_h, out_w, classes, total)
-        layer_attr = m.get_output(i*4+3).asnumpy()
-        layer_out['biases'] = m.get_output(i*4+2).asnumpy()
-        layer_out['mask'] = m.get_output(i*4+1).asnumpy()
-        out_shape = (layer_attr[0], layer_attr[1]//layer_attr[0],
-                     layer_attr[2], layer_attr[3])
-        layer_out['output'] = m.get_output(i*4).asnumpy().reshape(out_shape)
-        layer_out['classes'] = layer_attr[4]
-        tvm_out.append(layer_out)
-        thresh = 0.560
-
-    # Show detection results
-    img = darknet.load_image_color(img_path)
-    _, im_h, im_w = img.shape
-    dets = yolo_detection.fill_network_boxes((netw, neth),
-                                             (im_w, im_h),
-                                             thresh,
-                                             1,
-                                             tvm_out)
-    last_layer = net.layers[net.n - 1]
-    yolo_detection.do_nms_sort(dets, last_layer.classes, nms_thresh)
-    yolo_detection.draw_detections(font_path,
-                                   img,
-                                   dets,
-                                   thresh,
-                                   names,
-                                   last_layer.classes)
-    plt.imshow(img.transpose(1, 2, 0))
-    plt.show()
-
-
-
-.. image:: /vta/tutorials/frontend/images/sphx_glr_deploy_detection_001.png
-    :class: sphx-glr-single-img
-
-
-.. rst-class:: sphx-glr-script-out
-
- Out:
-
- .. code-block:: none
-
-    File /workspace/.tvm_test_data/data/person.jpg exists, skip.
-
-    Execution statistics:
-            inp_load_nbytes :         25462784
-            wgt_load_nbytes :         17558016
-            acc_load_nbytes :            96128
-            uop_load_nbytes :             5120
-            out_store_nbytes:          3396224
-            gemm_counter    :         10578048
-            alu_counter     :          1061320
-
-
-
-
-.. _sphx_glr_download_vta_tutorials_frontend_deploy_detection.py:
-
-
-.. only :: html
-
- .. container:: sphx-glr-footer
-    :class: sphx-glr-footer-example
-
-
-
-  .. container:: sphx-glr-download
-
-     :download:`Download Python source code: deploy_detection.py <deploy_detection.py>`
-
-
-
-  .. container:: sphx-glr-download
-
-     :download:`Download Jupyter notebook: deploy_detection.ipynb <deploy_detection.ipynb>`
-
-
-.. only:: html
-
- .. rst-class:: sphx-glr-signature
-
-    `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_
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 146e921..c075bc0 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,6 @@
 
 Computation times
 =================
-**00:55.845** total execution time for **vta_tutorials_frontend** files:
+**00:26.123** total execution time for **vta_tutorials_frontend** files:
 
-- **00:33.300**: :ref:`sphx_glr_vta_tutorials_frontend_deploy_detection.py` (``deploy_detection.py``)
-- **00:22.545**: :ref:`sphx_glr_vta_tutorials_frontend_deploy_classification.py` (``deploy_classification.py``)
+- **00:26.123**: :ref:`sphx_glr_vta_tutorials_frontend_deploy_classification.py` (``deploy_classification.py``)
diff --git a/docs/_sources/vta/tutorials/index.rst.txt b/docs/_sources/vta/tutorials/index.rst.txt
index 40ea474..20f07c1 100644
--- a/docs/_sources/vta/tutorials/index.rst.txt
+++ b/docs/_sources/vta/tutorials/index.rst.txt
@@ -83,26 +83,6 @@ Compile Deep Learning Models
    :hidden:
 
    /vta/tutorials/frontend/deploy_classification
-
-.. raw:: html
-
-    <div class="sphx-glr-thumbcontainer" tooltip="This tutorial provides an end-to-end demo, on how to run Darknet YoloV3-tiny inference onto the...">
-
-.. only:: html
-
-    .. figure:: /vta/tutorials/frontend/images/thumb/sphx_glr_deploy_detection_thumb.png
-
-        :ref:`sphx_glr_vta_tutorials_frontend_deploy_detection.py`
-
-.. raw:: html
-
-    </div>
-
-
-.. toctree::
-   :hidden:
-
-   /vta/tutorials/frontend/deploy_detection
 .. raw:: html
 
     <div style='clear:both'></div>
diff --git a/docs/_sources/vta/tutorials/matrix_multiply.rst.txt b/docs/_sources/vta/tutorials/matrix_multiply.rst.txt
index 565e62e..17ddbdf 100644
--- a/docs/_sources/vta/tutorials/matrix_multiply.rst.txt
+++ b/docs/_sources/vta/tutorials/matrix_multiply.rst.txt
@@ -304,15 +304,15 @@ After we construct the schedule, by default the schedule computes
 
     primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {B: Buffer(B_2: handle, int8, [16, 16, 16, 16], []),
-                 C: Buffer(C_2: handle, int8, [1, 16, 1, 16], []),
-                 A: Buffer(A_2: handle, int8, [1, 16, 1, 16], [])}
+      buffers = {C: Buffer(C_2: Pointer(int8), int8, [1, 16, 1, 16], []),
+                 B: Buffer(B_2: Pointer(int8), int8, [16, 16, 16, 16], []),
+                 A: Buffer(A_2: Pointer(int8), int8, [1, 16, 1, 16], [])}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
-      attr [A_buf: handle] "storage_scope" = "global";
+      attr [A_buf: Pointer(int8)] "storage_scope" = "global";
       allocate(A_buf, int8, [256]);
-      attr [B_buf: handle] "storage_scope" = "global";
+      attr [B_buf: Pointer(int8)] "storage_scope" = "global";
       allocate(B_buf, int8, [65536]);
-      attr [C_buf: handle] "storage_scope" = "global";
+      attr [C_buf: Pointer(int32)] "storage_scope" = "global";
       allocate(C_buf, int32, [256]) {
         for (i1: int32, 0, 16) {
           for (i3: int32, 0, 16) {
@@ -346,7 +346,7 @@ After we construct the schedule, by default the schedule computes
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -450,15 +450,15 @@ moving the copy operations into the matrix multiplication loop.
 
     primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {C: Buffer(C_2: handle, int8, [1, 16, 1, 16], []),
-                 B: Buffer(B_2: handle, int8, [16, 16, 16, 16], []),
-                 A: Buffer(A_2: handle, int8, [1, 16, 1, 16], [])}
+      buffers = {C: Buffer(C_2: Pointer(int8), int8, [1, 16, 1, 16], []),
+                 B: Buffer(B_2: Pointer(int8), int8, [16, 16, 16, 16], []),
+                 A: Buffer(A_2: Pointer(int8), int8, [1, 16, 1, 16], [])}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
-      attr [C_buf: handle] "storage_scope" = "local.acc_buffer";
+      attr [C_buf: Pointer(int32)] "storage_scope" = "local.acc_buffer";
       allocate(C_buf, int32, [256]);
-      attr [A_buf: handle] "storage_scope" = "local.inp_buffer";
+      attr [A_buf: Pointer(int8)] "storage_scope" = "local.inp_buffer";
       allocate(A_buf, int8, [16]);
-      attr [B_buf: handle] "storage_scope" = "local.wgt_buffer";
+      attr [B_buf: Pointer(int8)] "storage_scope" = "local.wgt_buffer";
       allocate(B_buf, int8, [16]) {
         for (co: int32, 0, 16) {
           for (ci: int32, 0, 16) {
@@ -487,7 +487,7 @@ moving the copy operations into the matrix multiplication loop.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -539,13 +539,13 @@ by the VTA runtime JIT compiler.
 
     primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {C: Buffer(C_2: handle, int8, [1, 16, 1, 16], []),
-                 B: Buffer(B_2: handle, int8, [16, 16, 16, 16], []),
-                 A: Buffer(A_2: handle, int8, [1, 16, 1, 16], [])}
+      buffers = {C: Buffer(C_2: Pointer(int8), int8, [1, 16, 1, 16], []),
+                 B: Buffer(B_2: Pointer(int8), int8, [16, 16, 16, 16], []),
+                 A: Buffer(A_2: Pointer(int8), int8, [1, 16, 1, 16], [])}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
-      attr [C_buf: handle] "storage_scope" = "local.acc_buffer";
-      attr [A_buf: handle] "storage_scope" = "local.inp_buffer";
-      attr [B_buf: handle] "storage_scope" = "local.wgt_buffer" {
+      attr [C_buf: Pointer(int32)] "storage_scope" = "local.acc_buffer";
+      attr [A_buf: Pointer(int8)] "storage_scope" = "local.inp_buffer";
+      attr [B_buf: Pointer(int8)] "storage_scope" = "local.wgt_buffer" {
         attr [IterVar(vta: int32, (nullptr), "ThreadIndex", "vta")] "coproc_scope" = 2 {
           attr [IterVar(vta, (nullptr), "ThreadIndex", "vta")] "coproc_uop_scope" = "VTAPushGEMMOp" {
             @tir.call_extern("VTAUopLoopBegin", 16, 1, 0, 0, dtype=int32)
@@ -581,7 +581,7 @@ by the VTA runtime JIT compiler.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
diff --git a/docs/_sources/vta/tutorials/optimize/convolution_opt.rst.txt b/docs/_sources/vta/tutorials/optimize/convolution_opt.rst.txt
index 0338842..e5ea46d 100644
--- a/docs/_sources/vta/tutorials/optimize/convolution_opt.rst.txt
+++ b/docs/_sources/vta/tutorials/optimize/convolution_opt.rst.txt
@@ -257,15 +257,15 @@ Those include:
 
     primfn(data_1: handle, kernel_1: handle, res_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {res: Buffer(res_2: handle, int8, [1, 16, 14, 14, 1, 16], []),
-                 kernel: Buffer(kernel_2: handle, int8, [16, 16, 3, 3, 16, 16], []),
-                 data: Buffer(data_2: handle, int8, [1, 16, 14, 14, 1, 16], [])}
+      buffers = {kernel: Buffer(kernel_2: Pointer(int8), int8, [16, 16, 3, 3, 16, 16], []),
+                 res: Buffer(res_2: Pointer(int8), int8, [1, 16, 14, 14, 1, 16], []),
+                 data: Buffer(data_2: Pointer(int8), int8, [1, 16, 14, 14, 1, 16], [])}
       buffer_map = {data_1: data, kernel_1: kernel, res_1: res} {
-      attr [data_buf: handle] "storage_scope" = "global";
+      attr [data_buf: Pointer(int8)] "storage_scope" = "global";
       allocate(data_buf, int8, [65536]);
-      attr [kernel_buf: handle] "storage_scope" = "global";
+      attr [kernel_buf: Pointer(int8)] "storage_scope" = "global";
       allocate(kernel_buf, int8, [589824]);
-      attr [res_conv: handle] "storage_scope" = "global";
+      attr [res_conv: Pointer(int32)] "storage_scope" = "global";
       allocate(res_conv, int32, [50176]) {
         for (i1: int32, 0, 16) {
           for (i2: int32, 0, 16) {
@@ -346,7 +346,7 @@ Those include:
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -453,15 +453,15 @@ below.
 
     primfn(data_1: handle, kernel_1: handle, res_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {res: Buffer(res_2: handle, int8, [1, 16, 14, 14, 1, 16], []),
-                 kernel: Buffer(kernel_2: handle, int8, [16, 16, 3, 3, 16, 16], []),
-                 data: Buffer(data_2: handle, int8, [1, 16, 14, 14, 1, 16], [])}
+      buffers = {res: Buffer(res_2: Pointer(int8), int8, [1, 16, 14, 14, 1, 16], []),
+                 kernel: Buffer(kernel_2: Pointer(int8), int8, [16, 16, 3, 3, 16, 16], []),
+                 data: Buffer(data_2: Pointer(int8), int8, [1, 16, 14, 14, 1, 16], [])}
       buffer_map = {data_1: data, kernel_1: kernel, res_1: res} {
-      attr [data_buf: handle] "storage_scope" = "global";
+      attr [data_buf: Pointer(int8)] "storage_scope" = "global";
       allocate(data_buf, int8, [65536]);
-      attr [kernel_buf: handle] "storage_scope" = "global";
+      attr [kernel_buf: Pointer(int8)] "storage_scope" = "global";
       allocate(kernel_buf, int8, [589824]);
-      attr [res_conv: handle] "storage_scope" = "global";
+      attr [res_conv: Pointer(int32)] "storage_scope" = "global";
       allocate(res_conv, int32, [25088]) {
         for (i1: int32, 0, 16) {
           for (i2: int32, 0, 16) {
@@ -558,7 +558,7 @@ below.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -636,13 +636,13 @@ and mapping the shift, and clipping computation to the vector ALU.
 
     primfn(data_1: handle, kernel_1: handle, res_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {kernel: Buffer(kernel_2: handle, int8, [16, 16, 3, 3, 16, 16], []),
-                 res: Buffer(res_2: handle, int8, [1, 16, 14, 14, 1, 16], []),
-                 data: Buffer(data_2: handle, int8, [1, 16, 14, 14, 1, 16], [])}
+      buffers = {res: Buffer(res_2: Pointer(int8), int8, [1, 16, 14, 14, 1, 16], []),
+                 kernel: Buffer(kernel_2: Pointer(int8), int8, [16, 16, 3, 3, 16, 16], []),
+                 data: Buffer(data_2: Pointer(int8), int8, [1, 16, 14, 14, 1, 16], [])}
       buffer_map = {data_1: data, kernel_1: kernel, res_1: res} {
-      attr [res_conv: handle] "storage_scope" = "local.acc_buffer";
-      attr [data_buf: handle] "storage_scope" = "local.inp_buffer";
-      attr [kernel_buf: handle] "storage_scope" = "local.wgt_buffer" {
+      attr [res_conv: Pointer(int32)] "storage_scope" = "local.acc_buffer";
+      attr [data_buf: Pointer(int8)] "storage_scope" = "local.inp_buffer";
+      attr [kernel_buf: Pointer(int8)] "storage_scope" = "local.wgt_buffer" {
         @tir.vta.coproc_dep_push(3, 2, dtype=int32)
         @tir.vta.coproc_dep_push(3, 2, dtype=int32)
         for (i2.outer: int32, 0, 2) {
@@ -736,7 +736,7 @@ and mapping the shift, and clipping computation to the vector ALU.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
diff --git a/docs/_sources/vta/tutorials/optimize/matrix_multiply_opt.rst.txt b/docs/_sources/vta/tutorials/optimize/matrix_multiply_opt.rst.txt
index f114ffc..9d094d9 100644
--- a/docs/_sources/vta/tutorials/optimize/matrix_multiply_opt.rst.txt
+++ b/docs/_sources/vta/tutorials/optimize/matrix_multiply_opt.rst.txt
@@ -202,15 +202,15 @@ Those include:
 
     primfn(data_1: handle, weight_1: handle, res_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {weight: Buffer(weight_2: handle, int8, [64, 64, 16, 16], []),
-                 res: Buffer(res_2: handle, int8, [1, 64, 1, 16], []),
-                 data: Buffer(data_2: handle, int8, [1, 64, 1, 16], [])}
+      buffers = {res: Buffer(res_2: Pointer(int8), int8, [1, 64, 1, 16], []),
+                 weight: Buffer(weight_2: Pointer(int8), int8, [64, 64, 16, 16], []),
+                 data: Buffer(data_2: Pointer(int8), int8, [1, 64, 1, 16], [])}
       buffer_map = {data_1: data, weight_1: weight, res_1: res} {
-      attr [data_buf: handle] "storage_scope" = "global";
+      attr [data_buf: Pointer(int8)] "storage_scope" = "global";
       allocate(data_buf, int8, [1024]);
-      attr [weight_buf: handle] "storage_scope" = "global";
+      attr [weight_buf: Pointer(int8)] "storage_scope" = "global";
       allocate(weight_buf, int8, [1048576]);
-      attr [res_gem: handle] "storage_scope" = "global";
+      attr [res_gem: Pointer(int32)] "storage_scope" = "global";
       allocate(res_gem, int32, [1024]) {
         for (i1: int32, 0, 64) {
           for (i3: int32, 0, 16) {
@@ -259,7 +259,7 @@ Those include:
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -364,15 +364,15 @@ below:
 
     primfn(data_1: handle, weight_1: handle, res_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {res: Buffer(res_2: handle, int8, [1, 64, 1, 16], []),
-                 weight: Buffer(weight_2: handle, int8, [64, 64, 16, 16], []),
-                 data: Buffer(data_2: handle, int8, [1, 64, 1, 16], [])}
+      buffers = {weight: Buffer(weight_2: Pointer(int8), int8, [64, 64, 16, 16], []),
+                 res: Buffer(res_2: Pointer(int8), int8, [1, 64, 1, 16], []),
+                 data: Buffer(data_2: Pointer(int8), int8, [1, 64, 1, 16], [])}
       buffer_map = {data_1: data, weight_1: weight, res_1: res} {
-      attr [data_buf: handle] "storage_scope" = "global";
+      attr [data_buf: Pointer(int8)] "storage_scope" = "global";
       allocate(data_buf, int8, [1024]);
-      attr [weight_buf: handle] "storage_scope" = "global";
+      attr [weight_buf: Pointer(int8)] "storage_scope" = "global";
       allocate(weight_buf, int8, [1048576]);
-      attr [res_gem: handle] "storage_scope" = "global";
+      attr [res_gem: Pointer(int32)] "storage_scope" = "global";
       allocate(res_gem, int32, [256]) {
         for (i1: int32, 0, 64) {
           for (i3: int32, 0, 16) {
@@ -429,7 +429,7 @@ below:
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -507,13 +507,13 @@ and mapping the shift, and clipping computation to the vector ALU.
 
     primfn(data_1: handle, weight_1: handle, res_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {res: Buffer(res_2: handle, int8, [1, 64, 1, 16], []),
-                 weight: Buffer(weight_2: handle, int8, [64, 64, 16, 16], []),
-                 data: Buffer(data_2: handle, int8, [1, 64, 1, 16], [])}
+      buffers = {res: Buffer(res_2: Pointer(int8), int8, [1, 64, 1, 16], []),
+                 weight: Buffer(weight_2: Pointer(int8), int8, [64, 64, 16, 16], []),
+                 data: Buffer(data_2: Pointer(int8), int8, [1, 64, 1, 16], [])}
       buffer_map = {data_1: data, weight_1: weight, res_1: res} {
-      attr [res_gem: handle] "storage_scope" = "local.acc_buffer";
-      attr [data_buf: handle] "storage_scope" = "local.inp_buffer";
-      attr [weight_buf: handle] "storage_scope" = "local.wgt_buffer" {
+      attr [res_gem: Pointer(int32)] "storage_scope" = "local.acc_buffer";
+      attr [data_buf: Pointer(int8)] "storage_scope" = "local.inp_buffer";
+      attr [weight_buf: Pointer(int8)] "storage_scope" = "local.wgt_buffer" {
         @tir.vta.coproc_dep_push(3, 2, dtype=int32)
         for (i1.outer: int32, 0, 4) {
           attr [IterVar(vta: int32, (nullptr), "ThreadIndex", "vta")] "coproc_scope" = 2 {
@@ -576,7 +576,7 @@ and mapping the shift, and clipping computation to the vector ALU.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
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 6369639..89def49 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:02.955** total execution time for **vta_tutorials_optimize** files:
+**00:03.190** total execution time for **vta_tutorials_optimize** files:
 
-- **00:02.576**: :ref:`sphx_glr_vta_tutorials_optimize_convolution_opt.py` (``convolution_opt.py``)
-- **00:00.379**: :ref:`sphx_glr_vta_tutorials_optimize_matrix_multiply_opt.py` (``matrix_multiply_opt.py``)
+- **00:02.764**: :ref:`sphx_glr_vta_tutorials_optimize_convolution_opt.py` (``convolution_opt.py``)
+- **00:00.426**: :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 863714c..16eaf68 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.792** total execution time for **vta_tutorials** files:
 
-- **00:00.355**: :ref:`sphx_glr_vta_tutorials_vta_get_started.py` (``vta_get_started.py``)
-- **00:00.341**: :ref:`sphx_glr_vta_tutorials_matrix_multiply.py` (``matrix_multiply.py``)
+- **00:00.406**: :ref:`sphx_glr_vta_tutorials_vta_get_started.py` (``vta_get_started.py``)
+- **00:00.386**: :ref:`sphx_glr_vta_tutorials_matrix_multiply.py` (``matrix_multiply.py``)
diff --git a/docs/_sources/vta/tutorials/vta_get_started.rst.txt b/docs/_sources/vta/tutorials/vta_get_started.rst.txt
index bc383dd..dc98318 100644
--- a/docs/_sources/vta/tutorials/vta_get_started.rst.txt
+++ b/docs/_sources/vta/tutorials/vta_get_started.rst.txt
@@ -300,13 +300,13 @@ After we construct the schedule, by default the schedule computes
 
     primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {C: Buffer(C_2: handle, int8, [1, 64, 1, 16], []),
-                 B: Buffer(B_2: handle, int32, [1, 64, 1, 16], []),
-                 A: Buffer(A_2: handle, int32, [1, 64, 1, 16], [])}
+      buffers = {C: Buffer(C_2: Pointer(int8), int8, [1, 64, 1, 16], []),
+                 B: Buffer(B_2: Pointer(int32), int32, [1, 64, 1, 16], []),
+                 A: Buffer(A_2: Pointer(int32), int32, [1, 64, 1, 16], [])}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
-      attr [A_buf: handle] "storage_scope" = "global";
+      attr [A_buf: Pointer(int32)] "storage_scope" = "global";
       allocate(A_buf, int32, [1024]);
-      attr [B_buf: handle] "storage_scope" = "global";
+      attr [B_buf: Pointer(int32)] "storage_scope" = "global";
       allocate(B_buf, int32, [1024]) {
         for (i1: int32, 0, 64) {
           for (i3: int32, 0, 16) {
@@ -331,7 +331,7 @@ After we construct the schedule, by default the schedule computes
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
@@ -423,11 +423,11 @@ with an :code:`env.alu` pragma.
 
     primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"global_symbol": "main", "tir.noalias": True}
-      buffers = {B: Buffer(B_2: handle, int32, [1, 64, 1, 16], []),
-                 C: Buffer(C_2: handle, int8, [1, 64, 1, 16], []),
-                 A: Buffer(A_2: handle, int32, [1, 64, 1, 16], [])}
+      buffers = {B: Buffer(B_2: Pointer(int32), int32, [1, 64, 1, 16], []),
+                 C: Buffer(C_2: Pointer(int8), int8, [1, 64, 1, 16], []),
+                 A: Buffer(A_2: Pointer(int32), int32, [1, 64, 1, 16], [])}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
-      attr [A_buf: handle] "storage_scope" = "local.acc_buffer" {
+      attr [A_buf: Pointer(int32)] "storage_scope" = "local.acc_buffer" {
         attr [IterVar(vta: int32, (nullptr), "ThreadIndex", "vta")] "coproc_scope" = 2 {
           @tir.call_extern("VTALoadBuffer2D", @tir.tvm_thread_context(@tir.vta.command_handle(, dtype=handle), dtype=handle), A_2, 0, 64, 1, 64, 0, 0, 0, 0, 0, 3, dtype=int32)
           @tir.call_extern("VTALoadBuffer2D", @tir.tvm_thread_context(@tir.vta.command_handle(, dtype=handle), dtype=handle), B_2, 0, 64, 1, 64, 0, 0, 0, 0, 64, 3, dtype=int32)
@@ -446,7 +446,7 @@ with an :code:`env.alu` pragma.
       }
     }
 
-    // meta data omitted. you can use show_meta_data=True to include meta data
+
 
 
 
diff --git a/docs/api/doxygen/algorithm_8h.html b/docs/api/doxygen/algorithm_8h.html
index c5c2419..5ae7f0e 100644
--- a/docs/api/doxygen/algorithm_8h.html
+++ b/docs/api/doxygen/algorithm_8h.html
@@ -99,7 +99,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </div><div class="textblock"><div class="dynheader">
 Include dependency graph for algorithm.h:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="algorithm_8h__incl.svg" width="4992" height="1515"><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="algorithm_8h__incl.svg" width="4878" height="1440"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 </div>
diff --git a/docs/api/doxygen/algorithm_8h__incl.svg b/docs/api/doxygen/algorithm_8h__incl.svg
index 83018f9..61da6d0 100644
--- a/docs/api/doxygen/algorithm_8h__incl.svg
+++ b/docs/api/doxygen/algorithm_8h__incl.svg
@@ -4,1468 +4,1468 @@
 <!-- Generated by graphviz version 2.38.0 (20140413.2041)
  -->
 <!-- Title: include/tvm/relay/attrs/algorithm.h Pages: 1 -->
-<svg width="3744pt" height="1136pt"
- viewBox="0.00 0.00 3744.00 1136.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 1132)">
+<svg width="3658pt" height="1080pt"
+ viewBox="0.00 0.00 3658.00 1080.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 1076)">
 <title>include/tvm/relay/attrs/algorithm.h</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-1132 3740,-1132 3740,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-1076 3654,-1076 3654,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node"><title>Node1</title>
-<polygon fill="#bfbfbf" stroke="black" points="269,-1097.5 269,-1127.5 393,-1127.5 393,-1097.5 269,-1097.5"/>
-<text text-anchor="start" x="277" y="-1115.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relay/attrs</text>
-<text text-anchor="middle" x="331" y="-1104.5" font-family="Helvetica,sans-Serif" font-size="10.00">/algorithm.h</text>
+<polygon fill="#bfbfbf" stroke="black" points="2458,-1041.5 2458,-1071.5 2582,-1071.5 2582,-1041.5 2458,-1041.5"/>
+<text text-anchor="start" x="2466" y="-1059.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relay/attrs</text>
+<text text-anchor="middle" x="2520" y="-1048.5" font-family="Helvetica,sans-Serif" font-size="10.00">/algorithm.h</text>
 </g>
 <!-- Node2 -->
 <g id="node2" class="node"><title>Node2</title>
 <g id="a_node2"><a xlink:href="ir_2attrs_8h.html" target="_top" xlink:title="Helpers for attribute objects. ">
-<polygon fill="white" stroke="black" points="996.5,-761.5 996.5,-780.5 1075.5,-780.5 1075.5,-761.5 996.5,-761.5"/>
-<text text-anchor="middle" x="1036" y="-768.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/attrs.h</text>
+<polygon fill="white" stroke="black" points="1830.5,-705.5 1830.5,-724.5 1909.5,-724.5 1909.5,-705.5 1830.5,-705.5"/>
+<text text-anchor="middle" x="1870" y="-712.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/attrs.h</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node2 -->
 <g id="edge1" class="edge"><title>Node1&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M329.406,-1097.46C326.437,-1064.41 323.559,-980.639 363,-929 439.464,-828.888 843.331,-787.376 986.017,-775.689"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="986.542,-779.158 996.229,-774.867 985.98,-772.181 986.542,-779.158"/>
+<path fill="none" stroke="midnightblue" d="M2457.73,-1051.57C2288.37,-1040.04 1832,-1003.13 1832,-940 1832,-940 1832,-940 1832,-826 1832,-791.813 1848.6,-754.764 1859.86,-733.571"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1862.95,-735.215 1864.72,-724.769 1856.82,-731.832 1862.95,-735.215"/>
 </g>
 <!-- Node13 -->
 <g id="node13" class="node"><title>Node13</title>
-<polygon fill="white" stroke="#bfbfbf" points="586,-6 586,-25 630,-25 630,-6 586,-6"/>
-<text text-anchor="middle" x="608" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00">string</text>
+<polygon fill="white" stroke="#bfbfbf" points="2922,-6 2922,-25 2966,-25 2966,-6 2922,-6"/>
+<text text-anchor="middle" x="2944" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00">string</text>
 </g>
 <!-- Node1&#45;&gt;Node13 -->
 <g id="edge220" class="edge"><title>Node1&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M268.741,-1102.77C172.859,-1087.55 0,-1052.3 0,-996 0,-996 0,-996 0,-132 0,-95.8221 17.3813,-84.5812 49,-67 140.29,-16.2392 470.718,-15.0809 575.728,-16.0455"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="575.694,-19.5453 585.73,-16.1505 575.768,-12.5457 575.694,-19.5453"/>
+<path fill="none" stroke="midnightblue" d="M2582.36,-1055.73C2819.26,-1055.77 3650,-1048.21 3650,-940 3650,-940 3650,-940 3650,-132 3650,-95.5528 3632.06,-84.3445 3600,-67 3544.79,-37.1245 3100.62,-21.3186 2976.26,-17.4497"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2976.32,-13.95 2966.22,-17.1418 2976.1,-20.9468 2976.32,-13.95"/>
 </g>
 <!-- Node34 -->
 <g id="node34" class="node"><title>Node34</title>
 <g id="a_node34"><a xlink:href="base_8h.html" target="_top" xlink:title="Base classes for the Relay IR. ">
-<polygon fill="white" stroke="black" points="1942.5,-929.5 1942.5,-948.5 2039.5,-948.5 2039.5,-929.5 1942.5,-929.5"/>
-<text text-anchor="middle" x="1991" y="-936.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/relay/base.h</text>
+<polygon fill="white" stroke="black" points="2455.5,-873.5 2455.5,-892.5 2552.5,-892.5 2552.5,-873.5 2455.5,-873.5"/>
+<text text-anchor="middle" x="2504" y="-880.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/relay/base.h</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node34 -->
 <g id="edge128" class="edge"><title>Node1&#45;&gt;Node34</title>
-<path fill="none" stroke="midnightblue" d="M393.409,-1111.52C648.147,-1110.97 1609.12,-1102.33 1894,-1005 1924.99,-994.412 1955.5,-971.299 1973.79,-955.688"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1976.53,-957.941 1981.74,-948.714 1971.91,-952.68 1976.53,-957.941"/>
+<path fill="none" stroke="midnightblue" d="M2518.69,-1041.47C2515.82,-1010.7 2508.98,-937.329 2505.74,-902.7"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2509.21,-902.191 2504.8,-892.56 2502.24,-902.842 2509.21,-902.191"/>
 </g>
 <!-- Node38 -->
 <g id="node38" class="node"><title>Node38</title>
 <g id="a_node38"><a xlink:href="relay_2expr_8h.html" target="_top" xlink:title="Relay expression language. ">
-<polygon fill="white" stroke="black" points="540,-1041.5 540,-1060.5 634,-1060.5 634,-1041.5 540,-1041.5"/>
-<text text-anchor="middle" x="587" y="-1048.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/relay/expr.h</text>
+<polygon fill="white" stroke="black" points="2241,-985.5 2241,-1004.5 2335,-1004.5 2335,-985.5 2241,-985.5"/>
+<text text-anchor="middle" x="2288" y="-992.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/relay/expr.h</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node38 -->
 <g id="edge156" class="edge"><title>Node1&#45;&gt;Node38</title>
-<path fill="none" stroke="midnightblue" d="M391.344,-1097.47C436.956,-1086.87 498.652,-1072.53 540.48,-1062.81"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="541.453,-1066.18 550.401,-1060.51 539.868,-1059.36 541.453,-1066.18"/>
+<path fill="none" stroke="midnightblue" d="M2465.31,-1041.47C2424.24,-1030.94 2368.77,-1016.72 2330.88,-1007"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2331.72,-1003.6 2321.17,-1004.51 2329.98,-1010.38 2331.72,-1003.6"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node"><title>Node3</title>
-<polygon fill="white" stroke="#bfbfbf" points="874.5,-705.5 874.5,-724.5 969.5,-724.5 969.5,-705.5 874.5,-705.5"/>
-<text text-anchor="middle" x="922" y="-712.5" font-family="Helvetica,sans-Serif" font-size="10.00">dmlc/common.h</text>
+<polygon fill="white" stroke="#bfbfbf" points="1822.5,-649.5 1822.5,-668.5 1917.5,-668.5 1917.5,-649.5 1822.5,-649.5"/>
+<text text-anchor="middle" x="1870" y="-656.5" font-family="Helvetica,sans-Serif" font-size="10.00">dmlc/common.h</text>
 </g>
 <!-- Node2&#45;&gt;Node3 -->
 <g id="edge2" class="edge"><title>Node2&#45;&gt;Node3</title>
-<path fill="none" stroke="midnightblue" d="M1017.94,-761.444C999.425,-752.675 970.419,-738.935 949.145,-728.858"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="950.515,-725.634 939.979,-724.516 947.518,-731.96 950.515,-725.634"/>
+<path fill="none" stroke="midnightblue" d="M1870,-705.083C1870,-698.006 1870,-687.861 1870,-678.986"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1873.5,-678.751 1870,-668.751 1866.5,-678.751 1873.5,-678.751"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node"><title>Node4</title>
 <g id="a_node4"><a xlink:href="ir_2expr_8h.html" target="_top" xlink:title="Base expr nodes in TVM. ">
-<polygon fill="white" stroke="black" points="2259.5,-705.5 2259.5,-724.5 2336.5,-724.5 2336.5,-705.5 2259.5,-705.5"/>
-<text text-anchor="middle" x="2298" y="-712.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/expr.h</text>
+<polygon fill="white" stroke="black" points="2638.5,-649.5 2638.5,-668.5 2715.5,-668.5 2715.5,-649.5 2638.5,-649.5"/>
+<text text-anchor="middle" x="2677" y="-656.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/expr.h</text>
 </a>
 </g>
 </g>
 <!-- Node2&#45;&gt;Node4 -->
 <g id="edge3" class="edge"><title>Node2&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M1075.5,-768.31C1260.99,-760.373 2045.05,-726.824 2249.23,-718.087"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2249.5,-721.578 2259.34,-717.654 2249.2,-714.585 2249.5,-721.578"/>
+<path fill="none" stroke="midnightblue" d="M1909.78,-713.147C2022.25,-710.407 2352.03,-700.115 2624,-669 2625.3,-668.851 2626.62,-668.691 2627.96,-668.522"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2628.86,-671.929 2638.28,-667.074 2627.89,-664.997 2628.86,-671.929"/>
 </g>
 <!-- Node2&#45;&gt;Node13 -->
 <g id="edge123" class="edge"><title>Node2&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M996.281,-768.291C955.258,-764.875 890.803,-754.76 844,-725 807.684,-701.909 818.117,-675.231 784,-649 652.7,-548.049 581.917,-589.623 442,-501 388.524,-467.129 228,-376.3 228,-313 228,-313 228,-313 228,-132 228,-101.205 228.035,-86.3399 252,-67 301.412,-27.1238 497.099,-18.7337 575.382,-16.9694"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="575.694,-20.4639 585.621,-16.7618 575.552,-13.4653 575.694,-20.4639"/>
+<path fill="none" stroke="midnightblue" d="M1909.87,-713.155C2031.01,-709.178 2403.1,-686.485 2675,-557 2919.18,-440.713 3062.68,-407.097 3121,-143 3136.49,-72.8362 3031.22,-37.0958 2976.11,-23.3638"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2976.66,-19.898 2966.12,-20.9797 2975.03,-26.7066 2976.66,-19.898"/>
 </g>
 <!-- Node14 -->
 <g id="node14" class="node"><title>Node14</title>
-<polygon fill="white" stroke="#bfbfbf" points="2600,-6 2600,-25 2668,-25 2668,-6 2600,-6"/>
-<text text-anchor="middle" x="2634" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00">type_traits</text>
+<polygon fill="white" stroke="#bfbfbf" points="2226,-6 2226,-25 2294,-25 2294,-6 2226,-6"/>
+<text text-anchor="middle" x="2260" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00">type_traits</text>
 </g>
 <!-- Node2&#45;&gt;Node14 -->
 <g id="edge124" class="edge"><title>Node2&#45;&gt;Node14</title>
-<path fill="none" stroke="midnightblue" d="M1053.29,-761.428C1068.8,-753.277 1091.7,-740.049 1109,-725 1182.11,-661.391 1189.11,-633.968 1248,-557 1295.28,-495.202 1283.74,-456.38 1349,-414 1632.12,-230.133 1796.06,-424.725 2094,-266 2204.67,-207.042 2181.93,-123.249 2294,-67 2345.04,-41.3813 2509.83,-25.841 2589.73,-19.6297"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2590.26,-23.0998 2599.97,-18.8495 2589.73,-16.1201 2590.26,-23.0998"/>
+<path fill="none" stroke="midnightblue" d="M1909.52,-711.177C2025.85,-700.551 2368.58,-652.183 2523,-445 2596.19,-346.8 2638.34,-293.552 2595,-179 2551.16,-63.1333 2385.22,-29.6767 2304.56,-20.1779"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2304.55,-16.656 2294.23,-19.0381 2303.78,-23.6138 2304.55,-16.656"/>
 </g>
 <!-- Node15 -->
 <g id="node15" class="node"><title>Node15</title>
-<polygon fill="white" stroke="#bfbfbf" points="1752,-6 1752,-25 1794,-25 1794,-6 1752,-6"/>
-<text text-anchor="middle" x="1773" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00">utility</text>
+<polygon fill="white" stroke="#bfbfbf" points="359,-6 359,-25 401,-25 401,-6 359,-6"/>
+<text text-anchor="middle" x="380" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00">utility</text>
 </g>
 <!-- Node2&#45;&gt;Node15 -->
 <g id="edge126" class="edge"><title>Node2&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M1041.28,-761.231C1051.73,-743.043 1074,-699.601 1074,-660 1074,-660 1074,-660 1074,-546 1074,-417.726 1187.95,-430.735 1256,-322 1324.14,-213.121 1280.43,-130.632 1392,-67 1451.51,-33.0615 1660.68,-21.077 1741.14,-17.6629"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1741.76,-21.1407 1751.61,-17.2367 1741.47,-14.1465 1741.76,-21.1407"/>
+<path fill="none" stroke="midnightblue" d="M1830.29,-711.124C1714.65,-702.684 1383.28,-678.014 1335,-669 956.195,-598.27 878.62,-511.053 503,-425 408.133,-403.266 369.861,-440.05 287,-389 242.46,-361.559 171.753,-245.611 148,-199 136.13,-175.707 134.049,-168.828 130,-143 124.724,-109.342 116.282,-91.4571 140,-67 168.603,-37.5053 290.474,-23.781 348.736,-18.8117"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="349.157,-22.289 358.837,-17.9838 348.585,-15.3124 349.157,-22.289"/>
 </g>
-<!-- Node16 -->
-<g id="node16" class="node"><title>Node16</title>
-<g id="a_node16"><a xlink:href="packed__func_8h.html" target="_top" xlink:title="Type&#45;erased function used across TVM API. ">
-<polygon fill="white" stroke="black" points="1972.5,-235.5 1972.5,-265.5 2085.5,-265.5 2085.5,-235.5 1972.5,-235.5"/>
-<text text-anchor="start" x="1980.5" y="-253.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/packed</text>
-<text text-anchor="middle" x="2029" y="-242.5" font-family="Helvetica,sans-Serif" font-size="10.00">_func.h</text>
-</a>
+<!-- Node18 -->
+<g id="node18" class="node"><title>Node18</title>
+<polygon fill="white" stroke="#bfbfbf" points="561.5,-123.5 561.5,-142.5 654.5,-142.5 654.5,-123.5 561.5,-123.5"/>
+<text text-anchor="middle" x="608" y="-130.5" font-family="Helvetica,sans-Serif" font-size="10.00">unordered_map</text>
 </g>
+<!-- Node2&#45;&gt;Node18 -->
+<g id="edge125" class="edge"><title>Node2&#45;&gt;Node18</title>
+<path fill="none" stroke="midnightblue" d="M1830.1,-710.921C1716.66,-702.093 1399.11,-676.825 1378,-669 1317.64,-646.628 1190.67,-543.137 1142,-501 1049.55,-420.959 1053.56,-370.111 952,-302 915.534,-277.544 899.952,-284.214 860,-266 774.173,-226.871 676.15,-172.658 631.897,-147.645"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="633.476,-144.517 623.051,-142.628 630.023,-150.606 633.476,-144.517"/>
 </g>
-<!-- Node2&#45;&gt;Node16 -->
-<g id="edge121" class="edge"><title>Node2&#45;&gt;Node16</title>
-<path fill="none" stroke="midnightblue" d="M1049.2,-761.46C1060.84,-753.33 1077.53,-740.116 1088,-725 1105.53,-699.681 1112,-690.795 1112,-660 1112,-660 1112,-660 1112,-546 1112,-367.295 1751.29,-281.7 1962.31,-258.314"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1962.77,-261.785 1972.33,-257.215 1962.01,-254.827 1962.77,-261.785"/>
+<!-- Node19 -->
+<g id="node19" class="node"><title>Node19</title>
+<polygon fill="white" stroke="#bfbfbf" points="812.5,-123.5 812.5,-142.5 859.5,-142.5 859.5,-123.5 812.5,-123.5"/>
+<text text-anchor="middle" x="836" y="-130.5" font-family="Helvetica,sans-Serif" font-size="10.00">vector</text>
+</g>
+<!-- Node2&#45;&gt;Node19 -->
+<g id="edge127" class="edge"><title>Node2&#45;&gt;Node19</title>
+<path fill="none" stroke="midnightblue" d="M1835.69,-705.463C1804.56,-697.334 1757.59,-684.121 1718,-669 1446.1,-565.159 1381.8,-527.854 1126,-389 1061.28,-353.871 1052.27,-331.944 985,-302 932.962,-278.837 905.382,-302.911 862,-266 830.621,-239.302 827.271,-220.109 830,-179 830.575,-170.341 831.765,-160.805 832.935,-152.75"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="836.436,-153.011 834.509,-142.593 829.519,-151.939 836.436,-153.011"/>
 </g>
 <!-- Node20 -->
 <g id="node20" class="node"><title>Node20</title>
-<polygon fill="white" stroke="#bfbfbf" points="334.5,-123.5 334.5,-142.5 427.5,-142.5 427.5,-123.5 334.5,-123.5"/>
-<text text-anchor="middle" x="381" y="-130.5" font-family="Helvetica,sans-Serif" font-size="10.00">unordered_map</text>
-</g>
-<!-- Node2&#45;&gt;Node20 -->
-<g id="edge125" class="edge"><title>Node2&#45;&gt;Node20</title>
-<path fill="none" stroke="midnightblue" d="M996.187,-768.216C958.841,-764.68 903.174,-754.421 865,-725 834.261,-701.309 847.465,-678.286 822,-649 724.241,-536.572 653.818,-557.377 556,-445 471.303,-347.697 408.612,-202.933 388.161,-152.287"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="391.301,-150.71 384.35,-142.715 384.797,-153.3 391.301,-150.71"/>
+<g id="a_node20"><a xlink:href="packed__func_8h.html" target="_top" xlink:title="Type&#45;erased function used across TVM API. ">
+<polygon fill="white" stroke="black" points="1384.5,-235.5 1384.5,-265.5 1497.5,-265.5 1497.5,-235.5 1384.5,-235.5"/>
+<text text-anchor="start" x="1392.5" y="-253.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/packed</text>
+<text text-anchor="middle" x="1441" y="-242.5" font-family="Helvetica,sans-Serif" font-size="10.00">_func.h</text>
+</a>
 </g>
-<!-- Node21 -->
-<g id="node21" class="node"><title>Node21</title>
-<polygon fill="white" stroke="#bfbfbf" points="1388.5,-123.5 1388.5,-142.5 1435.5,-142.5 1435.5,-123.5 1388.5,-123.5"/>
-<text text-anchor="middle" x="1412" y="-130.5" font-family="Helvetica,sans-Serif" font-size="10.00">vector</text>
 </g>
-<!-- Node2&#45;&gt;Node21 -->
-<g id="edge127" class="edge"><title>Node2&#45;&gt;Node21</title>
-<path fill="none" stroke="midnightblue" d="M1029.03,-761.316C997.168,-720.974 865.04,-546.664 822,-378 801.433,-297.403 802.826,-248.145 898,-179 936.793,-150.816 1270.27,-138.298 1378.35,-134.956"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1378.48,-138.454 1388.37,-134.653 1378.27,-131.457 1378.48,-138.454"/>
+<!-- Node2&#45;&gt;Node20 -->
+<g id="edge121" class="edge"><title>Node2&#45;&gt;Node20</title>
+<path fill="none" stroke="midnightblue" d="M1845.71,-705.404C1783.4,-682.186 1616.28,-612.355 1523,-501 1465.96,-432.904 1448.25,-323.952 1443.04,-275.768"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1446.51,-275.268 1442.04,-265.662 1439.54,-275.959 1446.51,-275.268"/>
 </g>
-<!-- Node23 -->
-<g id="node23" class="node"><title>Node23</title>
-<polygon fill="white" stroke="#bfbfbf" points="940.5,-179.5 940.5,-198.5 1003.5,-198.5 1003.5,-179.5 940.5,-179.5"/>
-<text text-anchor="middle" x="972" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">functional</text>
+<!-- Node24 -->
+<g id="node24" class="node"><title>Node24</title>
+<polygon fill="white" stroke="#bfbfbf" points="864.5,-179.5 864.5,-198.5 927.5,-198.5 927.5,-179.5 864.5,-179.5"/>
+<text text-anchor="middle" x="896" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">functional</text>
 </g>
-<!-- Node2&#45;&gt;Node23 -->
-<g id="edge122" class="edge"><title>Node2&#45;&gt;Node23</title>
-<path fill="none" stroke="midnightblue" d="M1033.07,-761.399C1015.67,-709.972 927.044,-442.54 936,-358 941.849,-302.785 958.225,-239.045 966.727,-208.369"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="970.125,-209.214 969.469,-198.64 963.388,-207.315 970.125,-209.214"/>
+<!-- Node2&#45;&gt;Node24 -->
+<g id="edge122" class="edge"><title>Node2&#45;&gt;Node24</title>
+<path fill="none" stroke="midnightblue" d="M1830.14,-710.909C1722.24,-702.431 1431.3,-678.791 1413,-669 1317.77,-618.042 1333.69,-559.026 1259,-481 1176.51,-394.824 1152.8,-375.707 1059,-302 1010.84,-264.155 950.649,-224.668 918.581,-204.205"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="920.263,-201.127 909.945,-198.721 916.51,-207.036 920.263,-201.127"/>
 </g>
 <!-- Node28 -->
 <g id="node28" class="node"><title>Node28</title>
 <g id="a_node28"><a xlink:href="structural__equal_8h.html" target="_top" xlink:title="Structural equality comparison. ">
-<polygon fill="white" stroke="black" points="2706.5,-414.5 2706.5,-444.5 2817.5,-444.5 2817.5,-414.5 2706.5,-414.5"/>
-<text text-anchor="start" x="2714.5" y="-432.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/structural</text>
-<text text-anchor="middle" x="2762" y="-421.5" font-family="Helvetica,sans-Serif" font-size="10.00">_equal.h</text>
+<polygon fill="white" stroke="black" points="2102.5,-358.5 2102.5,-388.5 2213.5,-388.5 2213.5,-358.5 2102.5,-358.5"/>
+<text text-anchor="start" x="2110.5" y="-376.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/structural</text>
+<text text-anchor="middle" x="2158" y="-365.5" font-family="Helvetica,sans-Serif" font-size="10.00">_equal.h</text>
 </a>
 </g>
 </g>
 <!-- Node2&#45;&gt;Node28 -->
 <g id="edge119" class="edge"><title>Node2&#45;&gt;Node28</title>
-<path fill="none" stroke="midnightblue" d="M1075.7,-761.642C1253.83,-724.208 1980.76,-572.269 2211,-537 2341.12,-517.067 2380.32,-543.257 2505,-501 2521.6,-495.372 2522.7,-487.457 2539,-481 2553.66,-475.192 2636.04,-457.137 2696.42,-444.277"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2697.23,-447.683 2706.29,-442.18 2695.78,-440.836 2697.23,-447.683"/>
+<path fill="none" stroke="midnightblue" d="M1886.59,-705.396C1902.39,-696.924 1926.57,-683.221 1946,-669 1951.65,-664.863 2130.55,-507.097 2134,-501 2152.18,-468.846 2156.89,-425.499 2157.94,-398.804"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2161.44,-398.876 2158.2,-388.791 2154.44,-398.699 2161.44,-398.876"/>
 </g>
 <!-- Node30 -->
 <g id="node30" class="node"><title>Node30</title>
 <g id="a_node30"><a xlink:href="structural__hash_8h.html" target="_top" xlink:title="tvm/node/structural\l_hash.h">
-<polygon fill="white" stroke="black" points="1898.5,-414.5 1898.5,-444.5 2009.5,-444.5 2009.5,-414.5 1898.5,-414.5"/>
-<text text-anchor="start" x="1906.5" y="-432.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/structural</text>
-<text text-anchor="middle" x="1954" y="-421.5" font-family="Helvetica,sans-Serif" font-size="10.00">_hash.h</text>
+<polygon fill="white" stroke="black" points="1934.5,-358.5 1934.5,-388.5 2045.5,-388.5 2045.5,-358.5 1934.5,-358.5"/>
+<text text-anchor="start" x="1942.5" y="-376.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/structural</text>
+<text text-anchor="middle" x="1990" y="-365.5" font-family="Helvetica,sans-Serif" font-size="10.00">_hash.h</text>
 </a>
 </g>
 </g>
 <!-- Node2&#45;&gt;Node30 -->
 <g id="edge120" class="edge"><title>Node2&#45;&gt;Node30</title>
-<path fill="none" stroke="midnightblue" d="M1073.17,-761.48C1107.86,-753.22 1160.89,-739.795 1206,-725 1480.79,-634.875 1800.8,-497.704 1912.79,-448.693"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1914.29,-451.856 1922.05,-444.635 1911.48,-445.444 1914.29,-451.856"/>
+<path fill="none" stroke="midnightblue" d="M1885.79,-705.427C1898.62,-697.626 1916.16,-684.911 1926,-669 1980.73,-580.514 1989.05,-451.799 1990.04,-398.744"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1993.54,-398.652 1990.15,-388.613 1986.54,-398.573 1993.54,-398.652"/>
 </g>
 <!-- Node5 -->
 <g id="node5" class="node"><title>Node5</title>
 <g id="a_node5"><a xlink:href="span_8h.html" target="_top" xlink:title="Span information for debugging purposes. ">
-<polygon fill="white" stroke="black" points="2275,-593.5 2275,-612.5 2355,-612.5 2355,-593.5 2275,-593.5"/>
-<text text-anchor="middle" x="2315" y="-600.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/span.h</text>
+<polygon fill="white" stroke="black" points="2553,-537.5 2553,-556.5 2633,-556.5 2633,-537.5 2553,-537.5"/>
+<text text-anchor="middle" x="2593" y="-544.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/span.h</text>
 </a>
 </g>
 </g>
 <!-- Node4&#45;&gt;Node5 -->
 <g id="edge4" class="edge"><title>Node4&#45;&gt;Node5</title>
-<path fill="none" stroke="midnightblue" d="M2299.33,-705.368C2302.08,-687.617 2308.41,-646.666 2312.13,-622.597"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2315.6,-623.009 2313.67,-612.591 2308.69,-621.94 2315.6,-623.009"/>
+<path fill="none" stroke="midnightblue" d="M2670.41,-649.368C2656.48,-631.135 2623.87,-588.426 2605.73,-564.675"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2608.41,-562.415 2599.56,-556.591 2602.85,-566.663 2608.41,-562.415"/>
 </g>
 <!-- Node6 -->
 <g id="node6" class="node"><title>Node6</title>
 <g id="a_node6"><a xlink:href="node_8h.html" target="_top" xlink:title="Definitions and helper macros for IR/AST nodes. ">
-<polygon fill="white" stroke="black" points="2220,-537.5 2220,-556.5 2318,-556.5 2318,-537.5 2220,-537.5"/>
-<text text-anchor="middle" x="2269" y="-544.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/node.h</text>
+<polygon fill="white" stroke="black" points="2027,-481.5 2027,-500.5 2125,-500.5 2125,-481.5 2027,-481.5"/>
+<text text-anchor="middle" x="2076" y="-488.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/node.h</text>
 </a>
 </g>
 </g>
 <!-- Node4&#45;&gt;Node6 -->
 <g id="edge113" class="edge"><title>Node4&#45;&gt;Node6</title>
-<path fill="none" stroke="midnightblue" d="M2294.24,-705.302C2287.02,-688.084 2271.45,-648.265 2266,-613 2264.64,-604.216 2265.7,-601.884 2266,-593 2266.29,-584.383 2266.88,-574.854 2267.47,-566.791"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2270.97,-566.859 2268.25,-556.618 2263.99,-566.318 2270.97,-566.859"/>
+<path fill="none" stroke="midnightblue" d="M2666,-649.355C2633.46,-623.966 2537.7,-550.557 2501,-537 2435.39,-512.762 2235.93,-499.819 2135.34,-494.679"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2135.5,-491.183 2125.33,-494.177 2135.15,-498.174 2135.5,-491.183"/>
 </g>
 <!-- Node7 -->
 <g id="node7" class="node"><title>Node7</title>
 <g id="a_node7"><a xlink:href="node_2container_8h.html" target="_top" xlink:title="Array/Map container in the DSL graph. ">
-<polygon fill="white" stroke="black" points="1810.5,-358.5 1810.5,-377.5 1929.5,-377.5 1929.5,-358.5 1810.5,-358.5"/>
-<text text-anchor="middle" x="1870" y="-365.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/container.h</text>
+<polygon fill="white" stroke="black" points="1466.5,-302.5 1466.5,-321.5 1585.5,-321.5 1585.5,-302.5 1466.5,-302.5"/>
+<text text-anchor="middle" x="1526" y="-309.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/container.h</text>
 </a>
 </g>
 </g>
 <!-- Node4&#45;&gt;Node7 -->
 <g id="edge112" class="edge"><title>Node4&#45;&gt;Node7</title>
-<path fill="none" stroke="midnightblue" d="M2273.9,-705.451C2202.83,-678.953 1992.63,-591.087 1889,-445 1876.98,-428.056 1872.54,-404.274 1870.91,-387.847"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1874.4,-387.541 1870.18,-377.824 1867.42,-388.053 1874.4,-387.541"/>
+<path fill="none" stroke="midnightblue" d="M2638.25,-654.656C2500.55,-641.789 2023.6,-588.804 1660,-445 1615.49,-427.395 1601.13,-423.55 1568,-389 1551.91,-372.22 1539.96,-348.076 1533.01,-331.53"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1536.12,-329.896 1529.16,-321.908 1529.62,-332.493 1536.12,-329.896"/>
 </g>
 <!-- Node11 -->
 <g id="node11" class="node"><title>Node11</title>
 <g id="a_node11"><a xlink:href="object_8h.html" target="_top" xlink:title="A managed object in the TVM runtime. ">
-<polygon fill="white" stroke="red" points="2866.5,-67.5 2866.5,-86.5 2983.5,-86.5 2983.5,-67.5 2866.5,-67.5"/>
-<text text-anchor="middle" x="2925" y="-74.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/object.h</text>
+<polygon fill="white" stroke="red" points="1542.5,-67.5 1542.5,-86.5 1659.5,-86.5 1659.5,-67.5 1542.5,-67.5"/>
+<text text-anchor="middle" x="1601" y="-74.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/object.h</text>
 </a>
 </g>
 </g>
 <!-- Node4&#45;&gt;Node11 -->
 <g id="edge114" class="edge"><title>Node4&#45;&gt;Node11</title>
-<path fill="none" stroke="midnightblue" d="M2336.66,-713.691C2454.37,-711.798 2817.75,-698.887 3103,-613 3188.22,-587.341 3224.36,-577.994 3269,-501 3353.89,-354.59 3367.26,-211.49 3223,-123 3220.55,-121.495 3080.57,-100.783 2993.35,-87.9896"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2993.65,-84.4966 2983.25,-86.5089 2992.64,-91.4226 2993.65,-84.4966"/>
+<path fill="none" stroke="midnightblue" d="M2683.06,-649.346C2709.12,-610.945 2807.33,-453.635 2737,-358 2607.74,-182.233 1895.47,-104.287 1669.68,-83.7597"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1669.89,-80.2647 1659.62,-82.8538 1669.27,-87.2365 1669.89,-80.2647"/>
 </g>
 <!-- Node4&#45;&gt;Node13 -->
 <g id="edge117" class="edge"><title>Node4&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M2259.24,-712.484C2086.45,-704.897 1370.44,-664.627 811,-501 684.307,-463.944 626.636,-443.052 574,-322 528.517,-217.397 490.224,-167.051 545,-67 553.423,-51.6152 568.663,-39.2054 582.043,-30.5378"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="584.181,-33.3339 590.903,-25.1445 580.541,-27.3546 584.181,-33.3339"/>
+<path fill="none" stroke="midnightblue" d="M2715.55,-651.516C2764.32,-642.903 2845.18,-627.126 2872,-613 3100.4,-492.714 3270,-448.135 3270,-190 3270,-190 3270,-190 3270,-132 3270,-101.205 3269.72,-86.6353 3246,-67 3205.28,-33.2987 3045.59,-21.4831 2976.33,-17.8876"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2976.19,-14.3762 2966.03,-17.379 2975.84,-21.3677 2976.19,-14.3762"/>
 </g>
 <!-- Node4&#45;&gt;Node14 -->
 <g id="edge118" class="edge"><title>Node4&#45;&gt;Node14</title>
-<path fill="none" stroke="midnightblue" d="M2336.67,-713.523C2435.12,-711.81 2703.03,-704.026 2923,-669 3024.77,-652.795 3052.04,-650.554 3148,-613 3355.54,-531.782 3457.26,-482.537 3510,-266 3514.01,-249.53 3506.95,-180.809 3506,-179 3456.63,-85.0088 3398.44,-90.9102 3295,-67 3177.07,-39.7411 2806.71,-23.1844 2678.33,-18.1452"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2678.22,-14.6382 2668.09,-17.7475 2677.95,-21.6329 2678.22,-14.6382"/>
+<path fill="none" stroke="midnightblue" d="M2688.49,-649.247C2699.1,-640.772 2714.86,-627.159 2726,-613 2778.78,-545.934 2797.65,-527.631 2819,-445 2849.11,-328.45 2849.23,-267.836 2768,-179 2643.05,-42.354 2403.35,-20.0325 2304.4,-16.8077"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2304.25,-13.3024 2294.16,-16.5267 2304.06,-20.2997 2304.25,-13.3024"/>
 </g>
-<!-- Node24 -->
-<g id="node24" class="node"><title>Node24</title>
-<polygon fill="white" stroke="#bfbfbf" points="3581,-179.5 3581,-198.5 3623,-198.5 3623,-179.5 3581,-179.5"/>
-<text text-anchor="middle" x="3602" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">limits</text>
+<!-- Node16 -->
+<g id="node16" class="node"><title>Node16</title>
+<polygon fill="white" stroke="#bfbfbf" points="2986,-123.5 2986,-142.5 3048,-142.5 3048,-123.5 2986,-123.5"/>
+<text text-anchor="middle" x="3017" y="-130.5" font-family="Helvetica,sans-Serif" font-size="10.00">algorithm</text>
 </g>
-<!-- Node4&#45;&gt;Node24 -->
-<g id="edge116" class="edge"><title>Node4&#45;&gt;Node24</title>
-<path fill="none" stroke="midnightblue" d="M2336.72,-713.819C2516.37,-712.783 3264.01,-706.25 3361,-669 3418.61,-646.874 3575,-553.714 3575,-492 3575,-492 3575,-492 3575,-311 3575,-273.838 3587.28,-231.764 3595.28,-208.308"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3598.66,-209.252 3598.69,-198.657 3592.06,-206.919 3598.66,-209.252"/>
+<!-- Node4&#45;&gt;Node16 -->
+<g id="edge115" class="edge"><title>Node4&#45;&gt;Node16</title>
+<path fill="none" stroke="midnightblue" d="M2715.58,-650.595C2758.47,-641.867 2824.55,-626.799 2846,-613 2873.09,-595.573 2873.37,-583.277 2892,-557 2993.21,-414.223 3020.94,-370.464 3056,-199 3057.78,-190.291 3059.11,-187.328 3056,-179 3051.83,-167.812 3043.48,-157.56 3035.58,-149.676"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="3037.7,-146.872 3027.99,-142.635 3032.94,-152.003 3037.7,-146.872"/>
 </g>
-<!-- Node26 -->
-<g id="node26" class="node"><title>Node26</title>
-<polygon fill="white" stroke="#bfbfbf" points="2668,-241 2668,-260 2730,-260 2730,-241 2668,-241"/>
-<text text-anchor="middle" x="2699" y="-248" font-family="Helvetica,sans-Serif" font-size="10.00">algorithm</text>
+<!-- Node25 -->
+<g id="node25" class="node"><title>Node25</title>
+<polygon fill="white" stroke="#bfbfbf" points="2972,-179.5 2972,-198.5 3014,-198.5 3014,-179.5 2972,-179.5"/>
+<text text-anchor="middle" x="2993" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">limits</text>
 </g>
-<!-- Node4&#45;&gt;Node26 -->
-<g id="edge115" class="edge"><title>Node4&#45;&gt;Node26</title>
-<path fill="none" stroke="midnightblue" d="M2336.77,-708.099C2438.85,-690.233 2714.86,-626.354 2826,-445 2867.83,-376.745 2767.65,-297.54 2721.15,-265.762"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2722.88,-262.709 2712.62,-260.056 2718.98,-268.526 2722.88,-262.709"/>
+<!-- Node4&#45;&gt;Node25 -->
+<g id="edge116" class="edge"><title>Node4&#45;&gt;Node25</title>
+<path fill="none" stroke="midnightblue" d="M2715.59,-649.693C2752.64,-641.066 2805.24,-626.91 2821,-613 2949.67,-499.416 2983.72,-275.411 2991.17,-208.991"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2994.68,-209.099 2992.24,-198.789 2987.71,-208.37 2994.68,-209.099"/>
 </g>
 <!-- Node33 -->
 <g id="node33" class="node"><title>Node33</title>
 <g id="a_node33"><a xlink:href="ir_2type_8h.html" target="_top" xlink:title="IR/AST nodes for the unified type system in TVM. ">
-<polygon fill="white" stroke="black" points="1984.5,-649.5 1984.5,-668.5 2061.5,-668.5 2061.5,-649.5 1984.5,-649.5"/>
-<text text-anchor="middle" x="2023" y="-656.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/type.h</text>
+<polygon fill="white" stroke="black" points="2043.5,-593.5 2043.5,-612.5 2120.5,-612.5 2120.5,-593.5 2043.5,-593.5"/>
+<text text-anchor="middle" x="2082" y="-600.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/type.h</text>
 </a>
 </g>
 </g>
 <!-- Node4&#45;&gt;Node33 -->
 <g id="edge105" class="edge"><title>Node4&#45;&gt;Node33</title>
-<path fill="none" stroke="midnightblue" d="M2259.47,-706.435C2210.31,-696.781 2125.25,-680.077 2071.66,-669.555"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2072.2,-666.094 2061.71,-667.601 2070.85,-672.963 2072.2,-666.094"/>
+<path fill="none" stroke="midnightblue" d="M2638.42,-654.499C2534.06,-645.027 2246.29,-618.91 2130.85,-608.434"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2131.16,-604.947 2120.88,-607.529 2130.52,-611.918 2131.16,-604.947"/>
 </g>
 <!-- Node5&#45;&gt;Node6 -->
 <g id="edge5" class="edge"><title>Node5&#45;&gt;Node6</title>
-<path fill="none" stroke="midnightblue" d="M2307.4,-593.083C2300.77,-585.298 2290.98,-573.801 2282.94,-564.367"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2285.6,-562.094 2276.45,-556.751 2280.27,-566.633 2285.6,-562.094"/>
+<path fill="none" stroke="midnightblue" d="M2552.94,-539.011C2548.25,-538.285 2543.52,-537.596 2539,-537 2394.4,-517.945 2223.39,-503.38 2135.2,-496.453"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2135.37,-492.955 2125.12,-495.666 2134.82,-499.934 2135.37,-492.955"/>
 </g>
 <!-- Node5&#45;&gt;Node11 -->
 <g id="edge103" class="edge"><title>Node5&#45;&gt;Node11</title>
-<path fill="none" stroke="midnightblue" d="M2355.2,-596.753C2437.55,-585.273 2630.66,-554.579 2785,-501 2838.33,-482.487 2849.05,-471.302 2899,-445 2952.7,-416.72 2980.01,-425.333 3018,-378 3073.37,-309.013 3054.84,-261.142 3022,-179 3011.28,-152.175 3008.59,-144.231 2989,-123 2977.66,-110.71 2962.42,-99.8332 2949.66,-91.8527"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2951.27,-88.7358 2940.9,-86.5748 2947.66,-94.7323 2951.27,-88.7358"/>
+<path fill="none" stroke="midnightblue" d="M2554.8,-537.486C2467.33,-517.46 2260,-466.747 2260,-436 2260,-436 2260,-436 2260,-372.5 2260,-219.627 2094.37,-277.175 1963,-199 1948.26,-190.23 1944.82,-187.636 1930,-179 1885.99,-153.351 1877.81,-140.575 1830,-123 1800.27,-112.071 1721.42,-97.7047 1664.56,-88.1773"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1665,-84.7039 1654.56,-86.5154 1663.85,-91.609 1665,-84.7039"/>
 </g>
 <!-- Node5&#45;&gt;Node13 -->
 <g id="edge104" class="edge"><title>Node5&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M2274.77,-598.138C2129.3,-583.792 1617.34,-529.973 1202,-445 996.35,-402.927 925.673,-430.536 746,-322 682.201,-283.461 663.687,-266.465 632,-199 606.115,-143.887 605.466,-69.7171 606.827,-35.3872"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="610.343,-35.167 607.355,-25.0024 603.352,-34.8121 610.343,-35.167"/>
+<path fill="none" stroke="midnightblue" d="M2609.25,-537.486C2674.2,-502.843 2918.92,-366.332 3071,-199 3095.77,-171.749 3121.39,-155.461 3104,-123 3076.95,-72.5068 3014.24,-41.8437 2975.85,-27.1202"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2976.78,-23.7318 2966.18,-23.5521 2974.35,-30.2987 2976.78,-23.7318"/>
 </g>
 <!-- Node6&#45;&gt;Node7 -->
 <g id="edge6" class="edge"><title>Node6&#45;&gt;Node7</title>
-<path fill="none" stroke="midnightblue" d="M2237.33,-537.443C2210.63,-529.651 2171.81,-516.941 2140,-501 2100.22,-481.061 2092.89,-471.309 2057,-445 2039.14,-431.909 2037.61,-424.291 2018,-414 1988.11,-398.312 1951.9,-387.182 1922.78,-379.915"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1923.33,-376.45 1912.79,-377.505 1921.69,-383.254 1923.33,-376.45"/>
+<path fill="none" stroke="midnightblue" d="M2026.8,-487.2C1939.2,-481.701 1759.98,-467.984 1702,-445 1634.17,-418.113 1569.56,-357.846 1541.14,-328.991"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1543.59,-326.484 1534.11,-321.74 1538.56,-331.356 1543.59,-326.484"/>
 </g>
 <!-- Node8 -->
 <g id="node8" class="node"><title>Node8</title>
 <g id="a_node8"><a xlink:href="runtime_2container_8h.html" target="_top" xlink:title="Common POD(plain old data) container types. ">
-<polygon fill="white" stroke="red" points="2057,-302.5 2057,-321.5 2189,-321.5 2189,-302.5 2057,-302.5"/>
-<text text-anchor="middle" x="2123" y="-309.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/container.h</text>
+<polygon fill="white" stroke="red" points="1556,-179.5 1556,-198.5 1688,-198.5 1688,-179.5 1556,-179.5"/>
+<text text-anchor="middle" x="1622" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/container.h</text>
 </a>
 </g>
 </g>
 <!-- Node6&#45;&gt;Node8 -->
 <g id="edge96" class="edge"><title>Node6&#45;&gt;Node8</title>
-<path fill="none" stroke="midnightblue" d="M2284.51,-537.489C2303.42,-525.897 2331.63,-503.95 2321,-481 2285.46,-404.232 2195.63,-349.74 2150.2,-326.115"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2151.72,-322.959 2141.22,-321.545 2148.55,-329.198 2151.72,-322.959"/>
+<path fill="none" stroke="midnightblue" d="M2026.9,-489.11C1944.86,-486.709 1784.53,-477.828 1740,-445 1659.3,-385.509 1632.12,-257.185 1624.54,-208.893"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1627.99,-208.286 1623.08,-198.899 1621.06,-209.3 1627.99,-208.286"/>
 </g>
 <!-- Node10 -->
 <g id="node10" class="node"><title>Node10</title>
 <g id="a_node10"><a xlink:href="runtime_2memory_8h.html" target="_top" xlink:title="Runtime memory management. ">
-<polygon fill="white" stroke="red" points="2440.5,-123.5 2440.5,-142.5 2567.5,-142.5 2567.5,-123.5 2440.5,-123.5"/>
-<text text-anchor="middle" x="2504" y="-130.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/memory.h</text>
+<polygon fill="white" stroke="red" points="1570.5,-123.5 1570.5,-142.5 1697.5,-142.5 1697.5,-123.5 1570.5,-123.5"/>
+<text text-anchor="middle" x="1634" y="-130.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/memory.h</text>
 </a>
 </g>
 </g>
 <!-- Node6&#45;&gt;Node10 -->
 <g id="edge97" class="edge"><title>Node6&#45;&gt;Node10</title>
-<path fill="none" stroke="midnightblue" d="M2318.37,-544.376C2441.57,-539.23 2757.59,-518.948 2826,-445 2869.54,-397.935 2875.94,-358.156 2845,-302 2784.62,-192.412 2695.24,-254.282 2583,-199 2557.99,-186.685 2533.96,-165.041 2519.1,-150.134"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2521.32,-147.391 2511.84,-142.648 2516.29,-152.264 2521.32,-147.391"/>
+<path fill="none" stroke="midnightblue" d="M2026.87,-489.065C1950.85,-486.597 1809.64,-477.625 1773,-445 1748.76,-423.42 1754,-406.951 1754,-374.5 1754,-374.5 1754,-374.5 1754,-249.5 1754,-199.81 1699.93,-164.787 1664.38,-147.129"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1665.44,-143.756 1654.9,-142.612 1662.42,-150.075 1665.44,-143.756"/>
 </g>
 <!-- Node6&#45;&gt;Node11 -->
 <g id="edge98" class="edge"><title>Node6&#45;&gt;Node11</title>
-<path fill="none" stroke="midnightblue" d="M2318.01,-543.802C2423.06,-538.697 2666.79,-524.641 2746,-501 2797.06,-485.762 2807.27,-473.957 2852,-445 2932,-393.204 3021,-408.307 3021,-313 3021,-313 3021,-313 3021,-249.5 3021,-185.214 2969,-122.663 2941.55,-94.1113"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2943.72,-91.335 2934.2,-86.6811 2938.74,-96.2547 2943.72,-91.335"/>
+<path fill="none" stroke="midnightblue" d="M2076.4,-481.37C2077.06,-459.375 2076.48,-399.99 2054,-358 1980.8,-221.256 1934.88,-192.067 1796,-123 1772.33,-111.228 1707.9,-97.5507 1659.53,-88.3926"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1659.94,-84.9097 1649.47,-86.5093 1658.65,-91.7902 1659.94,-84.9097"/>
 </g>
 <!-- Node12 -->
 <g id="node12" class="node"><title>Node12</title>
 <g id="a_node12"><a xlink:href="c__runtime__api_8h.html" target="_top" xlink:title="tvm/runtime/c_runtime\l_api.h">
-<polygon fill="white" stroke="red" points="3070.5,-0.5 3070.5,-30.5 3197.5,-30.5 3197.5,-0.5 3070.5,-0.5"/>
-<text text-anchor="start" x="3078.5" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/c_runtime</text>
-<text text-anchor="middle" x="3134" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">_api.h</text>
+<polygon fill="white" stroke="red" points="1079.5,-0.5 1079.5,-30.5 1206.5,-30.5 1206.5,-0.5 1079.5,-0.5"/>
+<text text-anchor="start" x="1087.5" y="-18.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/c_runtime</text>
+<text text-anchor="middle" x="1143" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">_api.h</text>
 </a>
 </g>
 </g>
 <!-- Node6&#45;&gt;Node12 -->
 <g id="edge95" class="edge"><title>Node6&#45;&gt;Node12</title>
-<path fill="none" stroke="midnightblue" d="M2318.15,-544.388C2522.71,-536.592 3303.18,-495.706 3459,-322 3537.64,-234.336 3488.93,-125.973 3387,-67 3332.18,-35.2873 3260.75,-23.2001 3207.76,-18.7336"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3208,-15.2415 3197.76,-17.9618 3207.46,-22.2207 3208,-15.2415"/>
+<path fill="none" stroke="midnightblue" d="M2026.91,-486.725C1937.18,-480.485 1740.74,-465.649 1576,-445 1234.74,-402.226 1136.62,-435.612 812,-322 785.75,-312.813 614.9,-217.349 594,-199 570.621,-178.474 561.838,-172.515 552,-143 518.585,-42.7555 903.563,-21.9453 1069.28,-17.6284"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1069.48,-21.1246 1079.39,-17.3784 1069.31,-14.1267 1069.48,-21.1246"/>
 </g>
 <!-- Node6&#45;&gt;Node13 -->
 <g id="edge99" class="edge"><title>Node6&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M2219.92,-540.849C2113.78,-529.73 1854.97,-502.73 1638,-481 1473.6,-464.535 1420.77,-507.913 1268,-445 1247.85,-436.7 1249.5,-423.735 1230,-414 1170.2,-384.149 1145.38,-404.446 1084,-378 1041.77,-359.804 1032.66,-351.028 997,-322 880.231,-226.961 899.729,-149.823 774,-67 732.508,-39.6679 675.574,-26.5924 640.32,-20.7485"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="640.535,-17.24 630.116,-19.1593 639.458,-24.1566 640.535,-17.24"/>
+<path fill="none" stroke="midnightblue" d="M2125.02,-481.427C2167.29,-473.542 2229.73,-460.709 2283,-445 2514.83,-376.631 2580.73,-351.8 2768,-199 2828.29,-149.81 2827.29,-121.322 2883,-67 2895.99,-54.333 2911.8,-41.3057 2924.07,-31.6558"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2926.53,-34.1753 2932.28,-25.2795 2922.24,-28.6451 2926.53,-34.1753"/>
 </g>
 <!-- Node6&#45;&gt;Node14 -->
 <g id="edge100" class="edge"><title>Node6&#45;&gt;Node14</title>
-<path fill="none" stroke="midnightblue" d="M2318.3,-545.598C2410.79,-543.986 2616.23,-536.342 2785,-501 3102.11,-434.595 3342.02,-457.46 3420,-143 3422.14,-134.372 3425.52,-129.966 3420,-123 3352.22,-37.5074 3288.69,-84.5009 3181,-67 2995.64,-36.8756 2771.8,-23.2156 2678.35,-18.5146"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2678.29,-15.0078 2668.13,-18.0106 2677.95,-21.9993 2678.29,-15.0078"/>
+<path fill="none" stroke="midnightblue" d="M2110.61,-481.451C2169.17,-466.41 2290.88,-432.627 2388,-389 2441.61,-364.918 2452.94,-354.363 2502,-322 2537.02,-298.895 2559.08,-303.448 2578,-266 2642.25,-138.842 2404.58,-56.4481 2303.47,-27.7941"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2304.12,-24.3435 2293.55,-25.0323 2302.24,-31.0869 2304.12,-24.3435"/>
 </g>
 <!-- Node6&#45;&gt;Node15 -->
 <g id="edge101" class="edge"><title>Node6&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M2237.06,-537.373C2216.55,-530.435 2190.55,-518.85 2173,-501 2143.29,-470.785 2162.38,-445.462 2134,-414 2012.29,-279.089 1792,-371.701 1792,-190 1792,-190 1792,-190 1792,-132 1792,-97.4049 1783.6,-57.7448 1777.97,-35.0547"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1781.29,-33.9237 1775.41,-25.1136 1774.51,-35.6707 1781.29,-33.9237"/>
+<path fill="none" stroke="midnightblue" d="M2026.63,-487.841C1912.01,-482.609 1619.05,-467.964 1375,-445 988.036,-408.588 875.028,-421.921 519,-266 375.025,-202.947 292.103,-223.398 214,-87 184.109,-34.7985 292.572,-21.2424 348.565,-17.7274"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="348.895,-21.2145 358.686,-17.1652 348.507,-14.2253 348.895,-21.2145"/>
 </g>
-<!-- Node6&#45;&gt;Node21 -->
-<g id="edge102" class="edge"><title>Node6&#45;&gt;Node21</title>
-<path fill="none" stroke="midnightblue" d="M2219.74,-542.525C2164.38,-537.556 2072.39,-526.081 1997,-501 1929.9,-478.679 1763.76,-389.35 1566,-266 1521.85,-238.464 1508.92,-233.534 1470,-199 1453.11,-184.013 1436.19,-164.399 1425.03,-150.653"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1427.55,-148.205 1418.58,-142.574 1422.08,-152.573 1427.55,-148.205"/>
+<!-- Node6&#45;&gt;Node19 -->
+<g id="edge102" class="edge"><title>Node6&#45;&gt;Node19</title>
+<path fill="none" stroke="midnightblue" d="M2026.72,-486.742C1948.55,-481.108 1791.5,-467.897 1660,-445 1649.57,-443.184 928.453,-270.768 919,-266 877.59,-245.116 859.584,-240.56 839,-199 831.871,-184.606 831.736,-166.15 833.024,-152.584"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="836.513,-152.901 834.32,-142.535 829.57,-152.006 836.513,-152.901"/>
 </g>
 <!-- Node27 -->
 <g id="node27" class="node"><title>Node27</title>
 <g id="a_node27"><a xlink:href="reflection_8h.html" target="_top" xlink:title="Reflection and serialization of compiler IR/AST nodes. ">
-<polygon fill="white" stroke="black" points="2377.5,-481.5 2377.5,-500.5 2496.5,-500.5 2496.5,-481.5 2377.5,-481.5"/>
-<text text-anchor="middle" x="2437" y="-488.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/reflection.h</text>
+<polygon fill="white" stroke="black" points="1782.5,-425.5 1782.5,-444.5 1901.5,-444.5 1901.5,-425.5 1782.5,-425.5"/>
+<text text-anchor="middle" x="1842" y="-432.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/reflection.h</text>
 </a>
 </g>
 </g>
 <!-- Node6&#45;&gt;Node27 -->
 <g id="edge64" class="edge"><title>Node6&#45;&gt;Node27</title>
-<path fill="none" stroke="midnightblue" d="M2295.62,-537.444C2324.01,-528.32 2369.14,-513.813 2400.75,-503.651"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2402.06,-506.909 2410.5,-500.516 2399.91,-500.244 2402.06,-506.909"/>
+<path fill="none" stroke="midnightblue" d="M2038.92,-481.444C1998.27,-472.063 1932.97,-456.993 1888.82,-446.804"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1889.44,-443.355 1878.9,-444.516 1887.86,-450.175 1889.44,-443.355"/>
 </g>
 <!-- Node6&#45;&gt;Node28 -->
 <g id="edge93" class="edge"><title>Node6&#45;&gt;Node28</title>
-<path fill="none" stroke="midnightblue" d="M2318.19,-539.925C2372.63,-532.71 2462.76,-519.309 2539,-501 2600.24,-486.293 2669.14,-463.525 2713.94,-447.864"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2715.12,-451.157 2723.39,-444.537 2712.8,-444.554 2715.12,-451.157"/>
+<path fill="none" stroke="midnightblue" d="M2082.16,-481.319C2094.76,-463.579 2123.79,-422.682 2142.06,-396.951"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2145.09,-398.725 2148.03,-388.545 2139.39,-394.673 2145.09,-398.725"/>
 </g>
 <!-- Node6&#45;&gt;Node30 -->
 <g id="edge94" class="edge"><title>Node6&#45;&gt;Node30</title>
-<path fill="none" stroke="midnightblue" d="M2219.74,-544.93C2169.09,-542.024 2089.2,-532.308 2028,-501 2005.27,-489.369 1984.71,-468.535 1971.06,-452.521"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1973.64,-450.15 1964.58,-444.66 1968.24,-454.603 1973.64,-450.15"/>
+<path fill="none" stroke="midnightblue" d="M2069.54,-481.319C2056.27,-463.502 2025.61,-422.324 2006.47,-396.615"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2009.24,-394.476 2000.46,-388.545 2003.62,-398.656 2009.24,-394.476"/>
 </g>
 <!-- Node31 -->
 <g id="node31" class="node"><title>Node31</title>
 <g id="a_node31"><a xlink:href="repr__printer_8h.html" target="_top" xlink:title="Printer class to print repr string of each AST/IR nodes. ">
-<polygon fill="white" stroke="black" points="2182,-481.5 2182,-500.5 2312,-500.5 2312,-481.5 2182,-481.5"/>
-<text text-anchor="middle" x="2247" y="-488.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/repr_printer.h</text>
+<polygon fill="white" stroke="black" points="2364,-425.5 2364,-444.5 2494,-444.5 2494,-425.5 2364,-425.5"/>
+<text text-anchor="middle" x="2429" y="-432.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/repr_printer.h</text>
 </a>
 </g>
 </g>
 <!-- Node6&#45;&gt;Node31 -->
 <g id="edge90" class="edge"><title>Node6&#45;&gt;Node31</title>
-<path fill="none" stroke="midnightblue" d="M2265.37,-537.083C2262.39,-529.77 2258.07,-519.181 2254.38,-510.103"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2257.58,-508.691 2250.57,-500.751 2251.1,-511.333 2257.58,-508.691"/>
+<path fill="none" stroke="midnightblue" d="M2125.08,-482.492C2187.2,-472.99 2294.39,-456.592 2363.45,-446.027"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2364,-449.484 2373.36,-444.512 2362.94,-442.564 2364,-449.484"/>
 </g>
 <!-- Node7&#45;&gt;Node8 -->
 <g id="edge7" class="edge"><title>Node7&#45;&gt;Node8</title>
-<path fill="none" stroke="midnightblue" d="M1910.09,-358.444C1954.32,-349.004 2025.54,-333.802 2073.28,-323.611"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2074.05,-327.027 2083.1,-321.516 2072.59,-320.181 2074.05,-327.027"/>
+<path fill="none" stroke="midnightblue" d="M1538.17,-302.334C1549.42,-293.922 1566.13,-280.351 1578,-266 1592.99,-247.883 1605.88,-224.013 1613.77,-207.896"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1617.08,-209.098 1618.2,-198.563 1610.75,-206.096 1617.08,-209.098"/>
 </g>
 <!-- Node7&#45;&gt;Node10 -->
-<g id="edge58" class="edge"><title>Node7&#45;&gt;Node10</title>
-<path fill="none" stroke="midnightblue" d="M1929.59,-364.466C2026.24,-359.671 2212.46,-347.393 2273,-322 2322.38,-301.288 2443.05,-191.04 2487.35,-149.685"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2489.79,-152.194 2494.69,-142.802 2485,-147.085 2489.79,-152.194"/>
+<g id="edge26" class="edge"><title>Node7&#45;&gt;Node10</title>
+<path fill="none" stroke="midnightblue" d="M1553.86,-302.496C1594.28,-288.445 1667.58,-256.1 1697,-199 1707.83,-177.975 1684.16,-159.206 1662.8,-147.307"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1664.38,-144.183 1653.9,-142.641 1661.13,-150.383 1664.38,-144.183"/>
 </g>
 <!-- Node7&#45;&gt;Node11 -->
-<g id="edge59" class="edge"><title>Node7&#45;&gt;Node11</title>
-<path fill="none" stroke="midnightblue" d="M1929.67,-363.41C2013.67,-357.769 2171.34,-345.022 2304,-322 2324.01,-318.528 2639.11,-239.089 2659,-235 2754.33,-215.403 2791.55,-249.084 2875,-199 2901.91,-182.852 2906.33,-172.129 2918,-143 2923.88,-128.332 2925.43,-110.394 2925.63,-97.0811"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2929.12,-96.7349 2925.52,-86.7705 2922.12,-96.8051 2929.12,-96.7349"/>
+<g id="edge27" class="edge"><title>Node7&#45;&gt;Node11</title>
+<path fill="none" stroke="midnightblue" d="M1577.5,-302.484C1605.39,-295.965 1639.3,-284.783 1665,-266 1694.57,-244.386 1701.8,-233.876 1713,-199 1719.1,-180.023 1712.77,-131.991 1706,-123 1693.81,-106.807 1674.63,-96.3708 1655.97,-89.6764"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1656.89,-86.2961 1646.3,-86.506 1654.71,-92.9477 1656.89,-86.2961"/>
 </g>
 <!-- Node7&#45;&gt;Node13 -->
 <g id="edge62" class="edge"><title>Node7&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M1847.27,-358.481C1805.85,-342.599 1715.86,-306.394 1645,-266 1600.11,-240.414 1592.11,-228.942 1550,-199 1502.76,-165.406 1498.13,-143.747 1444,-123 1307.89,-70.8304 1260.46,-117.872 1118,-87 1090.12,-80.9575 1084.88,-73.0707 1057,-67 903.222,-33.5132 714.697,-21.497 640.343,-17.8657"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="640.373,-14.3633 630.219,-17.3892 640.044,-21.3555 640.373,-14.3633"/>
+<path fill="none" stroke="midnightblue" d="M1585.88,-308.82C1693.57,-304.379 1926.88,-292.385 2122,-266 2275.49,-245.244 2346.31,-299.696 2464,-199 2511.43,-158.416 2463.04,-105.726 2512,-67 2573.89,-18.0475 2822.67,-15.3663 2911.93,-16.0316"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2911.96,-19.532 2922,-16.1264 2912.03,-12.5323 2911.96,-19.532"/>
 </g>
 <!-- Node7&#45;&gt;Node15 -->
 <g id="edge63" class="edge"><title>Node7&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M1857.81,-358.423C1836.84,-342.847 1794.6,-307.64 1778,-266 1745.81,-185.269 1761,-77.854 1769.08,-35.1496"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1772.56,-35.5972 1771.08,-25.106 1765.69,-34.2292 1772.56,-35.5972"/>
+<path fill="none" stroke="midnightblue" d="M1466.08,-311.421C1356.68,-311.115 1117.72,-305.468 921,-266 751.506,-231.995 705.5,-222.513 552,-143 490.289,-111.034 426.711,-58.0369 397.102,-31.9613"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="399.158,-29.1059 389.361,-25.0724 394.505,-34.3351 399.158,-29.1059"/>
 </g>
 <!-- Node7&#45;&gt;Node16 -->
-<g id="edge60" class="edge"><title>Node7&#45;&gt;Node16</title>
-<path fill="none" stroke="midnightblue" d="M1881.95,-358.319C1907.12,-340.037 1966.14,-297.16 2001.28,-271.635"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2003.63,-274.254 2009.66,-265.545 1999.52,-268.591 2003.63,-274.254"/>
+<g id="edge61" class="edge"><title>Node7&#45;&gt;Node16</title>
+<path fill="none" stroke="midnightblue" d="M1585.77,-307.897C1693.28,-302.001 1926.31,-287.79 2122,-266 2452.61,-229.186 2848.78,-162.936 2975.73,-141.155"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2976.53,-144.569 2985.79,-139.425 2975.35,-137.67 2976.53,-144.569"/>
 </g>
-<!-- Node7&#45;&gt;Node26 -->
-<g id="edge61" class="edge"><title>Node7&#45;&gt;Node26</title>
-<path fill="none" stroke="midnightblue" d="M1929.75,-364.458C2026.49,-359.749 2223.22,-347.711 2388,-322 2485.99,-306.71 2599.12,-278.298 2658.23,-262.615"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2659.17,-265.986 2667.93,-260.026 2657.37,-259.223 2659.17,-265.986"/>
+<!-- Node7&#45;&gt;Node20 -->
+<g id="edge28" class="edge"><title>Node7&#45;&gt;Node20</title>
+<path fill="none" stroke="midnightblue" d="M1513.82,-302.475C1502.31,-294.417 1484.6,-282.023 1469.53,-271.474"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1471.23,-268.39 1461.03,-265.523 1467.22,-274.125 1471.23,-268.39"/>
 </g>
 <!-- Node9 -->
 <g id="node9" class="node"><title>Node9</title>
-<polygon fill="white" stroke="#bfbfbf" points="3452,-6 3452,-25 3538,-25 3538,-6 3452,-6"/>
-<text text-anchor="middle" x="3495" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00">dmlc/logging.h</text>
+<polygon fill="white" stroke="#bfbfbf" points="1558,-6 1558,-25 1644,-25 1644,-6 1558,-6"/>
+<text text-anchor="middle" x="1601" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00">dmlc/logging.h</text>
 </g>
 <!-- Node8&#45;&gt;Node9 -->
 <g id="edge8" class="edge"><title>Node8&#45;&gt;Node9</title>
-<path fill="none" stroke="midnightblue" d="M2183.1,-302.48C2363.2,-276.936 2887.19,-202.533 2905,-199 3003.97,-179.375 3027.7,-169.711 3125,-143 3209.89,-119.693 3231.71,-115.524 3315,-87 3368.84,-68.562 3430.32,-43.6206 3465.71,-28.8793"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3467.09,-32.0938 3474.97,-25.0059 3464.39,-25.636 3467.09,-32.0938"/>
+<path fill="none" stroke="midnightblue" d="M1603.22,-179.362C1588.35,-171.681 1567.99,-159.166 1555,-143 1538.25,-122.154 1537.98,-113.274 1533,-87 1531.35,-78.2664 1529.01,-74.9411 1533,-67 1541.18,-50.7276 1557.37,-38.3793 1571.89,-29.9673"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1573.96,-32.8314 1581.1,-25.0062 1570.64,-26.6693 1573.96,-32.8314"/>
 </g>
 <!-- Node8&#45;&gt;Node10 -->
 <g id="edge9" class="edge"><title>Node8&#45;&gt;Node10</title>
-<path fill="none" stroke="midnightblue" d="M2146.16,-302.388C2169.16,-293.695 2205.32,-279.639 2236,-266 2326.67,-225.691 2431.5,-171.907 2478.69,-147.302"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2480.35,-150.38 2487.59,-142.646 2477.11,-144.176 2480.35,-150.38"/>
+<path fill="none" stroke="midnightblue" d="M1623.98,-179.083C1625.57,-171.927 1627.86,-161.635 1629.85,-152.691"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1633.3,-153.272 1632.06,-142.751 1626.47,-151.754 1633.3,-153.272"/>
 </g>
 <!-- Node8&#45;&gt;Node11 -->
 <g id="edge18" class="edge"><title>Node8&#45;&gt;Node11</title>
-<path fill="none" stroke="midnightblue" d="M2152.04,-302.383C2206.96,-286.439 2330.05,-252.378 2436,-235 2526.91,-220.089 2770.39,-247.032 2849,-199 2887.68,-175.365 2909.87,-123.816 2919.39,-96.2485"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2922.75,-97.252 2922.53,-86.6594 2916.1,-95.0771 2922.75,-97.252"/>
+<path fill="none" stroke="midnightblue" d="M1602.09,-179.41C1587.78,-172.04 1569.54,-159.916 1561,-143 1552.11,-125.4 1567.07,-106.301 1581.16,-93.3902"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1583.82,-95.7144 1589.16,-86.5621 1579.28,-90.3884 1583.82,-95.7144"/>
 </g>
 <!-- Node8&#45;&gt;Node13 -->
-<g id="edge53" class="edge"><title>Node8&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M2056.86,-302.735C2007.04,-295.58 1937.4,-283.585 1878,-266 1719.24,-219.002 1693.63,-166.948 1534,-123 1366.02,-76.7533 1319.01,-87.5922 1146,-67 954.572,-44.2156 723.811,-25.4705 640.208,-18.9608"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="640.318,-15.459 630.078,-18.176 639.777,-22.4381 640.318,-15.459"/>
+<g id="edge21" class="edge"><title>Node8&#45;&gt;Node13</title>
+<path fill="none" stroke="midnightblue" d="M1688.15,-180.388C1757.88,-172.13 1870.88,-158.093 1968,-143 2155.45,-113.869 2200.02,-92.4934 2388,-67 2586.26,-40.1122 2826.29,-23.7517 2911.82,-18.4232"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2912.17,-21.9086 2921.94,-17.8001 2911.74,-14.9219 2912.17,-21.9086"/>
 </g>
 <!-- Node8&#45;&gt;Node14 -->
-<g id="edge55" class="edge"><title>Node8&#45;&gt;Node14</title>
-<path fill="none" stroke="midnightblue" d="M2133.08,-302.344C2153.73,-284.327 2201.81,-240.972 2236,-199 2280.23,-144.715 2263.31,-105.191 2322,-67 2365.43,-38.737 2514.6,-24.69 2589.85,-19.2662"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2590.22,-22.7484 2599.95,-18.5576 2589.73,-15.7656 2590.22,-22.7484"/>
+<g id="edge23" class="edge"><title>Node8&#45;&gt;Node14</title>
+<path fill="none" stroke="midnightblue" d="M1653.64,-179.495C1759.18,-151.124 2099.24,-59.7142 2218.33,-27.7008"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2219.42,-31.0321 2228.17,-25.056 2217.6,-24.272 2219.42,-31.0321"/>
 </g>
 <!-- Node8&#45;&gt;Node15 -->
-<g id="edge56" class="edge"><title>Node8&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M2125.87,-302.497C2132.69,-280.799 2147.92,-222.054 2129,-179 2114.19,-145.307 2096.83,-145.881 2068,-123 2033.43,-95.5623 2026.37,-84.8334 1986,-67 1924.63,-39.8887 1846.61,-26.154 1804.09,-20.2397"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1804.45,-16.757 1794.07,-18.9012 1803.52,-23.6953 1804.45,-16.757"/>
+<g id="edge24" class="edge"><title>Node8&#45;&gt;Node15</title>
+<path fill="none" stroke="midnightblue" d="M1603.73,-179.438C1572.28,-165.117 1505.55,-136.544 1446,-123 1278.85,-84.9854 1228.33,-128.434 1062,-87 1039.57,-81.4137 1036.46,-72.4293 1014,-67 897.537,-38.8525 522.896,-22.1358 411.516,-17.698"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="411.414,-14.1914 401.284,-17.2955 411.139,-21.186 411.414,-14.1914"/>
 </g>
 <!-- Node8&#45;&gt;Node16 -->
 <g id="edge19" class="edge"><title>Node8&#45;&gt;Node16</title>
-<path fill="none" stroke="midnightblue" d="M2109.53,-302.475C2096.56,-294.266 2076.49,-281.558 2059.62,-270.885"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2061.48,-267.914 2051.15,-265.523 2057.73,-273.829 2061.48,-267.914"/>
+<path fill="none" stroke="midnightblue" d="M1688.35,-185.432C1932.65,-175.975 2778.2,-143.244 2975.57,-135.604"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2975.95,-139.092 2985.8,-135.208 2975.68,-132.097 2975.95,-139.092"/>
 </g>
-<!-- Node19 -->
-<g id="node19" class="node"><title>Node19</title>
-<polygon fill="white" stroke="#bfbfbf" points="1899.5,-123.5 1899.5,-142.5 1956.5,-142.5 1956.5,-123.5 1899.5,-123.5"/>
-<text text-anchor="middle" x="1928" y="-130.5" font-family="Helvetica,sans-Serif" font-size="10.00">memory</text>
-</g>
-<!-- Node8&#45;&gt;Node19 -->
-<g id="edge52" class="edge"><title>Node8&#45;&gt;Node19</title>
-<path fill="none" stroke="midnightblue" d="M2081.57,-302.438C2048.67,-294.911 2001.89,-282.569 1963,-266 1908.93,-242.965 1878.19,-250.009 1849,-199 1835.8,-175.934 1865.02,-157.627 1891.58,-146.394"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1893.16,-149.531 1901.16,-142.581 1890.57,-143.027 1893.16,-149.531"/>
+<!-- Node17 -->
+<g id="node17" class="node"><title>Node17</title>
+<polygon fill="white" stroke="#bfbfbf" points="1380.5,-123.5 1380.5,-142.5 1437.5,-142.5 1437.5,-123.5 1380.5,-123.5"/>
+<text text-anchor="middle" x="1409" y="-130.5" font-family="Helvetica,sans-Serif" font-size="10.00">memory</text>
 </g>
-<!-- Node8&#45;&gt;Node20 -->
-<g id="edge54" class="edge"><title>Node8&#45;&gt;Node20</title>
-<path fill="none" stroke="midnightblue" d="M2056.66,-305.678C1964.11,-298.046 1791.07,-283.023 1644,-266 1362.34,-233.399 1294.01,-208.434 1012,-179 800.889,-156.966 548.9,-142.553 438.074,-136.813"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="437.963,-133.303 427.796,-136.285 437.603,-140.293 437.963,-133.303"/>
+<!-- Node8&#45;&gt;Node17 -->
+<g id="edge20" class="edge"><title>Node8&#45;&gt;Node17</title>
+<path fill="none" stroke="midnightblue" d="M1588.25,-179.444C1549.97,-169.738 1487.66,-153.943 1447.51,-143.764"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1448.36,-140.369 1437.81,-141.304 1446.64,-147.154 1448.36,-140.369"/>
 </g>
-<!-- Node8&#45;&gt;Node21 -->
-<g id="edge57" class="edge"><title>Node8&#45;&gt;Node21</title>
-<path fill="none" stroke="midnightblue" d="M2056.98,-308.56C1979.87,-304.495 1848.99,-293.803 1740,-266 1622.98,-236.146 1492.08,-174.209 1437.77,-147.14"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1439.05,-143.865 1428.54,-142.507 1435.9,-150.121 1439.05,-143.865"/>
+<!-- Node8&#45;&gt;Node18 -->
+<g id="edge22" class="edge"><title>Node8&#45;&gt;Node18</title>
+<path fill="none" stroke="midnightblue" d="M1555.79,-183.979C1529.14,-182.387 1498.11,-180.566 1470,-179 1166.68,-162.103 803.217,-143.749 665.06,-136.841"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="664.888,-133.328 654.726,-136.324 664.539,-140.319 664.888,-133.328"/>
 </g>
-<!-- Node8&#45;&gt;Node26 -->
-<g id="edge51" class="edge"><title>Node8&#45;&gt;Node26</title>
-<path fill="none" stroke="midnightblue" d="M2189.07,-304.175C2308.96,-291.79 2559.04,-265.957 2657.7,-255.766"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2658.28,-259.225 2667.87,-254.716 2657.56,-252.262 2658.28,-259.225"/>
+<!-- Node8&#45;&gt;Node19 -->
+<g id="edge25" class="edge"><title>Node8&#45;&gt;Node19</title>
+<path fill="none" stroke="midnightblue" d="M1555.67,-180.288C1551.05,-179.827 1546.46,-179.392 1542,-179 1283.81,-156.262 971.54,-140.433 869.8,-135.573"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="869.955,-132.076 859.801,-135.098 869.624,-139.069 869.955,-132.076"/>
 </g>
 <!-- Node10&#45;&gt;Node11 -->
 <g id="edge10" class="edge"><title>Node10&#45;&gt;Node11</title>
-<path fill="none" stroke="midnightblue" d="M2567.94,-123.799C2645.7,-113.825 2776.43,-97.0569 2856.28,-86.8141"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2856.77,-90.2805 2866.24,-85.5367 2855.88,-83.3374 2856.77,-90.2805"/>
+<path fill="none" stroke="midnightblue" d="M1628.55,-123.083C1623.99,-115.613 1617.33,-104.724 1611.71,-95.5199"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1614.55,-93.4588 1606.35,-86.7511 1608.58,-97.109 1614.55,-93.4588"/>
 </g>
 <!-- Node10&#45;&gt;Node14 -->
 <g id="edge16" class="edge"><title>Node10&#45;&gt;Node14</title>
-<path fill="none" stroke="midnightblue" d="M2513.77,-123.319C2535.6,-103.921 2588.61,-56.8311 2616.37,-32.1625"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2618.96,-34.5404 2624.12,-25.282 2614.32,-29.3074 2618.96,-34.5404"/>
+<path fill="none" stroke="midnightblue" d="M1641.11,-123.366C1653.67,-108.802 1681.39,-79.7008 1712,-67 1802.82,-29.3168 2101.84,-19.5842 2215.56,-17.2166"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2215.73,-20.7141 2225.66,-17.0158 2215.59,-13.7154 2215.73,-20.7141"/>
 </g>
 <!-- Node10&#45;&gt;Node15 -->
 <g id="edge17" class="edge"><title>Node10&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M2463.09,-123.488C2398.78,-110.282 2269.99,-84.5525 2160,-67 2028.17,-45.9606 1870.02,-27.3928 1804.16,-19.9551"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1804.36,-16.4564 1794.04,-18.8179 1803.58,-23.4126 1804.36,-16.4564"/>
+<path fill="none" stroke="midnightblue" d="M1570.18,-123.919C1464.59,-110.737 1246.84,-84.3386 1062,-67 811.339,-43.4867 508.001,-24.2776 411.237,-18.3751"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="411.433,-14.8806 401.239,-17.7679 411.008,-21.8678 411.433,-14.8806"/>
 </g>
 <!-- Node11&#45;&gt;Node9 -->
 <g id="edge11" class="edge"><title>Node11&#45;&gt;Node9</title>
-<path fill="none" stroke="midnightblue" d="M2983.59,-69.8843C3094.66,-58.2898 3334.32,-33.2729 3441.41,-22.0943"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3442.07,-25.544 3451.65,-21.0246 3441.35,-18.5819 3442.07,-25.544"/>
+<path fill="none" stroke="midnightblue" d="M1601,-67.4751C1601,-59.0803 1601,-45.9806 1601,-35.1631"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1604.5,-35.0091 1601,-25.0091 1597.5,-35.0091 1604.5,-35.0091"/>
 </g>
 <!-- Node11&#45;&gt;Node12 -->
 <g id="edge12" class="edge"><title>Node11&#45;&gt;Node12</title>
-<path fill="none" stroke="midnightblue" d="M2954.94,-67.4751C2986.16,-58.5882 3035.9,-44.4288 3075.04,-33.2859"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3076.08,-36.6274 3084.74,-30.523 3074.17,-29.8949 3076.08,-36.6274"/>
+<path fill="none" stroke="midnightblue" d="M1542.06,-68.3432C1459.01,-57.554 1307.6,-37.8832 1217.05,-26.1203"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1217.23,-22.614 1206.86,-24.7964 1216.33,-29.5557 1217.23,-22.614"/>
 </g>
 <!-- Node11&#45;&gt;Node13 -->
 <g id="edge13" class="edge"><title>Node11&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M2866.28,-74.492C2533.63,-65.9497 891.841,-23.789 640.347,-17.3307"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="640.148,-13.8245 630.062,-17.0665 639.969,-20.8222 640.148,-13.8245"/>
+<path fill="none" stroke="midnightblue" d="M1659.57,-73.4051C1890.75,-63.1628 2735.8,-25.7238 2911.77,-17.9281"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2912.09,-21.4172 2921.93,-17.4779 2911.78,-14.424 2912.09,-21.4172"/>
 </g>
 <!-- Node11&#45;&gt;Node14 -->
 <g id="edge14" class="edge"><title>Node11&#45;&gt;Node14</title>
-<path fill="none" stroke="midnightblue" d="M2883.31,-67.4751C2828.86,-56.3429 2733.95,-36.9374 2678.27,-25.5513"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2678.84,-22.0966 2668.34,-23.5224 2677.44,-28.9547 2678.84,-22.0966"/>
+<path fill="none" stroke="midnightblue" d="M1659.55,-68.5898C1664.44,-68.0297 1669.3,-67.492 1674,-67 1876.1,-45.8408 2118.09,-27.0624 2215.84,-19.749"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2216.23,-23.2298 2225.94,-18.9957 2215.71,-16.2492 2216.23,-23.2298"/>
 </g>
 <!-- Node11&#45;&gt;Node15 -->
 <g id="edge15" class="edge"><title>Node11&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M2866.29,-72.9676C2658.53,-62.2369 1962.2,-26.2719 1804.8,-18.1426"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1804.58,-14.6267 1794.42,-17.6061 1804.22,-21.6173 1804.58,-14.6267"/>
-</g>
-<!-- Node16&#45;&gt;Node9 -->
-<g id="edge20" class="edge"><title>Node16&#45;&gt;Node9</title>
-<path fill="none" stroke="midnightblue" d="M2085.76,-247.586C2246.33,-241.919 2701.71,-224.044 2849,-199 2971.8,-178.12 3339.96,-64.8561 3458.09,-28.0558"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3459.26,-31.3558 3467.77,-25.0371 3457.18,-24.6733 3459.26,-31.3558"/>
-</g>
-<!-- Node16&#45;&gt;Node11 -->
-<g id="edge42" class="edge"><title>Node16&#45;&gt;Node11</title>
-<path fill="none" stroke="midnightblue" d="M2085.51,-241.92C2135.85,-234.215 2211.08,-220.346 2274,-199 2283.18,-195.887 2421.66,-125.593 2431,-123 2509.13,-101.306 2739.63,-87.1781 2856.05,-81.2241"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2856.46,-84.7078 2866.27,-80.7073 2856.11,-77.7168 2856.46,-84.7078"/>
-</g>
-<!-- Node16&#45;&gt;Node12 -->
-<g id="edge21" class="edge"><title>Node16&#45;&gt;Node12</title>
-<path fill="none" stroke="midnightblue" d="M2061.99,-235.396C2124.45,-209.254 2264.77,-153.195 2388,-123 2630.11,-63.6763 2925.07,-33.6634 3060.1,-22.1931"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3060.65,-25.6591 3070.32,-21.3342 3060.06,-18.6837 3060.65,-25.6591"/>
-</g>
-<!-- Node16&#45;&gt;Node13 -->
-<g id="edge46" class="edge"><title>Node16&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M1976.86,-235.425C1940.85,-225.567 1891.89,-211.9 1849,-199 1665.27,-143.744 1626.56,-102.436 1438,-67 1280.85,-37.4669 774.182,-21.2316 640.558,-17.3942"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="640.284,-13.8851 630.189,-17.0999 640.085,-20.8823 640.284,-13.8851"/>
-</g>
-<!-- Node16&#45;&gt;Node14 -->
-<g id="edge48" class="edge"><title>Node16&#45;&gt;Node14</title>
-<path fill="none" stroke="midnightblue" d="M2054.42,-235.437C2069.93,-226.195 2089.66,-213.213 2105,-199 2159.58,-148.422 2143.17,-103.527 2208,-67 2272.57,-30.6176 2494.25,-20.2823 2589.7,-17.4842"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2589.99,-20.9776 2599.89,-17.2003 2589.8,-13.9803 2589.99,-20.9776"/>
-</g>
-<!-- Node16&#45;&gt;Node15 -->
-<g id="edge49" class="edge"><title>Node16&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M2055.49,-235.299C2076.87,-221.846 2101.5,-200.547 2089,-179 2027.42,-72.8951 1870.83,-33.5792 1804,-21.3146"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1804.52,-17.8537 1794.07,-19.5724 1803.31,-24.7483 1804.52,-17.8537"/>
+<path fill="none" stroke="midnightblue" d="M1542.11,-73.1302C1325.11,-62.5556 574.331,-25.9698 411.369,-18.0286"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="411.239,-14.5182 401.08,-17.5272 410.898,-21.5099 411.239,-14.5182"/>
+</g>
+<!-- Node20&#45;&gt;Node8 -->
+<g id="edge31" class="edge"><title>Node20&#45;&gt;Node8</title>
+<path fill="none" stroke="midnightblue" d="M1483.89,-235.399C1515.03,-225.163 1556.69,-211.47 1586.08,-201.808"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1587.52,-205.019 1595.93,-198.571 1585.33,-198.369 1587.52,-205.019"/>
+</g>
+<!-- Node20&#45;&gt;Node9 -->
+<g id="edge29" class="edge"><title>Node20&#45;&gt;Node9</title>
+<path fill="none" stroke="midnightblue" d="M1384.35,-237.109C1334.82,-225.703 1269.62,-209.073 1262,-199 1256.64,-191.912 1259.44,-187.513 1262,-179 1297.06,-62.3268 1461.23,-29.4034 1547.58,-20.128"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1548.11,-23.5923 1557.71,-19.11 1547.41,-16.6273 1548.11,-23.5923"/>
+</g>
+<!-- Node20&#45;&gt;Node11 -->
+<g id="edge52" class="edge"><title>Node20&#45;&gt;Node11</title>
+<path fill="none" stroke="midnightblue" d="M1384.26,-236.406C1336.96,-224.918 1276.18,-208.592 1269,-199 1263.67,-191.884 1264.85,-186.86 1269,-179 1289.61,-139.974 1310.16,-139.723 1351,-123 1409.54,-99.0306 1480.96,-87.7942 1532.46,-82.547"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1532.86,-86.024 1542.48,-81.5755 1532.19,-79.0567 1532.86,-86.024"/>
+</g>
+<!-- Node20&#45;&gt;Node12 -->
+<g id="edge30" class="edge"><title>Node20&#45;&gt;Node12</title>
+<path fill="none" stroke="midnightblue" d="M1384.27,-236.332C1333.52,-224.192 1265.55,-206.897 1255,-199 1199.41,-157.375 1165.31,-79.3209 1150.94,-40.1677"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1154.21,-38.9065 1147.56,-30.657 1147.61,-41.2517 1154.21,-38.9065"/>
+</g>
+<!-- Node20&#45;&gt;Node13 -->
+<g id="edge56" class="edge"><title>Node20&#45;&gt;Node13</title>
+<path fill="none" stroke="midnightblue" d="M1497.59,-248.806C1638.91,-246.51 2004.21,-236.972 2119,-199 2178.94,-179.174 2181.38,-148.786 2239,-123 2322.08,-85.8204 2346.58,-84.0138 2436,-67 2613.69,-33.1907 2830.93,-21.1926 2911.72,-17.7168"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2911.92,-21.2118 2921.77,-17.299 2911.63,-14.2178 2911.92,-21.2118"/>
+</g>
+<!-- Node20&#45;&gt;Node14 -->
+<g id="edge58" class="edge"><title>Node20&#45;&gt;Node14</title>
+<path fill="none" stroke="midnightblue" d="M1497.76,-247.344C1645.69,-241.404 2035.22,-223.602 2088,-199 2166.61,-162.362 2227.02,-72.2425 2249.96,-34.0553"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2253.16,-35.5325 2255.2,-25.1373 2247.12,-31.9871 2253.16,-35.5325"/>
+</g>
+<!-- Node20&#45;&gt;Node15 -->
+<g id="edge59" class="edge"><title>Node20&#45;&gt;Node15</title>
+<path fill="none" stroke="midnightblue" d="M1384.21,-242.736C1363.66,-240.293 1340.29,-237.517 1319,-235 1183.01,-218.919 1143.82,-239.46 1013,-199 995.622,-193.626 885.095,-129.217 868,-123 701.437,-62.4225 489.776,-30.6882 411.199,-20.3544"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="411.38,-16.8487 401.013,-19.0375 410.482,-23.7909 411.38,-16.8487"/>
+</g>
+<!-- Node20&#45;&gt;Node17 -->
+<g id="edge55" class="edge"><title>Node20&#45;&gt;Node17</title>
+<path fill="none" stroke="midnightblue" d="M1453.98,-235.438C1465.66,-221.001 1479.6,-198.02 1470,-179 1463.19,-165.52 1450.23,-155.083 1438,-147.67"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1439.34,-144.41 1428.91,-142.59 1435.93,-150.521 1439.34,-144.41"/>
+</g>
+<!-- Node20&#45;&gt;Node19 -->
+<g id="edge60" class="edge"><title>Node20&#45;&gt;Node19</title>
+<path fill="none" stroke="midnightblue" d="M1384.47,-241.648C1367.6,-239.395 1349.06,-237.007 1332,-235 1175.82,-216.629 1131.8,-240.078 980,-199 959.265,-193.389 955.572,-187.852 936,-179 911.851,-168.078 884.393,-155.727 864.367,-146.731"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="865.737,-143.509 855.18,-142.605 862.869,-149.895 865.737,-143.509"/>
 </g>
-<!-- Node17 -->
-<g id="node17" class="node"><title>Node17</title>
-<g id="a_node17"><a xlink:href="data__type_8h.html" target="_top" xlink:title="tvm/runtime/data_type.h">
-<polygon fill="white" stroke="black" points="3275,-123.5 3275,-142.5 3411,-142.5 3411,-123.5 3275,-123.5"/>
-<text text-anchor="middle" x="3343" y="-130.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/data_type.h</text>
+<!-- Node21 -->
+<g id="node21" class="node"><title>Node21</title>
+<g id="a_node21"><a xlink:href="data__type_8h.html" target="_top" xlink:title="tvm/runtime/data_type.h">
+<polygon fill="white" stroke="black" points="2248,-123.5 2248,-142.5 2384,-142.5 2384,-123.5 2248,-123.5"/>
+<text text-anchor="middle" x="2316" y="-130.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/data_type.h</text>
 </a>
 </g>
 </g>
-<!-- Node16&#45;&gt;Node17 -->
-<g id="edge22" class="edge"><title>Node16&#45;&gt;Node17</title>
-<path fill="none" stroke="midnightblue" d="M2085.53,-248.661C2230.89,-246.021 2629.36,-235.729 2959,-199 3079.18,-185.61 3218.85,-159.206 3292.13,-144.506"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3292.91,-147.92 3302.02,-142.512 3291.52,-141.058 3292.91,-147.92"/>
+<!-- Node20&#45;&gt;Node21 -->
+<g id="edge32" class="edge"><title>Node20&#45;&gt;Node21</title>
+<path fill="none" stroke="midnightblue" d="M1497.54,-248.895C1649.97,-246.761 2066.7,-237.475 2198,-199 2217.46,-193.298 2264.69,-165.499 2293.15,-148.154"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2295.32,-150.93 2302.01,-142.719 2291.66,-144.963 2295.32,-150.93"/>
 </g>
-<!-- Node18 -->
-<g id="node18" class="node"><title>Node18</title>
-<g id="a_node18"><a xlink:href="runtime_2module_8h.html" target="_top" xlink:title="Runtime container of the functions generated by TVM, This is used to support dynamically link...">
-<polygon fill="white" stroke="red" points="1956,-179.5 1956,-198.5 2080,-198.5 2080,-179.5 1956,-179.5"/>
-<text text-anchor="middle" x="2018" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/module.h</text>
+<!-- Node22 -->
+<g id="node22" class="node"><title>Node22</title>
+<g id="a_node22"><a xlink:href="runtime_2module_8h.html" target="_top" xlink:title="Runtime container of the functions generated by TVM, This is used to support dynamically link...">
+<polygon fill="white" stroke="red" points="1278,-179.5 1278,-198.5 1402,-198.5 1402,-179.5 1278,-179.5"/>
+<text text-anchor="middle" x="1340" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/module.h</text>
 </a>
 </g>
 </g>
-<!-- Node16&#45;&gt;Node18 -->
-<g id="edge27" class="edge"><title>Node16&#45;&gt;Node18</title>
-<path fill="none" stroke="midnightblue" d="M2020.55,-235.399C2018.07,-227.466 2016.05,-217.458 2015.16,-208.858"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2018.64,-208.48 2014.67,-198.658 2011.65,-208.813 2018.64,-208.48"/>
-</g>
-<!-- Node16&#45;&gt;Node19 -->
-<g id="edge45" class="edge"><title>Node16&#45;&gt;Node19</title>
-<path fill="none" stroke="midnightblue" d="M1994.46,-235.393C1977.95,-227.046 1959.17,-214.953 1947,-199 1936.76,-185.575 1932.03,-166.757 1929.85,-152.822"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1933.32,-152.37 1928.59,-142.889 1926.38,-153.249 1933.32,-152.37"/>
-</g>
-<!-- Node16&#45;&gt;Node21 -->
-<g id="edge50" class="edge"><title>Node16&#45;&gt;Node21</title>
-<path fill="none" stroke="midnightblue" d="M1972.38,-241.935C1907.03,-232.93 1796.4,-216.848 1702,-199 1608.6,-181.342 1499.45,-155.439 1445.59,-142.3"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1446.12,-138.827 1435.57,-139.849 1444.45,-145.626 1446.12,-138.827"/>
+<!-- Node20&#45;&gt;Node22 -->
+<g id="edge37" class="edge"><title>Node20&#45;&gt;Node22</title>
+<path fill="none" stroke="midnightblue" d="M1411.22,-235.399C1394.14,-226.04 1373.33,-213.792 1358.53,-204.377"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1360.05,-201.193 1349.77,-198.658 1356.23,-207.054 1360.05,-201.193"/>
 </g>
-<!-- Node22 -->
-<g id="node22" class="node"><title>Node22</title>
-<g id="a_node22"><a xlink:href="ndarray_8h.html" target="_top" xlink:title="A device&#45;independent managed NDArray abstraction. ">
-<polygon fill="white" stroke="red" points="2717.5,-179.5 2717.5,-198.5 2840.5,-198.5 2840.5,-179.5 2717.5,-179.5"/>
-<text text-anchor="middle" x="2779" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/ndarray.h</text>
+<!-- Node23 -->
+<g id="node23" class="node"><title>Node23</title>
+<g id="a_node23"><a xlink:href="ndarray_8h.html" target="_top" xlink:title="A device&#45;independent managed NDArray abstraction. ">
+<polygon fill="white" stroke="red" points="1022.5,-179.5 1022.5,-198.5 1145.5,-198.5 1145.5,-179.5 1022.5,-179.5"/>
+<text text-anchor="middle" x="1084" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/ndarray.h</text>
 </a>
 </g>
 </g>
-<!-- Node16&#45;&gt;Node22 -->
-<g id="edge36" class="edge"><title>Node16&#45;&gt;Node22</title>
-<path fill="none" stroke="midnightblue" d="M2085.87,-246.27C2200.97,-239.515 2470.01,-222.625 2707.25,-199.022"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2707.85,-202.479 2717.45,-198.001 2707.15,-195.514 2707.85,-202.479"/>
+<!-- Node20&#45;&gt;Node23 -->
+<g id="edge46" class="edge"><title>Node20&#45;&gt;Node23</title>
+<path fill="none" stroke="midnightblue" d="M1384.46,-237.713C1379.58,-236.767 1374.7,-235.85 1370,-235 1296.28,-221.679 1211.45,-208.615 1153.44,-200.025"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1153.69,-196.524 1143.29,-198.527 1152.67,-203.449 1153.69,-196.524"/>
 </g>
-<!-- Node16&#45;&gt;Node23 -->
-<g id="edge43" class="edge"><title>Node16&#45;&gt;Node23</title>
-<path fill="none" stroke="midnightblue" d="M1972.17,-246.301C1783.35,-235.672 1179.54,-201.683 1014.21,-192.376"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1014.14,-188.867 1003.96,-191.799 1013.75,-195.856 1014.14,-188.867"/>
+<!-- Node20&#45;&gt;Node24 -->
+<g id="edge53" class="edge"><title>Node20&#45;&gt;Node24</title>
+<path fill="none" stroke="midnightblue" d="M1384.48,-241.542C1367.61,-239.286 1349.07,-236.923 1332,-235 1159.02,-215.519 1114.3,-223.743 942,-199 940.54,-198.79 939.056,-198.565 937.559,-198.328"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="938.05,-194.861 927.602,-196.619 936.866,-201.76 938.05,-194.861"/>
 </g>
-<!-- Node16&#45;&gt;Node24 -->
-<g id="edge44" class="edge"><title>Node16&#45;&gt;Node24</title>
-<path fill="none" stroke="midnightblue" d="M2085.91,-247.347C2341.33,-237.686 3377.78,-198.481 3570.93,-191.175"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3571.11,-194.671 3580.97,-190.796 3570.84,-187.676 3571.11,-194.671"/>
+<!-- Node20&#45;&gt;Node25 -->
+<g id="edge54" class="edge"><title>Node20&#45;&gt;Node25</title>
+<path fill="none" stroke="midnightblue" d="M1497.61,-247.33C1750.03,-237.652 2768.83,-198.594 2961.48,-191.208"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2961.9,-194.695 2971.76,-190.814 2961.63,-187.7 2961.9,-194.695"/>
 </g>
-<!-- Node25 -->
-<g id="node25" class="node"><title>Node25</title>
-<polygon fill="white" stroke="#bfbfbf" points="1858.5,-179.5 1858.5,-198.5 1899.5,-198.5 1899.5,-179.5 1858.5,-179.5"/>
-<text text-anchor="middle" x="1879" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">tuple</text>
-</g>
-<!-- Node16&#45;&gt;Node25 -->
-<g id="edge47" class="edge"><title>Node16&#45;&gt;Node25</title>
-<path fill="none" stroke="midnightblue" d="M1993.45,-235.399C1967.72,-225.19 1933.31,-211.545 1908.97,-201.887"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1910.11,-198.576 1899.53,-198.142 1907.53,-205.082 1910.11,-198.576"/>
-</g>
-<!-- Node17&#45;&gt;Node9 -->
-<g id="edge23" class="edge"><title>Node17&#45;&gt;Node9</title>
-<path fill="none" stroke="midnightblue" d="M3411.25,-126.027C3463.75,-119.852 3530.08,-108.063 3547,-87 3562.25,-68.0154 3538.08,-45.198 3517.84,-30.77"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3519.77,-27.8509 3509.53,-25.1358 3515.84,-33.6447 3519.77,-27.8509"/>
-</g>
-<!-- Node17&#45;&gt;Node12 -->
-<g id="edge24" class="edge"><title>Node17&#45;&gt;Node12</title>
-<path fill="none" stroke="midnightblue" d="M3328.47,-123.409C3307.06,-110.798 3265.69,-86.6426 3230,-67 3210.47,-56.252 3188.48,-44.6468 3170.47,-35.275"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3171.95,-32.0951 3161.46,-30.594 3168.72,-38.3079 3171.95,-32.0951"/>
-</g>
-<!-- Node17&#45;&gt;Node13 -->
-<g id="edge25" class="edge"><title>Node17&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M3301.73,-123.488C3222.54,-107.297 3051.8,-73.1297 2992,-67 2747.65,-41.9536 907.328,-19.9432 640.274,-16.8668"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="640.123,-13.3649 630.084,-16.7498 640.043,-20.3645 640.123,-13.3649"/>
-</g>
-<!-- Node17&#45;&gt;Node14 -->
-<g id="edge26" class="edge"><title>Node17&#45;&gt;Node14</title>
-<path fill="none" stroke="midnightblue" d="M3319.83,-123.388C3280.83,-109.255 3199.31,-81.2866 3128,-67 2964.12,-34.1669 2765.14,-22.1009 2678.21,-18.178"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2678.32,-14.6795 2668.17,-17.7392 2678.01,-21.6728 2678.32,-14.6795"/>
-</g>
-<!-- Node18&#45;&gt;Node10 -->
-<g id="edge29" class="edge"><title>Node18&#45;&gt;Node10</title>
-<path fill="none" stroke="midnightblue" d="M2080.05,-181.106C2169.55,-171.161 2334.61,-152.821 2430.23,-142.197"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2430.84,-145.65 2440.4,-141.067 2430.07,-138.693 2430.84,-145.65"/>
-</g>
-<!-- Node18&#45;&gt;Node11 -->
-<g id="edge30" class="edge"><title>Node18&#45;&gt;Node11</title>
-<path fill="none" stroke="midnightblue" d="M2060.85,-179.457C2131.04,-165.737 2275.01,-138.741 2398,-123 2561.79,-102.037 2755.51,-88.3203 2856.29,-82.0136"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2856.58,-85.5027 2866.34,-81.39 2856.14,-78.5161 2856.58,-85.5027"/>
-</g>
-<!-- Node18&#45;&gt;Node12 -->
-<g id="edge28" class="edge"><title>Node18&#45;&gt;Node12</title>
-<path fill="none" stroke="midnightblue" d="M2049.62,-179.464C2097.13,-166.716 2189.81,-142.154 2269,-123 2379.25,-96.3339 2405.87,-84.12 2518,-67 2712.35,-37.3271 2944.04,-24.2605 3060.07,-19.2292"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3060.41,-22.7179 3070.26,-18.7954 3060.12,-15.7242 3060.41,-22.7179"/>
-</g>
-<!-- Node18&#45;&gt;Node13 -->
-<g id="edge32" class="edge"><title>Node18&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M2013.42,-179.307C2005.52,-165.185 1987.94,-137.394 1965,-123 1874.05,-65.9362 1836.33,-81.9248 1730,-67 1511.28,-36.2981 801.008,-20.3874 640.457,-17.1325"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="640.341,-13.6295 630.273,-16.9281 640.201,-20.6281 640.341,-13.6295"/>
-</g>
-<!-- Node18&#45;&gt;Node16 -->
-<g id="edge35" class="edge"><title>Node18&#45;&gt;Node16</title>
-<path fill="none" stroke="midnightblue" d="M2024.53,-198.658C2027.33,-205.655 2029.79,-215.857 2031.17,-225.289"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2027.71,-225.821 2032.23,-235.399 2034.67,-225.088 2027.71,-225.821"/>
-</g>
-<!-- Node18&#45;&gt;Node19 -->
-<g id="edge31" class="edge"><title>Node18&#45;&gt;Node19</title>
-<path fill="none" stroke="midnightblue" d="M2003.54,-179.324C1989.5,-170.9 1967.95,-157.971 1951.46,-148.074"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1952.8,-144.798 1942.42,-142.655 1949.2,-150.801 1952.8,-144.798"/>
-</g>
-<!-- Node18&#45;&gt;Node20 -->
-<g id="edge33" class="edge"><title>Node18&#45;&gt;Node20</title>
-<path fill="none" stroke="midnightblue" d="M1955.79,-182.341C1940.2,-181.079 1923.5,-179.862 1908,-179 1334.4,-147.104 638.248,-136.967 437.593,-134.603"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="437.62,-131.103 427.58,-134.487 437.538,-138.103 437.62,-131.103"/>
-</g>
-<!-- Node18&#45;&gt;Node21 -->
-<g id="edge34" class="edge"><title>Node18&#45;&gt;Node21</title>
-<path fill="none" stroke="midnightblue" d="M1956,-182.475C1829.22,-171.178 1544.07,-145.768 1445.94,-137.024"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1445.98,-133.514 1435.71,-136.112 1445.36,-140.486 1445.98,-133.514"/>
+<!-- Node26 -->
+<g id="node26" class="node"><title>Node26</title>
+<polygon fill="white" stroke="#bfbfbf" points="1420.5,-179.5 1420.5,-198.5 1461.5,-198.5 1461.5,-179.5 1420.5,-179.5"/>
+<text text-anchor="middle" x="1441" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">tuple</text>
+</g>
+<!-- Node20&#45;&gt;Node26 -->
+<g id="edge57" class="edge"><title>Node20&#45;&gt;Node26</title>
+<path fill="none" stroke="midnightblue" d="M1441,-235.399C1441,-227.466 1441,-217.458 1441,-208.858"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1444.5,-208.658 1441,-198.658 1437.5,-208.658 1444.5,-208.658"/>
+</g>
+<!-- Node21&#45;&gt;Node9 -->
+<g id="edge33" class="edge"><title>Node21&#45;&gt;Node9</title>
+<path fill="none" stroke="midnightblue" d="M2290.93,-123.464C2248.74,-109.442 2160.63,-81.6313 2084,-67 1929.66,-37.5292 1744.05,-24.2035 1654.5,-19.1348"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1654.5,-15.6296 1644.33,-18.5711 1654.12,-22.6189 1654.5,-15.6296"/>
+</g>
+<!-- Node21&#45;&gt;Node12 -->
+<g id="edge34" class="edge"><title>Node21&#45;&gt;Node12</title>
+<path fill="none" stroke="midnightblue" d="M2275.32,-123.481C2206.56,-109.419 2062.87,-81.4698 1940,-67 1675.03,-35.7946 1358.07,-22.9683 1217,-18.5226"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1216.85,-15.0163 1206.75,-18.2044 1216.63,-22.0129 1216.85,-15.0163"/>
+</g>
+<!-- Node21&#45;&gt;Node13 -->
+<g id="edge35" class="edge"><title>Node21&#45;&gt;Node13</title>
+<path fill="none" stroke="midnightblue" d="M2327.89,-123.444C2348.66,-108.997 2393.42,-80.0678 2436,-67 2525.73,-39.4632 2814.74,-22.923 2911.84,-18.0332"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2912.11,-21.5239 2921.93,-17.5324 2911.77,-14.5325 2912.11,-21.5239"/>
+</g>
+<!-- Node21&#45;&gt;Node14 -->
+<g id="edge36" class="edge"><title>Node21&#45;&gt;Node14</title>
+<path fill="none" stroke="midnightblue" d="M2308.56,-123.193C2301.47,-114.464 2290.9,-100.483 2284,-87 2275.36,-70.1249 2268.75,-49.453 2264.67,-34.8695"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2268.01,-33.8283 2262.05,-25.0678 2261.25,-35.632 2268.01,-33.8283"/>
+</g>
+<!-- Node22&#45;&gt;Node10 -->
+<g id="edge39" class="edge"><title>Node22&#45;&gt;Node10</title>
+<path fill="none" stroke="midnightblue" d="M1386.59,-179.444C1438.41,-169.925 1522.13,-154.547 1577.62,-144.356"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1578.43,-147.765 1587.63,-142.516 1577.16,-140.881 1578.43,-147.765"/>
 </g>
 <!-- Node22&#45;&gt;Node11 -->
-<g id="edge39" class="edge"><title>Node22&#45;&gt;Node11</title>
-<path fill="none" stroke="midnightblue" d="M2790.46,-179.368C2815.3,-160.653 2874.36,-116.151 2905.31,-92.8324"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2907.72,-95.4044 2913.6,-86.5914 2903.5,-89.8135 2907.72,-95.4044"/>
+<g id="edge40" class="edge"><title>Node22&#45;&gt;Node11</title>
+<path fill="none" stroke="midnightblue" d="M1341.56,-179.274C1344.58,-165.105 1352.62,-137.248 1371,-123 1395.72,-103.833 1473.73,-91.456 1532.08,-84.6274"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1532.83,-88.0655 1542.37,-83.4572 1532.04,-81.1104 1532.83,-88.0655"/>
 </g>
 <!-- Node22&#45;&gt;Node12 -->
-<g id="edge37" class="edge"><title>Node22&#45;&gt;Node12</title>
-<path fill="none" stroke="midnightblue" d="M2781.87,-179.23C2789.77,-156.527 2814.2,-95.6137 2857,-67 2889.54,-45.2496 2989.74,-30.951 3060.24,-23.2918"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3060.84,-26.7478 3070.41,-22.2098 3060.1,-19.7871 3060.84,-26.7478"/>
+<g id="edge38" class="edge"><title>Node22&#45;&gt;Node12</title>
+<path fill="none" stroke="midnightblue" d="M1330.23,-179.495C1300.47,-153.589 1210.34,-75.1216 1166.9,-37.3093"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1168.96,-34.4563 1159.12,-30.53 1164.36,-39.7359 1168.96,-34.4563"/>
 </g>
-<!-- Node22&#45;&gt;Node15 -->
-<g id="edge40" class="edge"><title>Node22&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M2757.47,-179.406C2724.77,-166.479 2660.51,-141.566 2605,-123 2521.91,-95.2096 2502.14,-82.9619 2416,-67 2183.8,-23.974 1897.79,-17.5661 1804.22,-16.6437"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1804.05,-13.1422 1794.02,-16.558 1803.99,-20.142 1804.05,-13.1422"/>
+<!-- Node22&#45;&gt;Node13 -->
+<g id="edge42" class="edge"><title>Node22&#45;&gt;Node13</title>
+<path fill="none" stroke="midnightblue" d="M1402.34,-180.082C1405.26,-179.715 1408.16,-179.353 1411,-179 1542.07,-162.695 1575.01,-159.929 1706,-143 1953.79,-110.978 2014.52,-93.1398 2263,-67 2512.16,-40.7882 2814.02,-23.4389 2911.79,-18.1821"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2912.11,-21.67 2921.91,-17.642 2911.74,-14.68 2912.11,-21.67"/>
 </g>
 <!-- Node22&#45;&gt;Node17 -->
-<g id="edge38" class="edge"><title>Node22&#45;&gt;Node17</title>
-<path fill="none" stroke="midnightblue" d="M2840.7,-182.092C2943.91,-172.21 3151.39,-152.346 3264.72,-141.495"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3265.1,-144.975 3274.72,-140.537 3264.43,-138.007 3265.1,-144.975"/>
-</g>
-<!-- Node22&#45;&gt;Node21 -->
-<g id="edge41" class="edge"><title>Node22&#45;&gt;Node21</title>
-<path fill="none" stroke="midnightblue" d="M2717.46,-179.85C2714.26,-179.536 2711.1,-179.249 2708,-179 2452.07,-158.379 1623.38,-138.781 1445.73,-134.753"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1445.74,-131.252 1435.67,-134.525 1445.58,-138.25 1445.74,-131.252"/>
+<g id="edge41" class="edge"><title>Node22&#45;&gt;Node17</title>
+<path fill="none" stroke="midnightblue" d="M1351.09,-179.324C1361.49,-171.185 1377.26,-158.839 1389.72,-149.087"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1391.99,-151.753 1397.71,-142.834 1387.68,-146.241 1391.99,-151.753"/>
+</g>
+<!-- Node22&#45;&gt;Node18 -->
+<g id="edge43" class="edge"><title>Node22&#45;&gt;Node18</title>
+<path fill="none" stroke="midnightblue" d="M1277.91,-183.419C1137.94,-173.094 799.576,-148.133 664.789,-138.189"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="664.907,-134.689 654.676,-137.443 664.392,-141.67 664.907,-134.689"/>
+</g>
+<!-- Node22&#45;&gt;Node19 -->
+<g id="edge44" class="edge"><title>Node22&#45;&gt;Node19</title>
+<path fill="none" stroke="midnightblue" d="M1277.95,-181.351C1170.46,-169.835 953.134,-146.55 869.684,-137.609"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="870.047,-134.128 859.731,-136.543 869.301,-141.088 870.047,-134.128"/>
+</g>
+<!-- Node22&#45;&gt;Node20 -->
+<g id="edge45" class="edge"><title>Node22&#45;&gt;Node20</title>
+<path fill="none" stroke="midnightblue" d="M1359.63,-198.658C1375.31,-206.859 1397.19,-219.462 1414.39,-230.069"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1412.57,-233.059 1422.9,-235.399 1416.29,-227.126 1412.57,-233.059"/>
+</g>
+<!-- Node23&#45;&gt;Node11 -->
+<g id="edge49" class="edge"><title>Node23&#45;&gt;Node11</title>
+<path fill="none" stroke="midnightblue" d="M1108.31,-179.428C1147.98,-165.729 1229.3,-138.835 1300,-123 1378.88,-105.332 1470.97,-92.7102 1532.32,-85.4131"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1532.75,-88.8869 1542.27,-84.244 1531.93,-81.9347 1532.75,-88.8869"/>
+</g>
+<!-- Node23&#45;&gt;Node12 -->
+<g id="edge47" class="edge"><title>Node23&#45;&gt;Node12</title>
+<path fill="none" stroke="midnightblue" d="M1087.01,-179.26C1095.74,-153.866 1121.35,-79.4442 1134.69,-40.6497"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1138.16,-41.3175 1138.11,-30.7228 1131.54,-39.0402 1138.16,-41.3175"/>
+</g>
+<!-- Node23&#45;&gt;Node15 -->
+<g id="edge50" class="edge"><title>Node23&#45;&gt;Node15</title>
+<path fill="none" stroke="midnightblue" d="M1080.04,-179.274C1069.01,-156.13 1035.46,-93.1665 986,-67 934.927,-39.9817 528.057,-22.2434 411.25,-17.6712"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="411.306,-14.1709 401.178,-17.2816 411.036,-21.1656 411.306,-14.1709"/>
+</g>
+<!-- Node23&#45;&gt;Node19 -->
+<g id="edge51" class="edge"><title>Node23&#45;&gt;Node19</title>
+<path fill="none" stroke="midnightblue" d="M1044.7,-179.444C996.427,-168.932 915.338,-151.275 869.751,-141.349"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="870.292,-137.885 859.777,-139.177 868.803,-144.725 870.292,-137.885"/>
+</g>
+<!-- Node23&#45;&gt;Node21 -->
+<g id="edge48" class="edge"><title>Node23&#45;&gt;Node21</title>
+<path fill="none" stroke="midnightblue" d="M1145.66,-184.913C1181.63,-183.134 1227.88,-180.884 1269,-179 1630.97,-162.417 2063.41,-144.401 2237.6,-137.218"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2237.86,-140.71 2247.7,-136.802 2237.57,-133.716 2237.86,-140.71"/>
 </g>
 <!-- Node27&#45;&gt;Node10 -->
 <g id="edge83" class="edge"><title>Node27&#45;&gt;Node10</title>
-<path fill="none" stroke="midnightblue" d="M2458.26,-481.43C2494.41,-465.284 2564,-426.71 2564,-369 2564,-369 2564,-369 2564,-311 2564,-249.809 2531.44,-182.717 2514.29,-151.626"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2517.3,-149.83 2509.32,-142.85 2511.2,-153.277 2517.3,-149.83"/>
+<path fill="none" stroke="midnightblue" d="M1840.53,-425.224C1837.32,-405.324 1830,-355.22 1830,-313 1830,-313 1830,-313 1830,-249.5 1830,-187.743 1756.88,-158.338 1699.96,-144.804"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1700.43,-141.321 1689.9,-142.534 1698.89,-148.15 1700.43,-141.321"/>
 </g>
 <!-- Node27&#45;&gt;Node11 -->
 <g id="edge85" class="edge"><title>Node27&#45;&gt;Node11</title>
-<path fill="none" stroke="midnightblue" d="M2482.37,-481.478C2528.71,-472.318 2597.15,-457.402 2621,-445 2768.27,-368.43 2796.07,-326.792 2902,-199 2920.44,-176.758 2927.4,-170.871 2935,-143 2939.22,-127.51 2935.79,-109.424 2931.84,-96.2684"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2935.07,-94.8958 2928.55,-86.5424 2928.44,-97.1366 2935.07,-94.8958"/>
+<path fill="none" stroke="midnightblue" d="M1845.19,-425.332C1852.13,-405.653 1868,-355.973 1868,-313 1868,-313 1868,-313 1868,-249.5 1868,-151.362 1738.73,-106.762 1660.08,-88.7099"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1660.8,-85.285 1650.28,-86.5372 1659.29,-92.1191 1660.8,-85.285"/>
 </g>
 <!-- Node27&#45;&gt;Node12 -->
 <g id="edge81" class="edge"><title>Node27&#45;&gt;Node12</title>
-<path fill="none" stroke="midnightblue" d="M2496.54,-490.909C2580.1,-490.581 2736.04,-484.073 2862,-445 3131.33,-361.455 3275.66,-385.249 3420,-143 3424.55,-135.364 3425.07,-130.3 3420,-123 3372.49,-54.6045 3275.5,-30.0485 3207.71,-21.282"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3207.85,-17.7746 3197.51,-20.053 3207.02,-24.7243 3207.85,-17.7746"/>
+<path fill="none" stroke="midnightblue" d="M1782.29,-432.567C1631.25,-426.986 1224.31,-399.666 919,-266 873.645,-246.143 861.416,-237.268 830,-199 807.255,-171.294 781.777,-151.888 803,-123 834.725,-79.8171 979.238,-46.3046 1069.34,-29.1521"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1070.06,-32.5794 1079.24,-27.2925 1068.76,-25.6998 1070.06,-32.5794"/>
 </g>
 <!-- Node27&#45;&gt;Node13 -->
 <g id="edge87" class="edge"><title>Node27&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M2377.42,-484.913C2359.31,-483.492 2339.35,-482.051 2321,-481 2105.21,-468.638 1560.78,-488.211 1349,-445 1311.23,-437.294 1304.02,-427.738 1268,-414 1160.49,-372.991 1119.79,-388.664 1026,-322 905.406,-236.281 937.541,-145.295 812,-67 757.917,-33.2707 682.649,-22.0588 640.295,-18.3393"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="640.514,-14.8458 630.269,-17.5459 639.962,-21.824 640.514,-14.8458"/>
+<path fill="none" stroke="midnightblue" d="M1901.85,-431.675C1983.59,-427.568 2134.37,-416.667 2260,-389 2464.84,-343.889 2521.48,-321.144 2692,-199 2765.01,-146.701 2770.46,-117.099 2845,-67 2867.16,-52.1083 2894.28,-38.5623 2914.53,-29.2573"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2916.2,-32.3469 2923.87,-25.0427 2913.32,-25.9667 2916.2,-32.3469"/>
 </g>
 <!-- Node27&#45;&gt;Node14 -->
 <g id="edge88" class="edge"><title>Node27&#45;&gt;Node14</title>
-<path fill="none" stroke="midnightblue" d="M2440.59,-481.377C2463.85,-425.472 2593.36,-114.184 2626.35,-34.8846"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2629.73,-35.8627 2630.34,-25.2855 2623.27,-33.1738 2629.73,-35.8627"/>
+<path fill="none" stroke="midnightblue" d="M1901.61,-432.674C1994.59,-429.661 2169,-419.943 2222,-389 2336.99,-321.86 2354.77,-270.548 2393,-143 2395.55,-134.485 2396.85,-131.012 2393,-123 2381.13,-98.2783 2316.67,-53.4938 2282.04,-30.6814"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2283.82,-27.6604 2273.53,-25.1221 2279.99,-33.521 2283.82,-27.6604"/>
 </g>
-<!-- Node27&#45;&gt;Node16 -->
-<g id="edge86" class="edge"><title>Node27&#45;&gt;Node16</title>
-<path fill="none" stroke="midnightblue" d="M2438.21,-481.052C2439.77,-465.755 2440.75,-434.268 2426,-414 2348.08,-306.904 2186.84,-270.184 2095.64,-257.744"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2096.06,-254.269 2085.69,-256.445 2095.15,-261.21 2096.06,-254.269"/>
+<!-- Node27&#45;&gt;Node19 -->
+<g id="edge89" class="edge"><title>Node27&#45;&gt;Node19</title>
+<path fill="none" stroke="midnightblue" d="M1812.79,-425.361C1787.74,-417.435 1751.04,-404.578 1721,-389 1660.26,-357.507 1658.28,-325.435 1594,-302 1438.22,-245.207 978.379,-309.772 855,-199 842.033,-187.358 837.712,-167.408 836.372,-152.673"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="839.865,-152.443 835.835,-142.645 832.875,-152.818 839.865,-152.443"/>
 </g>
-<!-- Node27&#45;&gt;Node17 -->
-<g id="edge82" class="edge"><title>Node27&#45;&gt;Node17</title>
-<path fill="none" stroke="midnightblue" d="M2496.61,-486.709C2590.26,-480.934 2767.24,-467.416 2826,-445 2848.35,-436.473 2849.8,-426.817 2870,-414 3033.19,-310.443 3084.1,-301.435 3248,-199 3274.48,-182.45 3304.03,-161.888 3323.03,-148.377"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3325.11,-151.192 3331.21,-142.532 3321.04,-145.496 3325.11,-151.192"/>
+<!-- Node27&#45;&gt;Node20 -->
+<g id="edge86" class="edge"><title>Node27&#45;&gt;Node20</title>
+<path fill="none" stroke="midnightblue" d="M1834.54,-425.228C1813.64,-401.262 1751.64,-334.324 1685,-302 1628.92,-274.801 1558.68,-262.222 1507.98,-256.421"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1508.11,-252.915 1497.79,-255.316 1507.36,-259.874 1508.11,-252.915"/>
 </g>
 <!-- Node27&#45;&gt;Node21 -->
-<g id="edge89" class="edge"><title>Node27&#45;&gt;Node21</title>
-<path fill="none" stroke="midnightblue" d="M2403.99,-481.497C2273.22,-447.683 1791.49,-321.891 1644,-266 1579.87,-241.698 1564.19,-233.645 1505,-199 1478.41,-183.436 1449.6,-162.627 1431.2,-148.792"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1433.15,-145.873 1423.06,-142.614 1428.91,-151.448 1433.15,-145.873"/>
+<g id="edge82" class="edge"><title>Node27&#45;&gt;Node21</title>
+<path fill="none" stroke="midnightblue" d="M1850.08,-425.209C1864.23,-410.15 1894.87,-379.011 1925,-358 2051.36,-269.877 2103.34,-282.192 2233,-199 2256.87,-183.682 2282.26,-163.087 2298.58,-149.22"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2300.93,-151.817 2306.23,-142.645 2296.37,-146.508 2300.93,-151.817"/>
 </g>
-<!-- Node27&#45;&gt;Node22 -->
-<g id="edge84" class="edge"><title>Node27&#45;&gt;Node22</title>
-<path fill="none" stroke="midnightblue" d="M2491.93,-481.485C2552.05,-468.68 2640,-438.134 2640,-369 2640,-369 2640,-369 2640,-311 2640,-276.183 2635.82,-260.98 2659,-235 2673.71,-218.518 2695.05,-208.051 2715.68,-201.414"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2716.8,-204.733 2725.39,-198.54 2714.81,-198.021 2716.8,-204.733"/>
+<!-- Node27&#45;&gt;Node23 -->
+<g id="edge84" class="edge"><title>Node27&#45;&gt;Node23</title>
+<path fill="none" stroke="midnightblue" d="M1826.21,-425.451C1810.27,-416.693 1785.07,-402.487 1764,-389 1707.61,-352.898 1703.3,-326.53 1641,-302 1529.99,-258.296 1492.04,-289.115 1375,-266 1283.13,-247.856 1177.17,-217.836 1121.94,-201.483"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1122.82,-198.092 1112.24,-198.595 1120.82,-204.802 1122.82,-198.092"/>
 </g>
 <!-- Node27&#45;&gt;Node28 -->
 <g id="edge65" class="edge"><title>Node27&#45;&gt;Node28</title>
-<path fill="none" stroke="midnightblue" d="M2487.88,-481.477C2539.41,-472.738 2621.36,-458.546 2692,-445 2693.45,-444.722 2694.91,-444.439 2696.39,-444.152"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2697.11,-447.576 2706.25,-442.204 2695.76,-440.709 2697.11,-447.576"/>
+<path fill="none" stroke="midnightblue" d="M1887.28,-425.475C1941.03,-415.354 2031.1,-398.395 2092.46,-386.841"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2093.25,-390.253 2102.43,-384.963 2091.95,-383.374 2093.25,-390.253"/>
 </g>
 <!-- Node27&#45;&gt;Node30 -->
 <g id="edge75" class="edge"><title>Node27&#45;&gt;Node30</title>
-<path fill="none" stroke="midnightblue" d="M2377.38,-483.351C2302.52,-474.906 2170.15,-459.663 2057,-445 2044.97,-443.441 2032.16,-441.701 2019.8,-439.983"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2019.95,-436.47 2009.56,-438.55 2018.98,-443.403 2019.95,-436.47"/>
+<path fill="none" stroke="midnightblue" d="M1863.2,-425.475C1884.65,-416.852 1918.45,-403.264 1945.76,-392.285"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1947.15,-395.501 1955.12,-388.523 1944.54,-389.006 1947.15,-395.501"/>
 </g>
 <!-- Node28&#45;&gt;Node7 -->
 <g id="edge66" class="edge"><title>Node28&#45;&gt;Node7</title>
-<path fill="none" stroke="midnightblue" d="M2706.2,-424.778C2550.43,-414.388 2111.11,-385.083 1939.71,-373.65"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1939.76,-370.146 1929.55,-372.972 1939.29,-377.13 1939.76,-370.146"/>
+<path fill="none" stroke="midnightblue" d="M2102.48,-364.199C2086.82,-362.01 2069.76,-359.769 2054,-358 1890.26,-339.621 1697.2,-324.933 1595.98,-317.767"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1596.11,-314.267 1585.89,-317.055 1595.61,-321.25 1596.11,-314.267"/>
 </g>
 <!-- Node28&#45;&gt;Node13 -->
 <g id="edge74" class="edge"><title>Node28&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M2706.25,-421.452C2585.73,-405.94 2292.1,-366.647 2048,-322 1932.58,-300.889 1901.32,-303.105 1790,-266 1717.65,-241.882 1551.53,-143.261 1478,-123 1334.91,-83.5708 1289.15,-126.205 1146,-87 1125.28,-81.3259 1122.74,-72.6105 1102,-67 932.708,-21.1932 720.524,-16.2981 640.521,-16.2192"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="640.122,-12.7197 630.127,-16.2362 640.133,-19.7197 640.122,-12.7197"/>
+<path fill="none" stroke="midnightblue" d="M2213.76,-369.256C2269.49,-364.369 2356.65,-352.194 2426,-322 2464.47,-305.251 2469.34,-292.343 2502,-266 2537.05,-237.728 2545.66,-230.333 2578,-199 2635.81,-142.99 2631.8,-106.378 2702,-67 2769.86,-28.936 2862.97,-19.4575 2911.54,-17.1671"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2911.91,-20.6552 2921.76,-16.7615 2911.63,-13.6607 2911.91,-20.6552"/>
 </g>
-<!-- Node28&#45;&gt;Node17 -->
-<g id="edge73" class="edge"><title>Node28&#45;&gt;Node17</title>
-<path fill="none" stroke="midnightblue" d="M2789.63,-414.494C2888.18,-364.541 3221.61,-195.528 3317.2,-147.08"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3318.85,-150.168 3326.18,-142.525 3315.68,-143.924 3318.85,-150.168"/>
+<!-- Node28&#45;&gt;Node21 -->
+<g id="edge73" class="edge"><title>Node28&#45;&gt;Node21</title>
+<path fill="none" stroke="midnightblue" d="M2177.04,-358.364C2211.29,-331.656 2282.49,-270.041 2312,-199 2318.04,-184.464 2318.69,-166.515 2318.03,-153.163"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2321.49,-152.51 2317.22,-142.816 2314.51,-153.06 2321.49,-152.51"/>
 </g>
 <!-- Node29 -->
 <g id="node29" class="node"><title>Node29</title>
 <g id="a_node29"><a xlink:href="functor_8h.html" target="_top" xlink:title="Defines the Functor data structures. ">
-<polygon fill="white" stroke="black" points="2592.5,-179.5 2592.5,-198.5 2699.5,-198.5 2699.5,-179.5 2592.5,-179.5"/>
-<text text-anchor="middle" x="2646" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/functor.h</text>
+<polygon fill="white" stroke="black" points="1972.5,-179.5 1972.5,-198.5 2079.5,-198.5 2079.5,-179.5 1972.5,-179.5"/>
+<text text-anchor="middle" x="2026" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/functor.h</text>
 </a>
 </g>
 </g>
 <!-- Node28&#45;&gt;Node29 -->
 <g id="edge67" class="edge"><title>Node28&#45;&gt;Node29</title>
-<path fill="none" stroke="midnightblue" d="M2764.54,-414.497C2769.92,-380.267 2778.96,-291.062 2739,-235 2727.84,-219.348 2709.73,-208.915 2692.44,-202.074"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2693.57,-198.758 2682.97,-198.633 2691.18,-205.338 2693.57,-198.758"/>
+<path fill="none" stroke="midnightblue" d="M2147.86,-358.483C2124.03,-325.536 2064.51,-243.25 2038.5,-207.283"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2041.08,-204.87 2032.38,-198.819 2035.4,-208.973 2041.08,-204.87"/>
 </g>
 <!-- Node29&#45;&gt;Node9 -->
 <g id="edge68" class="edge"><title>Node29&#45;&gt;Node9</title>
-<path fill="none" stroke="midnightblue" d="M2657.04,-179.189C2687.02,-155.833 2773.36,-92.3922 2857,-67 2912.23,-50.2324 3298.17,-27.4122 3441.54,-19.4133"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3442.05,-22.8905 3451.84,-18.841 3441.66,-15.9013 3442.05,-22.8905"/>
+<path fill="none" stroke="midnightblue" d="M2024.92,-179.344C2022.95,-166.225 2017.83,-140.941 2006,-123 1984.83,-90.8817 1975.04,-82.8879 1940,-67 1845.8,-24.282 1723.23,-16.2926 1654.25,-15.5651"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1654.08,-12.0641 1644.06,-15.5067 1654.04,-19.064 1654.08,-12.0641"/>
 </g>
 <!-- Node29&#45;&gt;Node11 -->
 <g id="edge69" class="edge"><title>Node29&#45;&gt;Node11</title>
-<path fill="none" stroke="midnightblue" d="M2667.89,-179.368C2717.09,-159.97 2836.56,-112.87 2893.63,-90.3673"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2895.19,-93.5154 2903.21,-86.5914 2892.62,-87.0033 2895.19,-93.5154"/>
+<path fill="none" stroke="midnightblue" d="M2011.72,-179.292C1987.84,-165.149 1937.91,-137.329 1892,-123 1817.96,-99.8913 1729.47,-88.3677 1669.66,-82.814"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1669.85,-79.317 1659.58,-81.909 1669.22,-86.289 1669.85,-79.317"/>
 </g>
 <!-- Node29&#45;&gt;Node14 -->
 <g id="edge70" class="edge"><title>Node29&#45;&gt;Node14</title>
-<path fill="none" stroke="midnightblue" d="M2647.03,-179.439C2649.21,-159.573 2653.69,-108.844 2648,-67 2646.52,-56.1271 2643.33,-44.2901 2640.36,-34.8109"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2643.68,-33.6855 2637.22,-25.2874 2637.03,-35.8806 2643.68,-33.6855"/>
+<path fill="none" stroke="midnightblue" d="M2053.38,-179.383C2073.46,-172.063 2100.51,-160.015 2120,-143 2150.46,-116.41 2140.42,-94.5635 2170,-67 2187.3,-50.8782 2210.69,-37.9563 2229.28,-29.2203"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2230.85,-32.3533 2238.51,-25.0387 2227.96,-25.977 2230.85,-32.3533"/>
 </g>
 <!-- Node29&#45;&gt;Node15 -->
 <g id="edge71" class="edge"><title>Node29&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M2639.38,-179.116C2628.11,-164.721 2603.71,-136.546 2576,-123 2435.75,-54.4468 1934.84,-24.6994 1804.29,-18.0084"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1804.34,-14.5065 1794.18,-17.4984 1803.99,-21.4976 1804.34,-14.5065"/>
+<path fill="none" stroke="midnightblue" d="M2016.24,-179.363C1999.83,-165.321 1965.16,-137.643 1931,-123 1821.16,-75.9196 1786.58,-81.8395 1668,-67 1413.66,-35.1717 583.1,-19.8677 411.279,-17.0017"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="411.202,-13.5001 401.146,-16.8345 411.086,-20.4991 411.202,-13.5001"/>
 </g>
-<!-- Node29&#45;&gt;Node21 -->
-<g id="edge72" class="edge"><title>Node29&#45;&gt;Node21</title>
-<path fill="none" stroke="midnightblue" d="M2592.18,-185.645C2381.69,-176.434 1617.31,-142.984 1446.16,-135.495"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1446.12,-131.99 1435.98,-135.049 1445.81,-138.983 1446.12,-131.99"/>
+<!-- Node29&#45;&gt;Node19 -->
+<g id="edge72" class="edge"><title>Node29&#45;&gt;Node19</title>
+<path fill="none" stroke="midnightblue" d="M1972.17,-185.557C1766.94,-176.244 1036.83,-143.113 870.082,-135.547"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="870.073,-132.043 859.925,-135.086 869.756,-139.035 870.073,-132.043"/>
 </g>
 <!-- Node30&#45;&gt;Node7 -->
 <g id="edge76" class="edge"><title>Node30&#45;&gt;Node7</title>
-<path fill="none" stroke="midnightblue" d="M1934.09,-414.399C1921.01,-405.129 1903.92,-393.025 1890.68,-383.647"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1892.41,-380.582 1882.22,-377.658 1888.36,-386.294 1892.41,-380.582"/>
+<path fill="none" stroke="midnightblue" d="M1934.49,-365.382C1849.75,-354.515 1688.23,-333.803 1595.71,-321.938"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1595.96,-318.443 1585.6,-320.642 1595.07,-325.386 1595.96,-318.443"/>
 </g>
 <!-- Node30&#45;&gt;Node13 -->
 <g id="edge80" class="edge"><title>Node30&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M1898.34,-423.158C1711.5,-405.037 1116.52,-345.718 1083,-322 1025.08,-281.013 1058.43,-232.656 1012,-179 954.72,-112.812 930.44,-101.514 850,-67 778.863,-36.4773 687.843,-23.8966 640.266,-19.1269"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="640.53,-15.6363 630.244,-18.1743 639.868,-22.6049 640.53,-15.6363"/>
+<path fill="none" stroke="midnightblue" d="M2045.71,-358.673C2139.8,-334.099 2334.74,-277.882 2486,-199 2574.92,-152.629 2576.76,-106.352 2669,-67 2751.71,-31.7156 2858.71,-21.0532 2911.54,-17.8546"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2911.87,-21.3417 2921.66,-17.2942 2911.48,-14.3524 2911.87,-21.3417"/>
 </g>
-<!-- Node30&#45;&gt;Node17 -->
-<g id="edge78" class="edge"><title>Node30&#45;&gt;Node17</title>
-<path fill="none" stroke="midnightblue" d="M2009.72,-417.185C2138.32,-391.025 2465.73,-324.144 2739,-266 2945.81,-221.998 3191.97,-167.557 3294.47,-144.795"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3295.52,-148.149 3304.52,-142.564 3294,-141.316 3295.52,-148.149"/>
+<!-- Node30&#45;&gt;Node21 -->
+<g id="edge78" class="edge"><title>Node30&#45;&gt;Node21</title>
+<path fill="none" stroke="midnightblue" d="M2023.01,-358.33C2079.52,-332.856 2196.23,-274.832 2274,-199 2288.09,-185.263 2299.8,-165.971 2307.25,-151.975"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2310.46,-153.373 2311.89,-142.875 2304.23,-150.193 2310.46,-153.373"/>
 </g>
-<!-- Node30&#45;&gt;Node23 -->
-<g id="edge79" class="edge"><title>Node30&#45;&gt;Node23</title>
-<path fill="none" stroke="midnightblue" d="M1898.26,-424.892C1712.26,-412.449 1120.61,-369.478 1050,-322 1013.35,-297.359 1024.93,-272.739 1002,-235 996.331,-225.672 989.625,-215.537 983.992,-207.25"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="986.748,-205.082 978.201,-198.822 980.979,-209.046 986.748,-205.082"/>
+<!-- Node30&#45;&gt;Node24 -->
+<g id="edge79" class="edge"><title>Node30&#45;&gt;Node24</title>
+<path fill="none" stroke="midnightblue" d="M1934.3,-360.087C1865.58,-345.044 1745.08,-319.537 1641,-302 1523.36,-282.179 1492.47,-286.826 1375,-266 1311.82,-254.799 1297.27,-245.699 1234,-235 1103.97,-213.011 1066.75,-222.925 937.624,-199.957"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="938.218,-196.507 927.754,-198.17 936.97,-203.395 938.218,-196.507"/>
 </g>
 <!-- Node30&#45;&gt;Node29 -->
 <g id="edge77" class="edge"><title>Node30&#45;&gt;Node29</title>
-<path fill="none" stroke="midnightblue" d="M2004.21,-414.469C2072.52,-395.101 2198.31,-358.421 2304,-322 2420.61,-281.816 2556.65,-226.83 2615.88,-202.478"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2617.46,-205.613 2625.37,-198.568 2614.8,-199.141 2617.46,-205.613"/>
+<path fill="none" stroke="midnightblue" d="M1992.77,-358.483C1999.18,-325.957 2015.08,-245.343 2022.31,-208.683"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2025.76,-209.307 2024.26,-198.819 2018.89,-207.952 2025.76,-209.307"/>
 </g>
 <!-- Node31&#45;&gt;Node29 -->
 <g id="edge91" class="edge"><title>Node31&#45;&gt;Node29</title>
-<path fill="none" stroke="midnightblue" d="M2258.51,-481.345C2314.14,-439.518 2555.35,-258.156 2626.3,-204.811"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2628.55,-207.497 2634.44,-198.69 2624.35,-201.902 2628.55,-207.497"/>
+<path fill="none" stroke="midnightblue" d="M2426.81,-425.397C2418.28,-393.902 2384.22,-284.165 2312,-235 2302.86,-228.778 2171.15,-209.847 2089.69,-198.619"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2089.91,-195.117 2079.53,-197.222 2088.96,-202.051 2089.91,-195.117"/>
 </g>
 <!-- Node32 -->
 <g id="node32" class="node"><title>Node32</title>
-<polygon fill="white" stroke="#bfbfbf" points="2066.5,-420 2066.5,-439 2125.5,-439 2125.5,-420 2066.5,-420"/>
-<text text-anchor="middle" x="2096" y="-427" font-family="Helvetica,sans-Serif" font-size="10.00">iostream</text>
+<polygon fill="white" stroke="#bfbfbf" points="2669.5,-364 2669.5,-383 2728.5,-383 2728.5,-364 2669.5,-364"/>
+<text text-anchor="middle" x="2699" y="-371" font-family="Helvetica,sans-Serif" font-size="10.00">iostream</text>
 </g>
 <!-- Node31&#45;&gt;Node32 -->
 <g id="edge92" class="edge"><title>Node31&#45;&gt;Node32</title>
-<path fill="none" stroke="midnightblue" d="M2225.37,-481.475C2199.58,-471.313 2156.29,-454.256 2126.96,-442.7"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2128.18,-439.419 2117.59,-439.009 2125.62,-445.932 2128.18,-439.419"/>
+<path fill="none" stroke="midnightblue" d="M2467.68,-425.475C2518.57,-414.262 2607.54,-394.654 2659.05,-383.304"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2660.12,-386.651 2669.14,-381.081 2658.62,-379.815 2660.12,-386.651"/>
 </g>
 <!-- Node33&#45;&gt;Node5 -->
 <g id="edge106" class="edge"><title>Node33&#45;&gt;Node5</title>
-<path fill="none" stroke="midnightblue" d="M2061.78,-650.829C2114.02,-641.167 2207.1,-623.955 2264.68,-613.305"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2265.46,-616.721 2274.66,-611.461 2264.19,-609.838 2265.46,-616.721"/>
+<path fill="none" stroke="midnightblue" d="M2120.83,-597.897C2212.25,-588.236 2441.01,-564.062 2542.8,-553.305"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2543.25,-556.777 2552.82,-552.246 2542.51,-549.816 2543.25,-556.777"/>
 </g>
 <!-- Node33&#45;&gt;Node6 -->
 <g id="edge108" class="edge"><title>Node33&#45;&gt;Node6</title>
-<path fill="none" stroke="midnightblue" d="M2042.3,-649.368C2085.42,-630.091 2189.71,-583.454 2240.4,-560.789"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2242.09,-563.869 2249.79,-556.591 2239.23,-557.478 2242.09,-563.869"/>
+<path fill="none" stroke="midnightblue" d="M2081.53,-593.368C2080.56,-575.617 2078.33,-534.666 2077.01,-510.597"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2080.51,-510.386 2076.47,-500.591 2073.52,-510.767 2080.51,-510.386"/>
 </g>
 <!-- Node33&#45;&gt;Node7 -->
 <g id="edge107" class="edge"><title>Node33&#45;&gt;Node7</title>
-<path fill="none" stroke="midnightblue" d="M2012.33,-649.257C1980.83,-622.647 1888.36,-538.719 1856,-445 1849.38,-425.835 1855.46,-402.812 1861.54,-387.165"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1864.9,-388.22 1865.61,-377.649 1858.46,-385.473 1864.9,-388.22"/>
+<path fill="none" stroke="midnightblue" d="M2043.42,-602.532C1944.47,-601.763 1679.07,-585.914 1531,-445 1502.33,-417.716 1506.05,-397.129 1512,-358 1513.37,-349.001 1516.19,-339.325 1518.95,-331.26"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1522.27,-332.372 1522.4,-321.778 1515.69,-329.976 1522.27,-332.372"/>
 </g>
 <!-- Node33&#45;&gt;Node11 -->
 <g id="edge110" class="edge"><title>Node33&#45;&gt;Node11</title>
-<path fill="none" stroke="midnightblue" d="M2061.83,-657.299C2195.28,-653.272 2643.84,-626.219 2951,-445 2993.34,-420.022 3008.19,-416.304 3039,-378 3079.34,-327.839 3075.39,-297.964 3062,-235 3050.66,-181.679 3050.28,-161.81 3012,-123 2997.82,-108.629 2978.09,-97.9104 2961,-90.5465"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2961.89,-87.1282 2951.3,-86.5961 2959.24,-93.6107 2961.89,-87.1282"/>
+<path fill="none" stroke="midnightblue" d="M2043.37,-599.153C1970.84,-593.492 1809.46,-579.403 1675,-557 1412.64,-513.287 636.108,-395.325 552,-143 549.189,-134.567 545.851,-129.419 552,-123 585.921,-87.5931 1304.04,-79.9149 1532.12,-78.3667"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1532.31,-81.8657 1542.28,-78.2996 1532.26,-74.8658 1532.31,-81.8657"/>
 </g>
 <!-- Node33&#45;&gt;Node13 -->
 <g id="edge111" class="edge"><title>Node33&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M1984.44,-654.829C1829.84,-640.96 1242.37,-577.145 809,-378 729.464,-341.451 697.221,-337.692 647,-266 599.997,-198.902 605.92,-168.872 603,-87 602.683,-78.1168 602.562,-75.8781 603,-67 603.525,-56.3746 604.667,-44.5374 605.727,-34.9956"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="609.204,-35.3985 606.893,-25.0588 602.252,-34.5831 609.204,-35.3985"/>
+<path fill="none" stroke="midnightblue" d="M2120.71,-597.162C2190.66,-587.222 2341.31,-560.26 2454,-501 2688.62,-377.619 2884.18,-104.853 2932.53,-33.731"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2935.68,-35.3195 2938.36,-25.0702 2929.87,-31.4086 2935.68,-35.3195"/>
 </g>
-<!-- Node33&#45;&gt;Node17 -->
-<g id="edge109" class="edge"><title>Node33&#45;&gt;Node17</title>
-<path fill="none" stroke="midnightblue" d="M2061.72,-657.425C2238.01,-654.658 2960.31,-641.651 3057,-613 3150.98,-585.151 3183.47,-575.649 3247,-501 3337.84,-394.265 3343.99,-211.369 3343.48,-152.697"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3346.98,-152.619 3343.31,-142.679 3339.98,-152.736 3346.98,-152.619"/>
+<!-- Node33&#45;&gt;Node21 -->
+<g id="edge109" class="edge"><title>Node33&#45;&gt;Node21</title>
+<path fill="none" stroke="midnightblue" d="M2120.74,-593.449C2216.05,-571.546 2457.51,-510.517 2503,-445 2579.2,-335.253 2400.82,-193.912 2337.36,-148.636"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2339.07,-145.558 2328.88,-142.668 2335.04,-151.283 2339.07,-145.558"/>
 </g>
 <!-- Node34&#45;&gt;Node5 -->
 <g id="edge129" class="edge"><title>Node34&#45;&gt;Node5</title>
-<path fill="none" stroke="midnightblue" d="M2039.67,-937.165C2303.07,-932.333 3546,-905.428 3546,-828 3546,-828 3546,-828 3546,-770 3546,-648.808 2596.81,-612.457 2365.41,-605.396"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2365.36,-601.893 2355.26,-605.091 2365.15,-608.89 2365.36,-601.893"/>
+<path fill="none" stroke="midnightblue" d="M2506.83,-873.268C2512.56,-854.794 2525,-810.301 2525,-772 2525,-772 2525,-772 2525,-658 2525,-619.548 2555.43,-583.313 2575.58,-563.538"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2578.1,-565.976 2582.97,-556.567 2573.29,-560.886 2578.1,-565.976"/>
 </g>
 <!-- Node34&#45;&gt;Node6 -->
 <g id="edge130" class="edge"><title>Node34&#45;&gt;Node6</title>
-<path fill="none" stroke="midnightblue" d="M2039.66,-937.293C2245.48,-934.152 3045.43,-920.397 3296,-893 3431.7,-878.162 3510.71,-941.959 3598,-837 3747.74,-656.94 3551.79,-664.305 3307,-593 3213.17,-565.669 2534.33,-552.363 2328.2,-548.923"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2328.22,-545.423 2318.17,-548.757 2328.11,-552.422 2328.22,-545.423"/>
+<path fill="none" stroke="midnightblue" d="M2500.22,-873.31C2487.79,-843.93 2449,-745.37 2449,-660 2449,-660 2449,-660 2449,-602 2449,-537.397 2240.55,-507.91 2135.31,-497.14"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2135.45,-493.636 2125.15,-496.125 2134.75,-500.601 2135.45,-493.636"/>
 </g>
 <!-- Node34&#45;&gt;Node13 -->
 <g id="edge154" class="edge"><title>Node34&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M1942.42,-937.933C1682.29,-936.951 466,-924.219 466,-772 466,-772 466,-772 466,-714 466,-610.441 466.908,-584.519 464,-481 461.901,-406.278 456,-387.751 456,-313 456,-313 456,-313 456,-132 456,-72.1953 531.518,-39.3149 576.095,-25.1157"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="577.349,-28.3924 585.898,-22.1337 575.312,-21.6954 577.349,-28.3924"/>
+<path fill="none" stroke="midnightblue" d="M2552.62,-877.912C2752.18,-860.974 3498,-796.063 3498,-772 3498,-772 3498,-772 3498,-132 3498,-98.3101 3487.47,-85.0114 3459,-67 3378.24,-15.9088 3076.03,-14.8587 2976.22,-15.9623"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2976.09,-12.4635 2966.13,-16.0892 2976.18,-19.463 2976.09,-12.4635"/>
 </g>
-<!-- Node34&#45;&gt;Node21 -->
-<g id="edge155" class="edge"><title>Node34&#45;&gt;Node21</title>
-<path fill="none" stroke="midnightblue" d="M1942.42,-937.675C1736.02,-936.087 930.965,-927.747 680,-893 654.16,-889.422 468.096,-857.528 452,-837 400.443,-771.247 426.509,-728.572 452,-649 488.402,-535.366 608,-549.822 608,-430.5 608,-430.5 608,-430.5 608,-367 608,-223.679 735.498,-228.497 870,-179 964.034,-144.395 1274.69,-136.239 1378.14,-134.462"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1378.39,-137.958 1388.33,-134.296 1378.28,-130.959 1378.39,-137.958"/>
+<!-- Node34&#45;&gt;Node19 -->
+<g id="edge155" class="edge"><title>Node34&#45;&gt;Node19</title>
+<path fill="none" stroke="midnightblue" d="M2455.18,-881.381C2235.19,-878.164 1335.01,-860.308 1066,-781 1013.76,-765.599 985.379,-771.486 957,-725 847.955,-546.382 1067.61,-456.969 1252,-358 1252.41,-357.778 1505.73,-266.384 1506,-266 1513.91,-254.72 1509.88,-248.219 1506,-235 1497.66,-206.611 1495.45,-194.089 1470,-179 1418.18,-148.276 993.395,-137.224 869.684,-134.639"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="869.721,-131.139 859.651,-134.434 869.578,-138.138 869.721,-131.139"/>
 </g>
 <!-- Node35 -->
 <g id="node35" class="node"><title>Node35</title>
 <g id="a_node35"><a xlink:href="tir_2expr_8h.html" target="_top" xlink:title="TIR expressions. ">
-<polygon fill="white" stroke="black" points="1986,-873.5 1986,-892.5 2066,-892.5 2066,-873.5 1986,-873.5"/>
-<text text-anchor="middle" x="2026" y="-880.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/tir/expr.h</text>
+<polygon fill="white" stroke="black" points="2764,-817.5 2764,-836.5 2844,-836.5 2844,-817.5 2764,-817.5"/>
+<text text-anchor="middle" x="2804" y="-824.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/tir/expr.h</text>
 </a>
 </g>
 </g>
 <!-- Node34&#45;&gt;Node35 -->
 <g id="edge131" class="edge"><title>Node34&#45;&gt;Node35</title>
-<path fill="none" stroke="midnightblue" d="M1996.78,-929.083C2001.67,-921.534 2008.83,-910.495 2014.83,-901.23"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2017.83,-903.046 2020.33,-892.751 2011.95,-899.239 2017.83,-903.046"/>
+<path fill="none" stroke="midnightblue" d="M2551.54,-873.444C2606.75,-863.505 2697.45,-847.179 2753.78,-837.039"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2754.67,-840.437 2763.89,-835.22 2753.43,-833.547 2754.67,-840.437"/>
 </g>
 <!-- Node35&#45;&gt;Node4 -->
 <g id="edge132" class="edge"><title>Node35&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M2066.3,-874.414C2118.53,-862.701 2209.69,-835.613 2267,-781 2280.27,-768.353 2288.51,-748.871 2293.13,-734.531"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2296.53,-735.347 2295.97,-724.767 2289.81,-733.386 2296.53,-735.347"/>
+<path fill="none" stroke="midnightblue" d="M2797.35,-817.222C2790.67,-808.285 2780.23,-793.942 2772,-781 2751.17,-748.253 2753.59,-735.026 2729,-705 2719.78,-693.743 2707.55,-683.005 2697.27,-674.843"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2699.26,-671.959 2689.2,-668.639 2695,-677.509 2699.26,-671.959"/>
 </g>
 <!-- Node35&#45;&gt;Node6 -->
 <g id="edge135" class="edge"><title>Node35&#45;&gt;Node6</title>
-<path fill="none" stroke="midnightblue" d="M2019.9,-873.492C1997.5,-841.134 1923.71,-723.789 1975,-649 2026.9,-573.325 2139.54,-553.618 2209.35,-548.917"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2209.97,-552.387 2219.75,-548.306 2209.56,-545.399 2209.97,-552.387"/>
+<path fill="none" stroke="midnightblue" d="M2794.45,-817.323C2743.41,-771.036 2503.67,-554.646 2463,-537 2405.58,-512.086 2228.94,-499.676 2135.45,-494.712"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2135.47,-491.208 2125.3,-494.185 2135.1,-498.199 2135.47,-491.208"/>
 </g>
 <!-- Node35&#45;&gt;Node7 -->
 <g id="edge133" class="edge"><title>Node35&#45;&gt;Node7</title>
-<path fill="none" stroke="midnightblue" d="M1985.65,-877.224C1942.38,-871.229 1872.17,-858.965 1815,-837 1768.53,-819.145 1742.89,-824.11 1718,-781 1650.14,-663.465 1714.82,-602.645 1775,-481 1789.81,-451.07 1787.43,-439.488 1809,-414 1819.37,-401.753 1833.69,-390.964 1845.86,-383.023"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1848.02,-385.8 1854.64,-377.528 1844.31,-379.867 1848.02,-385.8"/>
+<path fill="none" stroke="midnightblue" d="M2763.64,-824.87C2519.28,-817.856 1246.14,-778.813 1185,-725 1102.34,-652.249 1081.73,-573.156 1142,-481 1162.73,-449.298 1403.79,-358.021 1493.04,-325.057"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1494.48,-328.254 1502.66,-321.512 1492.06,-321.685 1494.48,-328.254"/>
 </g>
 <!-- Node35&#45;&gt;Node12 -->
 <g id="edge136" class="edge"><title>Node35&#45;&gt;Node12</title>
-<path fill="none" stroke="midnightblue" d="M2066.22,-882.266C2264.84,-883.338 3142.04,-885.213 3410,-837 3568.81,-808.425 3727,-821.363 3727,-660 3727,-660 3727,-660 3727,-132 3727,-79.6894 3366.89,-38.7677 3207.92,-23.2515"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3208.03,-19.7465 3197.74,-22.2664 3207.36,-26.7139 3208.03,-19.7465"/>
+<path fill="none" stroke="midnightblue" d="M2763.77,-825.679C2538.34,-823.762 1436.67,-812.821 1289,-781 1266.41,-776.132 1262.81,-768.655 1241,-761 1186.45,-741.851 1169.7,-746.411 1116,-725 1065.78,-704.976 1054.41,-696.741 1008,-669 730.663,-503.222 393.854,-416.944 528,-123 542.355,-91.5453 550.817,-81.9356 582,-67 666.237,-26.6537 937.122,-18.401 1069.2,-16.8109"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1069.28,-20.3104 1079.24,-16.6997 1069.2,-13.3108 1069.28,-20.3104"/>
 </g>
 <!-- Node35&#45;&gt;Node13 -->
 <g id="edge151" class="edge"><title>Node35&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M1985.93,-881.715C1926.07,-880.064 1810.63,-872.105 1720,-837 1539.07,-766.919 1521.63,-697.268 1358,-593 1250.4,-524.431 1220.46,-512.212 1112,-445 1064.95,-415.84 1052.83,-409.043 1007,-378 936.331,-330.137 916.945,-320.186 851,-266 761.112,-192.14 737.295,-173.953 660,-87 644.749,-69.843 629.405,-48.4097 619.38,-33.7071"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="622.098,-31.4765 613.614,-25.1298 616.288,-35.3817 622.098,-31.4765"/>
+<path fill="none" stroke="midnightblue" d="M2844.15,-826.615C2930.33,-827.026 3138.82,-823.134 3307,-781 3378.67,-763.045 3460,-789.882 3460,-716 3460,-716 3460,-716 3460,-132 3460,-101.205 3460.33,-85.8735 3436,-67 3399.67,-38.8235 3079.77,-22.4469 2976.2,-17.8474"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2976.19,-14.3434 2966.04,-17.4033 2975.88,-21.3367 2976.19,-14.3434"/>
 </g>
 <!-- Node35&#45;&gt;Node15 -->
 <g id="edge153" class="edge"><title>Node35&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M1985.84,-878.795C1919.72,-872.962 1791.34,-859.131 1752,-837 1701.84,-808.779 1695.45,-781.93 1687,-725 1646.43,-451.671 1741.81,-116.891 1767.06,-35.1471"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1770.49,-35.9138 1770.14,-25.3248 1763.81,-33.8213 1770.49,-35.9138"/>
+<path fill="none" stroke="midnightblue" d="M2763.92,-826.068C2534.29,-826.295 1390.8,-825.184 1241,-781 1224.55,-776.148 1223.81,-767.638 1208,-761 1148.36,-735.967 1128.39,-745.35 1067,-725 694.321,-601.466 551.504,-640.487 250,-389 131.862,-290.46 25.2668,-185.807 123,-67 151.263,-32.6423 286.476,-21.3034 348.626,-17.8674"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="348.839,-21.3611 358.644,-17.3475 348.476,-14.3705 348.839,-21.3611"/>
 </g>
-<!-- Node35&#45;&gt;Node17 -->
-<g id="edge137" class="edge"><title>Node35&#45;&gt;Node17</title>
-<path fill="none" stroke="midnightblue" d="M2066.2,-882.069C2259.86,-882.182 3097.86,-880.127 3355,-837 3437.84,-823.106 3689,-744 3689,-660 3689,-660 3689,-660 3689,-249.5 3689,-214.518 3682.33,-199.52 3654,-179 3617.88,-152.838 3501.03,-141.738 3421.31,-137.132"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3421.47,-133.636 3411.3,-136.576 3421.09,-140.625 3421.47,-133.636"/>
+<!-- Node35&#45;&gt;Node16 -->
+<g id="edge148" class="edge"><title>Node35&#45;&gt;Node16</title>
+<path fill="none" stroke="midnightblue" d="M2844.22,-826.372C2969.6,-826.461 3345,-818.195 3345,-716 3345,-716 3345,-716 3345,-546 3345,-350.48 3116.11,-194.113 3040.74,-147.926"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="3042.31,-144.786 3031.95,-142.61 3038.69,-150.777 3042.31,-144.786"/>
 </g>
-<!-- Node35&#45;&gt;Node20 -->
-<g id="edge152" class="edge"><title>Node35&#45;&gt;Node20</title>
-<path fill="none" stroke="midnightblue" d="M1985.73,-881.446C1860.8,-879.384 1481.07,-870.458 1363,-837 1344.64,-831.797 1343.36,-822.202 1325,-817 1211.21,-784.76 900.79,-831.831 794,-781 782.483,-775.518 489.232,-454.743 481,-445 433.324,-388.575 380,-386.87 380,-313 380,-313 380,-313 380,-249.5 380,-215.362 380.442,-175.551 380.739,-152.709"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="384.238,-152.739 380.873,-142.693 377.239,-152.645 384.238,-152.739"/>
+<!-- Node35&#45;&gt;Node18 -->
+<g id="edge152" class="edge"><title>Node35&#45;&gt;Node18</title>
+<path fill="none" stroke="midnightblue" d="M2763.93,-825.723C2565.08,-824.193 1682.99,-815.544 1411,-781 1354.52,-773.827 1212.53,-749.217 1161,-725 949.641,-625.661 886.185,-583.556 757,-389 699.617,-302.579 639.871,-193.487 617.338,-151.536"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="620.349,-149.744 612.545,-142.578 614.177,-153.047 620.349,-149.744"/>
 </g>
-<!-- Node35&#45;&gt;Node24 -->
-<g id="edge150" class="edge"><title>Node35&#45;&gt;Node24</title>
-<path fill="none" stroke="midnightblue" d="M2066.03,-882.027C2253.39,-881.931 3044.82,-879.001 3288,-837 3463.14,-806.751 3613,-781.73 3613,-604 3613,-604 3613,-604 3613,-311 3613,-274.745 3608.04,-232.631 3604.78,-208.867"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3608.22,-208.189 3603.35,-198.781 3601.29,-209.174 3608.22,-208.189"/>
+<!-- Node35&#45;&gt;Node21 -->
+<g id="edge137" class="edge"><title>Node35&#45;&gt;Node21</title>
+<path fill="none" stroke="midnightblue" d="M2844.44,-825.994C2903.03,-824.647 3013.93,-817.013 3100,-781 3144.53,-762.37 3187,-764.267 3187,-716 3187,-716 3187,-716 3187,-658 3187,-601.745 3067.71,-213.145 3023,-179 2974,-141.579 2568.05,-135.171 2394.36,-134.152"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2394.28,-130.651 2384.26,-134.097 2394.24,-137.651 2394.28,-130.651"/>
 </g>
-<!-- Node35&#45;&gt;Node26 -->
-<g id="edge148" class="edge"><title>Node35&#45;&gt;Node26</title>
-<path fill="none" stroke="midnightblue" d="M2066.3,-880.991C2295.36,-874.998 3423,-841.945 3423,-772 3423,-772 3423,-772 3423,-658 3423,-576.873 2863.15,-324.089 2728.07,-264.279"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2729.3,-260.997 2718.74,-260.157 2726.47,-267.4 2729.3,-260.997"/>
+<!-- Node35&#45;&gt;Node25 -->
+<g id="edge150" class="edge"><title>Node35&#45;&gt;Node25</title>
+<path fill="none" stroke="midnightblue" d="M2844.28,-824.42C2940.49,-820.231 3177.49,-807.321 3201,-781 3363.9,-598.591 3080.22,-280.724 3008.74,-206.034"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="3010.93,-203.259 3001.46,-198.503 3005.89,-208.125 3010.93,-203.259"/>
 </g>
 <!-- Node35&#45;&gt;Node29 -->
 <g id="edge134" class="edge"><title>Node35&#45;&gt;Node29</title>
-<path fill="none" stroke="midnightblue" d="M2066.11,-881.211C2240.37,-877.658 2932.78,-862.205 3149,-837 3299.5,-819.456 3430.17,-870.917 3471,-725 3498.24,-627.652 3499.88,-543.335 3247,-358 3158.53,-293.163 2834.05,-225.795 2702.23,-200.458"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2702.81,-197.005 2692.33,-198.564 2701.49,-203.881 2702.81,-197.005"/>
+<path fill="none" stroke="midnightblue" d="M2840.34,-817.389C2886.15,-804.118 2959,-773.911 2959,-716 2959,-716 2959,-716 2959,-658 2959,-583.514 2355.34,-445.224 2355,-445 2321.39,-422.777 2298,-414.793 2298,-374.5 2298,-374.5 2298,-374.5 2298,-311 2298,-220.298 2170.18,-197.089 2089.78,-191.463"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2089.94,-187.966 2079.74,-190.833 2089.5,-194.952 2089.94,-187.966"/>
 </g>
 <!-- Node35&#45;&gt;Node32 -->
 <g id="edge149" class="edge"><title>Node35&#45;&gt;Node32</title>
-<path fill="none" stroke="midnightblue" d="M1997.52,-873.427C1924.06,-851.184 1733.31,-792.551 1725,-781 1719.81,-773.784 1721.43,-769.143 1725,-761 1797.01,-596.519 1997.2,-481.012 2069.51,-443.582"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2071.14,-446.68 2078.46,-439.015 2067.96,-440.446 2071.14,-446.68"/>
+<path fill="none" stroke="midnightblue" d="M2844.25,-821.778C2935.26,-811.118 3149,-779.338 3149,-716 3149,-716 3149,-716 3149,-658 3149,-559.145 2834.19,-427.326 2731.19,-386.842"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2732.21,-383.484 2721.62,-383.107 2729.67,-390.005 2732.21,-383.484"/>
 </g>
 <!-- Node36 -->
 <g id="node36" class="node"><title>Node36</title>
 <g id="a_node36"><a xlink:href="buffer_8h.html" target="_top" xlink:title="Symbolic n&#45;dimensional array, to represent a memory buffer. ">
-<polygon fill="white" stroke="black" points="2018.5,-817.5 2018.5,-836.5 2105.5,-836.5 2105.5,-817.5 2018.5,-817.5"/>
-<text text-anchor="middle" x="2062" y="-824.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/tir/buffer.h</text>
+<polygon fill="white" stroke="black" points="2781.5,-761.5 2781.5,-780.5 2868.5,-780.5 2868.5,-761.5 2781.5,-761.5"/>
+<text text-anchor="middle" x="2825" y="-768.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/tir/buffer.h</text>
 </a>
 </g>
 </g>
 <!-- Node35&#45;&gt;Node36 -->
 <g id="edge138" class="edge"><title>Node35&#45;&gt;Node36</title>
-<path fill="none" stroke="midnightblue" d="M2031.94,-873.083C2036.98,-865.534 2044.34,-854.495 2050.51,-845.23"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2053.53,-847.013 2056.17,-836.751 2047.71,-843.13 2053.53,-847.013"/>
+<path fill="none" stroke="midnightblue" d="M2807.47,-817.083C2810.31,-809.77 2814.43,-799.181 2817.96,-790.103"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2821.23,-791.34 2821.6,-780.751 2814.71,-788.803 2821.23,-791.34"/>
 </g>
 <!-- Node37 -->
 <g id="node37" class="node"><title>Node37</title>
 <g id="a_node37"><a xlink:href="var_8h.html" target="_top" xlink:title="Variables in the TIR. ">
-<polygon fill="white" stroke="black" points="3272,-761.5 3272,-780.5 3346,-780.5 3346,-761.5 3272,-761.5"/>
-<text text-anchor="middle" x="3309" y="-768.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/tir/var.h</text>
+<polygon fill="white" stroke="black" points="2857,-705.5 2857,-724.5 2931,-724.5 2931,-705.5 2857,-705.5"/>
+<text text-anchor="middle" x="2894" y="-712.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/tir/var.h</text>
 </a>
 </g>
 </g>
 <!-- Node35&#45;&gt;Node37 -->
 <g id="edge147" class="edge"><title>Node35&#45;&gt;Node37</title>
-<path fill="none" stroke="midnightblue" d="M2066.16,-878.557C2255.47,-862.326 3058.02,-793.518 3261.8,-776.047"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3262.21,-779.524 3271.88,-775.183 3261.62,-772.55 3262.21,-779.524"/>
+<path fill="none" stroke="midnightblue" d="M2826.71,-817.44C2843.04,-810.149 2864.34,-798.113 2877,-781 2886.87,-767.668 2891.02,-749.094 2892.76,-735.214"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2896.28,-735.159 2893.73,-724.876 2889.31,-734.506 2896.28,-735.159"/>
 </g>
 <!-- Node36&#45;&gt;Node4 -->
 <g id="edge139" class="edge"><title>Node36&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M2105.67,-822.377C2143.76,-817.574 2199.3,-806.483 2241,-781 2260.54,-769.058 2277.04,-748.261 2287.18,-733.407"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2290.35,-734.943 2292.89,-724.657 2284.49,-731.116 2290.35,-734.943"/>
+<path fill="none" stroke="midnightblue" d="M2819.06,-761.479C2809.4,-748.089 2789.1,-721.907 2767,-705 2749.44,-691.568 2727.24,-680.418 2709.29,-672.577"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2710.38,-669.239 2699.81,-668.568 2707.65,-675.686 2710.38,-669.239"/>
 </g>
 <!-- Node36&#45;&gt;Node7 -->
 <g id="edge140" class="edge"><title>Node36&#45;&gt;Node7</title>
-<path fill="none" stroke="midnightblue" d="M2018.4,-826.221C1942.53,-825.575 1791.11,-819.374 1758,-781 1652.54,-658.777 1807.58,-446.326 1856.21,-385.628"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1858.98,-387.77 1862.57,-377.802 1853.55,-383.355 1858.98,-387.77"/>
+<path fill="none" stroke="midnightblue" d="M2781.37,-769.559C2573.33,-767.303 1690.12,-755.931 1641,-725 1523.26,-650.862 1532.95,-580.415 1501,-445 1492.11,-407.304 1484.78,-395.069 1496,-358 1499.12,-347.705 1505.45,-337.612 1511.5,-329.602"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1514.23,-331.797 1517.79,-321.818 1508.78,-327.399 1514.23,-331.797"/>
 </g>
 <!-- Node36&#45;&gt;Node13 -->
 <g id="edge146" class="edge"><title>Node36&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M2018.3,-825.797C1842.92,-824.733 1189.89,-818.296 987,-781 909.591,-766.771 888.982,-761.014 819,-725 675.149,-650.972 266,-413.282 266,-251.5 266,-251.5 266,-251.5 266,-132 266,-67.0178 490.43,-31.5227 575.678,-20.3841"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="576.348,-23.827 585.824,-19.0881 575.461,-16.8834 576.348,-23.827"/>
+<path fill="none" stroke="midnightblue" d="M2868.4,-761.404C2999.74,-732.615 3384,-626.828 3384,-374.5 3384,-374.5 3384,-374.5 3384,-132 3384,-98.3101 3373.22,-85.4016 3345,-67 3284.33,-27.4378 3060.72,-18.8422 2976.43,-16.9969"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2976.25,-13.4926 2966.18,-16.7911 2976.11,-20.4912 2976.25,-13.4926"/>
 </g>
 <!-- Node36&#45;&gt;Node37 -->
 <g id="edge141" class="edge"><title>Node36&#45;&gt;Node37</title>
-<path fill="none" stroke="midnightblue" d="M2105.65,-824.11C2297.28,-815.811 3063.31,-782.639 3261.82,-774.043"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3262.09,-777.535 3271.93,-773.605 3261.78,-770.541 3262.09,-777.535"/>
+<path fill="none" stroke="midnightblue" d="M2836.09,-761.324C2846.49,-753.185 2862.26,-740.839 2874.72,-731.087"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2876.99,-733.753 2882.71,-724.834 2872.68,-728.241 2876.99,-733.753"/>
 </g>
 <!-- Node37&#45;&gt;Node4 -->
 <g id="edge142" class="edge"><title>Node37&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M3271.76,-762.861C3267.14,-762.143 3262.47,-761.497 3258,-761 2910.18,-722.318 2487.86,-716.814 2346.62,-716.088"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2346.57,-712.588 2336.55,-716.042 2346.53,-719.588 2346.57,-712.588"/>
+<path fill="none" stroke="midnightblue" d="M2859.62,-705.444C2822.08,-696.102 2761.87,-681.119 2720.93,-670.933"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2721.77,-667.535 2711.22,-668.516 2720.08,-674.328 2721.77,-667.535"/>
 </g>
 <!-- Node37&#45;&gt;Node6 -->
 <g id="edge143" class="edge"><title>Node37&#45;&gt;Node6</title>
-<path fill="none" stroke="midnightblue" d="M3311.14,-761.294C3317.7,-732.247 3334.23,-637.963 3285,-593 3249.54,-560.616 2540.45,-550.773 2328.4,-548.548"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2328.12,-545.045 2318.09,-548.442 2328.05,-552.045 2328.12,-545.045"/>
+<path fill="none" stroke="midnightblue" d="M2885.42,-705.254C2855.35,-675.242 2750.64,-576.146 2642,-537 2550.11,-503.89 2261.29,-495.075 2135.52,-492.783"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2135.36,-489.28 2125.3,-492.604 2135.24,-496.278 2135.36,-489.28"/>
 </g>
 <!-- Node37&#45;&gt;Node13 -->
 <g id="edge145" class="edge"><title>Node37&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M3271.77,-762.206C3145.09,-735.862 2718.94,-648.681 2364,-593 2042.68,-542.595 1960.45,-543.559 1638,-501 1547.27,-489.025 1318.93,-466.624 1230,-445 1143.4,-423.942 1118.88,-421.329 1041,-378 946.624,-325.494 693.444,-95.1116 625.166,-32.3419"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="627.174,-29.4334 617.447,-25.2348 622.433,-34.5831 627.174,-29.4334"/>
+<path fill="none" stroke="midnightblue" d="M2918.76,-705.489C2973.77,-685.742 3108.59,-632.658 3201,-557 3241.08,-524.186 3346,-426.298 3346,-374.5 3346,-374.5 3346,-374.5 3346,-132 3346,-101.205 3346.04,-86.2427 3322,-67 3268.94,-24.5364 3057.91,-17.7022 2976.38,-16.6609"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2976.25,-13.1594 2966.21,-16.553 2976.17,-20.159 2976.25,-13.1594"/>
 </g>
-<!-- Node37&#45;&gt;Node17 -->
-<g id="edge144" class="edge"><title>Node37&#45;&gt;Node17</title>
-<path fill="none" stroke="midnightblue" d="M3339.65,-761.409C3423.6,-735.812 3651,-651.728 3651,-492 3651,-492 3651,-492 3651,-249.5 3651,-217.049 3656.16,-200.665 3632,-179 3601.72,-151.843 3496.14,-141.053 3421.38,-136.78"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="3421.22,-133.266 3411.05,-136.219 3420.84,-140.256 3421.22,-133.266"/>
+<!-- Node37&#45;&gt;Node21 -->
+<g id="edge144" class="edge"><title>Node37&#45;&gt;Node21</title>
+<path fill="none" stroke="midnightblue" d="M2897.52,-705.428C2907.63,-679.666 2935.06,-600.781 2920,-537 2885.52,-390.949 2887.25,-327.393 2769,-235 2711.37,-189.973 2507.71,-158.02 2394.08,-143.239"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2394.41,-139.752 2384.05,-141.947 2393.52,-146.695 2394.41,-139.752"/>
 </g>
 <!-- Node38&#45;&gt;Node2 -->
 <g id="edge157" class="edge"><title>Node38&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M539.83,-1042.11C463.649,-1027.35 326.786,-991.294 376,-929 395.36,-904.494 835.796,-812.803 986.194,-782.094"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="986.994,-785.503 996.093,-780.076 985.595,-778.644 986.994,-785.503"/>
+<path fill="none" stroke="midnightblue" d="M2240.81,-988.822C2146.99,-977.213 1946,-945.201 1946,-884 1946,-884 1946,-884 1946,-826 1946,-786.276 1912.04,-750.504 1889.52,-731.154"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1891.48,-728.236 1881.54,-724.567 1887.02,-733.634 1891.48,-728.236"/>
 </g>
 <!-- Node38&#45;&gt;Node4 -->
 <g id="edge158" class="edge"><title>Node38&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M634.268,-1049.63C1027.11,-1046.4 3736,-1021.18 3736,-940 3736,-940 3736,-940 3736,-882 3736,-810.5 2599.3,-734.921 2347.15,-719.035"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2347.03,-715.521 2336.84,-718.387 2346.6,-722.507 2347.03,-715.521"/>
+<path fill="none" stroke="midnightblue" d="M2335.33,-991.799C2446.5,-985.341 2715,-961.701 2715,-884 2715,-884 2715,-884 2715,-770 2715,-735.813 2698.4,-698.764 2687.14,-677.571"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2690.18,-675.832 2682.28,-668.769 2684.05,-679.215 2690.18,-675.832"/>
 </g>
 <!-- Node38&#45;&gt;Node13 -->
 <g id="edge206" class="edge"><title>Node38&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M539.863,-1049.57C447.051,-1047.95 244.548,-1040.35 186,-1005 92.6043,-948.612 38,-849.705 38,-660 38,-660 38,-660 38,-132 38,-97.8442 49.9103,-84.8998 79,-67 162.772,-15.4525 473.998,-14.7404 575.652,-15.9413"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="575.863,-19.4443 585.908,-16.0778 575.956,-12.4449 575.863,-19.4443"/>
+<path fill="none" stroke="midnightblue" d="M2335.12,-992.605C2570.98,-985.318 3612,-949.448 3612,-884 3612,-884 3612,-884 3612,-132 3612,-98.3101 3601.63,-84.7597 3573,-67 3522,-35.3617 3097.42,-20.885 2976.2,-17.3718"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2976.17,-13.8695 2966.07,-17.0834 2975.97,-20.8667 2976.17,-13.8695"/>
 </g>
-<!-- Node38&#45;&gt;Node23 -->
-<g id="edge205" class="edge"><title>Node38&#45;&gt;Node23</title>
-<path fill="none" stroke="midnightblue" d="M539.619,-1048.02C426.877,-1042.02 152,-1019.26 152,-940 152,-940 152,-940 152,-546 152,-524.049 792.773,-262.718 941.451,-202.376"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="942.955,-205.543 950.906,-198.541 940.324,-199.057 942.955,-205.543"/>
+<!-- Node38&#45;&gt;Node24 -->
+<g id="edge205" class="edge"><title>Node38&#45;&gt;Node24</title>
+<path fill="none" stroke="midnightblue" d="M2240.85,-994.053C2014.79,-994.089 1040.46,-991.718 740,-949 625.912,-932.779 489,-999.235 489,-884 489,-884 489,-884 489,-826 489,-534.46 796.164,-269.472 876.803,-204.928"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="879.025,-207.633 884.69,-198.68 874.678,-202.147 879.025,-207.633"/>
 </g>
 <!-- Node38&#45;&gt;Node34 -->
 <g id="edge207" class="edge"><title>Node38&#45;&gt;Node34</title>
-<path fill="none" stroke="midnightblue" d="M634.299,-1049.44C849.648,-1046.72 1732.09,-1033.9 1852,-1005 1895.59,-994.494 1941.96,-969.701 1968.6,-953.952"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1970.72,-956.76 1977.48,-948.602 1967.11,-950.764 1970.72,-956.76"/>
+<path fill="none" stroke="midnightblue" d="M2304.95,-985.368C2342.57,-966.211 2433.24,-920.036 2478.05,-897.217"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2479.81,-900.248 2487.13,-892.591 2476.63,-894.011 2479.81,-900.248"/>
 </g>
 <!-- Node39 -->
 <g id="node39" class="node"><title>Node39</title>
 <g id="a_node39"><a xlink:href="ir_2module_8h.html" target="_top" xlink:title="IRModule that holds the functions and type definitions. ">
-<polygon fill="white" stroke="black" points="1374,-873.5 1374,-892.5 1466,-892.5 1466,-873.5 1374,-873.5"/>
-<text text-anchor="middle" x="1420" y="-880.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/module.h</text>
+<polygon fill="white" stroke="black" points="1640,-817.5 1640,-836.5 1732,-836.5 1732,-817.5 1640,-817.5"/>
+<text text-anchor="middle" x="1686" y="-824.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/module.h</text>
 </a>
 </g>
 </g>
 <!-- Node38&#45;&gt;Node39 -->
 <g id="edge159" class="edge"><title>Node38&#45;&gt;Node39</title>
-<path fill="none" stroke="midnightblue" d="M634.255,-1049.33C799.196,-1046.73 1348.71,-1035.9 1522,-1005 1603.65,-990.442 1650.94,-1015.87 1700,-949 1705.26,-941.833 1705.77,-935.766 1700,-929 1671.83,-895.938 1549.47,-887.074 1476.15,-884.758"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1476.24,-881.259 1466.14,-884.472 1476.04,-888.256 1476.24,-881.259"/>
+<path fill="none" stroke="midnightblue" d="M2240.56,-994.249C2105.07,-993.835 1721.29,-984.467 1646,-893 1633.02,-877.232 1650.17,-856.889 1665.87,-843.195"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1668.28,-845.75 1673.79,-836.7 1663.84,-840.339 1668.28,-845.75"/>
 </g>
 <!-- Node43 -->
 <g id="node43" class="node"><title>Node43</title>
 <g id="a_node43"><a xlink:href="ir_2op_8h.html" target="_top" xlink:title="Primitive operators(builtin intrinsics) and registry for them. ">
-<polygon fill="white" stroke="black" points="553,-985.5 553,-1004.5 621,-1004.5 621,-985.5 553,-985.5"/>
-<text text-anchor="middle" x="587" y="-992.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/op.h</text>
+<polygon fill="white" stroke="black" points="749,-929.5 749,-948.5 817,-948.5 817,-929.5 749,-929.5"/>
+<text text-anchor="middle" x="783" y="-936.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/op.h</text>
 </a>
 </g>
 </g>
 <!-- Node38&#45;&gt;Node43 -->
 <g id="edge180" class="edge"><title>Node38&#45;&gt;Node43</title>
-<path fill="none" stroke="midnightblue" d="M587,-1041.08C587,-1034.01 587,-1023.86 587,-1014.99"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="590.5,-1014.75 587,-1004.75 583.5,-1014.75 590.5,-1014.75"/>
+<path fill="none" stroke="midnightblue" d="M2240.89,-992.31C2015.18,-984.211 1046.26,-949.446 827.157,-941.584"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="827.121,-938.081 817.002,-941.22 826.87,-945.076 827.121,-938.081"/>
 </g>
 <!-- Node49 -->
 <g id="node49" class="node"><title>Node49</title>
 <g id="a_node49"><a xlink:href="relay_2type_8h.html" target="_top" xlink:title="Relay typed AST nodes. ">
-<polygon fill="white" stroke="black" points="1460.5,-985.5 1460.5,-1004.5 1513.5,-1004.5 1513.5,-985.5 1460.5,-985.5"/>
-<text text-anchor="middle" x="1487" y="-992.5" font-family="Helvetica,sans-Serif" font-size="10.00">./type.h</text>
+<polygon fill="white" stroke="black" points="2261.5,-929.5 2261.5,-948.5 2314.5,-948.5 2314.5,-929.5 2261.5,-929.5"/>
+<text text-anchor="middle" x="2288" y="-936.5" font-family="Helvetica,sans-Serif" font-size="10.00">./type.h</text>
 </a>
 </g>
 </g>
 <!-- Node38&#45;&gt;Node49 -->
 <g id="edge208" class="edge"><title>Node38&#45;&gt;Node49</title>
-<path fill="none" stroke="midnightblue" d="M634.121,-1047.17C793.081,-1037.64 1307.58,-1006.76 1450.1,-998.214"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1450.32,-1001.71 1460.09,-997.614 1449.9,-994.72 1450.32,-1001.71"/>
+<path fill="none" stroke="midnightblue" d="M2288,-985.083C2288,-978.006 2288,-967.861 2288,-958.986"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2291.5,-958.751 2288,-948.751 2284.5,-958.751 2291.5,-958.751"/>
 </g>
 <!-- Node39&#45;&gt;Node4 -->
 <g id="edge167" class="edge"><title>Node39&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M1466.11,-875.747C1618.56,-855.034 2098.57,-789.494 2131,-781 2181.73,-767.713 2238.06,-743.743 2270.62,-728.919"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2272.31,-731.994 2279.93,-724.633 2269.38,-725.636 2272.31,-731.994"/>
+<path fill="none" stroke="midnightblue" d="M1732.37,-825.24C1831.4,-823.001 2070.64,-814.296 2268,-781 2364.52,-764.717 2387.17,-752.864 2481,-725 2538.26,-707.997 2604.01,-685.594 2642.94,-672.021"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2644.43,-675.21 2652.71,-668.605 2642.12,-668.602 2644.43,-675.21"/>
 </g>
 <!-- Node39&#45;&gt;Node7 -->
 <g id="edge175" class="edge"><title>Node39&#45;&gt;Node7</title>
-<path fill="none" stroke="midnightblue" d="M1432.8,-873.201C1444.7,-864.695 1462.55,-851.06 1476,-837 1637.11,-668.563 1610.01,-566.826 1786,-414 1801.56,-400.489 1821.86,-389.473 1838.61,-381.722"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1840.29,-384.807 1848,-377.542 1837.44,-378.412 1840.29,-384.807"/>
+<path fill="none" stroke="midnightblue" d="M1639.6,-824.42C1510.16,-819.731 1151.41,-804.727 1104,-781 1069.64,-763.804 1047,-754.423 1047,-716 1047,-716 1047,-716 1047,-658 1047,-477.124 1153.39,-423.475 1322,-358 1365.17,-341.237 1416.02,-330.002 1456.15,-322.95"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1456.85,-326.382 1466.12,-321.246 1455.67,-319.482 1456.85,-326.382"/>
 </g>
 <!-- Node39&#45;&gt;Node13 -->
 <g id="edge176" class="edge"><title>Node39&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M1373.83,-881.063C1236.63,-877.967 833.011,-866.532 705,-837 375.075,-760.887 152,-651.591 152,-313 152,-313 152,-313 152,-132 152,-95.5528 170.36,-85.0917 202,-67 265.788,-30.5259 491.667,-20.0225 575.964,-17.3353"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="576.09,-20.8331 585.98,-17.0319 575.878,-13.8363 576.09,-20.8331"/>
+<path fill="none" stroke="midnightblue" d="M1732.13,-826.002C1922.97,-825.74 2651.28,-822.018 2877,-781 2954.44,-766.928 2971.5,-753.142 3045,-725 3258.66,-643.196 3422,-603.283 3422,-374.5 3422,-374.5 3422,-374.5 3422,-132 3422,-95.5528 3403.7,-84.9919 3372,-67 3304.3,-28.5745 3063.91,-19.2511 2976.27,-17.1069"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2976.2,-13.6045 2966.12,-16.8745 2976.04,-20.6027 2976.2,-13.6045"/>
 </g>
-<!-- Node39&#45;&gt;Node20 -->
-<g id="edge177" class="edge"><title>Node39&#45;&gt;Node20</title>
-<path fill="none" stroke="midnightblue" d="M1373.69,-881.671C1244.55,-880.301 882.515,-873.242 770,-837 589.912,-778.991 528.1,-759.193 408,-613 317.403,-502.72 306.697,-443.123 328,-302 336.497,-245.709 360.658,-182.458 373.212,-152.128"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="376.604,-153.092 377.261,-142.518 370.153,-150.374 376.604,-153.092"/>
+<!-- Node39&#45;&gt;Node18 -->
+<g id="edge177" class="edge"><title>Node39&#45;&gt;Node18</title>
+<path fill="none" stroke="midnightblue" d="M1639.81,-824.618C1506.39,-820.365 1122.1,-806.212 999,-781 629.373,-705.295 433.358,-716.493 246,-389 168.476,-253.491 441.756,-172.505 558.051,-144.813"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="558.869,-148.216 567.807,-142.528 557.272,-141.401 558.869,-148.216"/>
 </g>
-<!-- Node39&#45;&gt;Node21 -->
-<g id="edge179" class="edge"><title>Node39&#45;&gt;Node21</title>
-<path fill="none" stroke="midnightblue" d="M1373.75,-882.805C1231.32,-884.199 803.718,-879.934 718,-781 695.881,-755.471 711.542,-738.155 718,-705 742.111,-581.218 829.823,-254.277 931,-179 966.745,-152.405 1274.52,-138.957 1378.12,-135.154"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1378.47,-138.644 1388.33,-134.786 1378.22,-131.648 1378.47,-138.644"/>
+<!-- Node39&#45;&gt;Node19 -->
+<g id="edge179" class="edge"><title>Node39&#45;&gt;Node19</title>
+<path fill="none" stroke="midnightblue" d="M1639.6,-825.482C1514.52,-823.634 1172.67,-815.483 1066,-781 885.614,-722.686 795.375,-722.55 703,-557 633.267,-432.028 661.812,-372.056 703,-235 711.585,-206.431 717.429,-198.504 740,-179 758.229,-163.248 782.913,-151.84 802.686,-144.452"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="803.987,-147.704 812.232,-141.05 801.638,-141.11 803.987,-147.704"/>
 </g>
 <!-- Node39&#45;&gt;Node33 -->
 <g id="edge174" class="edge"><title>Node39&#45;&gt;Node33</title>
-<path fill="none" stroke="midnightblue" d="M1461.13,-873.421C1502.77,-864.639 1568.99,-850.415 1626,-837 1638.38,-834.087 1836.42,-786.256 1848,-781 1910.76,-752.519 1975,-701.279 2005.22,-675.584"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2007.84,-677.943 2013.14,-668.768 2003.28,-672.637 2007.84,-677.943"/>
+<path fill="none" stroke="midnightblue" d="M1689.42,-817.142C1701.31,-787.616 1743.98,-691.992 1813,-649 1848.91,-626.633 1965.75,-613.566 2033.04,-607.714"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2033.73,-611.168 2043.4,-606.836 2033.14,-604.193 2033.73,-611.168"/>
 </g>
 <!-- Node40 -->
 <g id="node40" class="node"><title>Node40</title>
 <g id="a_node40"><a xlink:href="ir_2adt_8h.html" target="_top" xlink:title="Algebraic data type definitions. ">
-<polygon fill="white" stroke="black" points="1767,-761.5 1767,-780.5 1839,-780.5 1839,-761.5 1767,-761.5"/>
-<text text-anchor="middle" x="1803" y="-768.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/adt.h</text>
+<polygon fill="white" stroke="black" points="1650,-705.5 1650,-724.5 1722,-724.5 1722,-705.5 1650,-705.5"/>
+<text text-anchor="middle" x="1686" y="-712.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/adt.h</text>
 </a>
 </g>
 </g>
 <!-- Node39&#45;&gt;Node40 -->
 <g id="edge160" class="edge"><title>Node39&#45;&gt;Node40</title>
-<path fill="none" stroke="midnightblue" d="M1449.73,-873.46C1518.11,-853.822 1686.53,-805.45 1763.49,-783.348"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1764.64,-786.659 1773.28,-780.535 1762.71,-779.931 1764.64,-786.659"/>
+<path fill="none" stroke="midnightblue" d="M1686,-817.368C1686,-799.617 1686,-758.666 1686,-734.597"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1689.5,-734.591 1686,-724.591 1682.5,-734.591 1689.5,-734.591"/>
 </g>
 <!-- Node41 -->
 <g id="node41" class="node"><title>Node41</title>
 <g id="a_node41"><a xlink:href="ir_2function_8h.html" target="_top" xlink:title="Function nodes. ">
-<polygon fill="white" stroke="black" points="1372.5,-817.5 1372.5,-836.5 1467.5,-836.5 1467.5,-817.5 1372.5,-817.5"/>
-<text text-anchor="middle" x="1420" y="-824.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/function.h</text>
+<polygon fill="white" stroke="black" points="2164.5,-761.5 2164.5,-780.5 2259.5,-780.5 2259.5,-761.5 2164.5,-761.5"/>
+<text text-anchor="middle" x="2212" y="-768.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/function.h</text>
 </a>
 </g>
 </g>
 <!-- Node39&#45;&gt;Node41 -->
 <g id="edge168" class="edge"><title>Node39&#45;&gt;Node41</title>
-<path fill="none" stroke="midnightblue" d="M1420,-873.083C1420,-866.006 1420,-855.861 1420,-846.986"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1423.5,-846.751 1420,-836.751 1416.5,-846.751 1423.5,-846.751"/>
+<path fill="none" stroke="midnightblue" d="M1732.22,-821.255C1828.17,-811.404 2048.79,-788.755 2154.06,-777.948"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2154.59,-781.412 2164.18,-776.909 2153.88,-774.449 2154.59,-781.412"/>
 </g>
 <!-- Node42 -->
 <g id="node42" class="node"><title>Node42</title>
-<polygon fill="white" stroke="#bfbfbf" points="1230,-817.5 1230,-836.5 1316,-836.5 1316,-817.5 1230,-817.5"/>
-<text text-anchor="middle" x="1273" y="-824.5" font-family="Helvetica,sans-Serif" font-size="10.00">unordered_set</text>
+<polygon fill="white" stroke="#bfbfbf" points="1113,-761.5 1113,-780.5 1199,-780.5 1199,-761.5 1113,-761.5"/>
+<text text-anchor="middle" x="1156" y="-768.5" font-family="Helvetica,sans-Serif" font-size="10.00">unordered_set</text>
 </g>
 <!-- Node39&#45;&gt;Node42 -->
 <g id="edge178" class="edge"><title>Node39&#45;&gt;Node42</title>
-<path fill="none" stroke="midnightblue" d="M1396.71,-873.444C1372.19,-864.438 1333.4,-850.189 1305.8,-840.049"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1306.78,-836.679 1296.18,-836.516 1304.36,-843.25 1306.78,-836.679"/>
+<path fill="none" stroke="midnightblue" d="M1639.9,-822.565C1555.19,-816.042 1369.11,-800.731 1213,-781 1211.74,-780.841 1210.47,-780.676 1209.19,-780.505"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1209.61,-777.03 1199.22,-779.111 1208.64,-783.963 1209.61,-777.03"/>
 </g>
 <!-- Node40&#45;&gt;Node4 -->
 <g id="edge161" class="edge"><title>Node40&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M1839.39,-766.273C1855.24,-764.651 1874.04,-762.73 1891,-761 2048.33,-744.955 2088.29,-746.25 2245,-725 2246.3,-724.824 2247.62,-724.64 2248.95,-724.449"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2249.9,-727.845 2259.26,-722.886 2248.85,-720.924 2249.9,-727.845"/>
+<path fill="none" stroke="midnightblue" d="M1722.09,-711.456C1749.28,-709.573 1787.47,-706.999 1821,-705 2127.99,-686.699 2497.15,-668.621 2628.06,-662.331"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2628.35,-665.822 2638.17,-661.847 2628.01,-658.83 2628.35,-665.822"/>
 </g>
 <!-- Node40&#45;&gt;Node6 -->
 <g id="edge164" class="edge"><title>Node40&#45;&gt;Node6</title>
-<path fill="none" stroke="midnightblue" d="M1810.75,-761.182C1818.56,-752.215 1830.87,-737.849 1841,-725 1886.07,-667.822 1875.41,-630.187 1938,-593 1982.71,-566.439 2127.2,-555.009 2209.75,-550.544"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2210.18,-554.026 2219.98,-550.009 2209.81,-547.036 2210.18,-554.026"/>
+<path fill="none" stroke="midnightblue" d="M1687.76,-705.265C1690.93,-691.58 1698.85,-665.001 1715,-649 1801.78,-563.036 1943.34,-520.58 2020.9,-502.781"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2021.95,-506.132 2030.95,-500.531 2020.43,-499.301 2021.95,-506.132"/>
 </g>
 <!-- Node40&#45;&gt;Node7 -->
 <g id="edge163" class="edge"><title>Node40&#45;&gt;Node7</title>
-<path fill="none" stroke="midnightblue" d="M1803.24,-761.275C1804.51,-720.932 1812.03,-548.708 1850,-414 1852.61,-404.743 1856.79,-394.931 1860.65,-386.841"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1863.89,-388.193 1865.24,-377.684 1857.63,-385.058 1863.89,-388.193"/>
+<path fill="none" stroke="midnightblue" d="M1677.87,-705.104C1649.09,-672.989 1551.52,-558.908 1511,-445 1498.01,-408.483 1496.61,-395.839 1505,-358 1507.12,-348.426 1511.51,-338.476 1515.72,-330.374"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1518.82,-331.999 1520.62,-321.557 1512.7,-328.601 1518.82,-331.999"/>
 </g>
 <!-- Node40&#45;&gt;Node11 -->
 <g id="edge165" class="edge"><title>Node40&#45;&gt;Node11</title>
-<path fill="none" stroke="midnightblue" d="M1839.22,-762.044C1840.83,-761.691 1842.43,-761.341 1844,-761 2147.9,-694.767 2225.38,-684.877 2528,-613 2685.45,-575.603 3233,-592.331 3233,-430.5 3233,-430.5 3233,-430.5 3233,-311 3233,-180.558 3055.12,-113.812 2969.72,-89.2834"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2970.61,-85.8956 2960.03,-86.5671 2968.72,-92.6359 2970.61,-85.8956"/>
+<path fill="none" stroke="midnightblue" d="M1649.84,-713.192C1585.3,-710.913 1446.58,-702.214 1335,-669 1130.46,-608.117 397.347,-277.079 545,-123 579.171,-87.3418 1302.89,-79.8327 1532.05,-78.3466"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1532.29,-81.8453 1542.27,-78.2822 1532.24,-74.8454 1532.29,-81.8453"/>
 </g>
 <!-- Node40&#45;&gt;Node13 -->
 <g id="edge166" class="edge"><title>Node40&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M1766.95,-770.7C1594.84,-772.062 848.316,-755.304 442,-378 350.627,-293.151 258.533,-228.502 325,-123 379.227,-36.9265 513.524,-20.1384 575.592,-17.0621"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="575.76,-20.5582 585.61,-16.6551 575.476,-13.564 575.76,-20.5582"/>
+<path fill="none" stroke="midnightblue" d="M1699.04,-705.283C1721.32,-690.865 1768.64,-662.324 1813,-649 1901.76,-622.34 2564.28,-607.476 2642,-557 2842.63,-426.707 2922.67,-114.458 2940.16,-35.0941"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2943.62,-35.6348 2942.29,-25.1238 2936.77,-34.1702 2943.62,-35.6348"/>
 </g>
 <!-- Node40&#45;&gt;Node33 -->
 <g id="edge162" class="edge"><title>Node40&#45;&gt;Node33</title>
-<path fill="none" stroke="midnightblue" d="M1820.26,-761.368C1858.66,-742.171 1951.32,-695.842 1996.85,-673.074"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1998.44,-676.194 2005.82,-668.591 1995.31,-669.933 1998.44,-676.194"/>
+<path fill="none" stroke="midnightblue" d="M1690.54,-705.497C1698.71,-691.13 1717.37,-662.317 1742,-649 1791.29,-622.354 1951.86,-610.565 2033.46,-606.19"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2033.68,-609.684 2043.48,-605.669 2033.31,-602.693 2033.68,-609.684"/>
 </g>
 <!-- Node41&#45;&gt;Node2 -->
 <g id="edge169" class="edge"><title>Node41&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M1372.28,-819.046C1367.45,-818.352 1362.63,-817.66 1358,-817 1261.66,-803.276 1149.04,-787.628 1085.76,-778.871"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1086.05,-775.378 1075.67,-777.475 1085.09,-782.312 1086.05,-775.378"/>
+<path fill="none" stroke="midnightblue" d="M2164.45,-762.492C2099.99,-752.313 1985.41,-734.223 1919.81,-723.864"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1920.14,-720.373 1909.71,-722.27 1919.04,-727.287 1920.14,-720.373"/>
 </g>
 <!-- Node41&#45;&gt;Node4 -->
 <g id="edge170" class="edge"><title>Node41&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M1467.56,-821.554C1546.63,-814.038 1710.07,-797.974 1848,-781 1936.43,-770.118 2156.96,-738.682 2245,-725 2246.3,-724.798 2247.61,-724.592 2248.94,-724.381"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2249.92,-727.768 2259.23,-722.712 2248.8,-720.858 2249.92,-727.768"/>
+<path fill="none" stroke="midnightblue" d="M2256.62,-761.45C2300.59,-752.858 2369.63,-738.927 2429,-725 2502.63,-707.729 2587.77,-684.75 2636.71,-671.248"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2637.88,-674.556 2646.58,-668.516 2636.01,-667.809 2637.88,-674.556"/>
 </g>
 <!-- Node41&#45;&gt;Node8 -->
 <g id="edge171" class="edge"><title>Node41&#45;&gt;Node8</title>
-<path fill="none" stroke="midnightblue" d="M1408.46,-817.433C1387.2,-800.571 1344,-760.799 1344,-716 1344,-716 1344,-716 1344,-602 1344,-528.721 1398.74,-526.729 1456,-481 1565.08,-393.889 1608.64,-387.887 1745,-358 1800.75,-345.781 1953.32,-329.568 2046.7,-320.311"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2047.05,-323.793 2056.66,-319.327 2046.37,-316.827 2047.05,-323.793"/>
+<path fill="none" stroke="midnightblue" d="M2164.5,-768.252C2041.46,-763.439 1714.62,-748.746 1609,-725 1406.39,-679.451 1329.6,-693.384 1173,-557 1145.49,-533.042 1128.19,-514.765 1142,-481 1155.2,-448.71 1168.98,-445.786 1197,-425 1248.57,-386.74 1266.99,-385.54 1325,-358 1330.87,-355.214 1534.55,-269.538 1540,-266 1554.09,-256.849 1586.63,-225.311 1606.22,-205.854"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1608.89,-208.133 1613.5,-198.591 1603.95,-203.179 1608.89,-208.133"/>
 </g>
 <!-- Node41&#45;&gt;Node13 -->
 <g id="edge172" class="edge"><title>Node41&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M1372.18,-821.218C1357.09,-819.777 1340.36,-818.248 1325,-817 1089.24,-797.844 1022.67,-841.519 794,-781 627.97,-737.059 581.987,-717.902 446,-613 428.652,-599.617 190,-334.91 190,-313 190,-313 190,-313 190,-132 190,-97.8442 202.255,-85.4491 231,-67 287.909,-30.4741 495.053,-20.0695 575.626,-17.3688"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="575.805,-20.865 585.689,-17.05 575.583,-13.8685 575.805,-20.865"/>
+<path fill="none" stroke="midnightblue" d="M2259.8,-769.811C2470.75,-766.257 3308,-722.486 3308,-251.5 3308,-251.5 3308,-251.5 3308,-132 3308,-98.3101 3296.95,-85.8071 3269,-67 3221.57,-35.0887 3049.53,-22.203 2976.81,-18.1027"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2976.6,-14.5863 2966.42,-17.5393 2976.22,-21.576 2976.6,-14.5863"/>
 </g>
 <!-- Node41&#45;&gt;Node14 -->
 <g id="edge173" class="edge"><title>Node41&#45;&gt;Node14</title>
-<path fill="none" stroke="midnightblue" d="M1420,-817.442C1420,-798.936 1420,-753.812 1420,-716 1420,-716 1420,-716 1420,-602 1420,-501.459 1705.88,-390.582 1801,-358 1968.61,-300.586 2034.72,-390.771 2198,-322 2323.51,-269.137 2318.22,-199.333 2431,-123 2489.46,-83.4316 2564.36,-47.5673 2604.86,-29.2698"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2606.45,-32.3922 2614.15,-25.1098 2603.59,-26.0038 2606.45,-32.3922"/>
+<path fill="none" stroke="midnightblue" d="M2259.78,-762.905C2313.69,-754.691 2403.91,-740.317 2481,-725 2725.03,-676.516 2809.23,-696.856 3015,-557 3076.97,-514.883 3110.31,-513.35 3141,-445 3172.41,-375.057 3152.21,-205.322 3057,-123 2943.05,-24.4711 2454.78,-16.3786 2304.32,-16.2655"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2304.07,-12.7656 2294.08,-16.2701 2304.08,-19.7656 2304.07,-12.7656"/>
 </g>
 <!-- Node43&#45;&gt;Node2 -->
 <g id="edge182" class="edge"><title>Node43&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M604.326,-985.433C673.003,-951.478 926.38,-826.2 1009.44,-785.132"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1011.07,-788.231 1018.48,-780.661 1007.97,-781.956 1011.07,-788.231"/>
+<path fill="none" stroke="midnightblue" d="M794.113,-929.384C833.562,-899.369 971.61,-799.161 1104,-761 1238.1,-722.346 1591.7,-733.509 1731,-725 1760.62,-723.191 1793.78,-721.048 1820.28,-719.307"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1820.71,-722.787 1830.46,-718.637 1820.25,-715.802 1820.71,-722.787"/>
 </g>
 <!-- Node43&#45;&gt;Node4 -->
 <g id="edge183" class="edge"><title>Node43&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M621.21,-993.83C777.585,-992.854 1425.24,-986.573 1624,-949 1801.74,-915.4 1834.73,-865.477 2009,-817 2082.15,-796.652 2104.7,-807.101 2176,-781 2212.81,-767.526 2252.31,-744.789 2276.08,-730.091"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2278.06,-732.981 2284.67,-724.704 2274.34,-727.05 2278.06,-732.981"/>
+<path fill="none" stroke="midnightblue" d="M817.246,-938.286C996.007,-939.554 1823.33,-942.6 2074,-893 2308.87,-846.526 2571.03,-715.709 2651.9,-673.389"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2653.63,-676.434 2660.85,-668.679 2650.37,-670.239 2653.63,-676.434"/>
 </g>
 <!-- Node43&#45;&gt;Node13 -->
 <g id="edge202" class="edge"><title>Node43&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M552.808,-991.871C456.511,-984.946 190,-959.007 190,-884 190,-884 190,-884 190,-826 190,-669.147 76,-648.853 76,-492 76,-492 76,-492 76,-132 76,-101.205 75.636,-85.8345 100,-67 137.667,-37.8818 469.984,-22.0669 575.792,-17.7369"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="576.02,-21.2306 585.871,-17.3313 575.739,-14.2363 576.02,-21.2306"/>
+<path fill="none" stroke="midnightblue" d="M817.31,-937.797C1133.98,-935.705 3536,-915.122 3536,-772 3536,-772 3536,-772 3536,-132 3536,-95.5528 3517.92,-84.6016 3486,-67 3397.58,-18.2369 3079.13,-15.6946 2976.28,-16.1863"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2976.17,-12.6868 2966.19,-16.248 2976.21,-19.6867 2976.17,-12.6868"/>
 </g>
 <!-- Node43&#45;&gt;Node15 -->
 <g id="edge203" class="edge"><title>Node43&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M593.307,-985.254C616.017,-953.923 696.176,-844.716 770,-761 913.425,-598.356 953.429,-560.836 1113,-414 1159.9,-370.844 1184.14,-372.516 1223,-322 1301.32,-220.194 1247.45,-130.673 1359,-67 1424.43,-29.6518 1657.05,-19.6537 1741.81,-17.2197"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1741.95,-20.7174 1751.85,-16.9474 1741.76,-13.7199 1741.95,-20.7174"/>
+<path fill="none" stroke="midnightblue" d="M748.852,-936.859C598.147,-931.378 0,-904.787 0,-828 0,-828 0,-828 0,-132 0,-59.2899 257.902,-27.9921 348.773,-19.2211"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="349.126,-22.7035 358.755,-18.2841 348.472,-15.7341 349.126,-22.7035"/>
 </g>
-<!-- Node43&#45;&gt;Node21 -->
-<g id="edge204" class="edge"><title>Node43&#45;&gt;Node21</title>
-<path fill="none" stroke="midnightblue" d="M552.831,-993.009C505.316,-990.434 417.625,-981.287 351,-949 311.305,-929.764 276,-928.11 276,-884 276,-884 276,-884 276,-826 276,-605.303 303.013,-529.434 442,-358 507.957,-276.645 548.287,-279.703 643,-235 711.892,-202.484 730.39,-194.389 805,-179 1019.78,-134.699 1285.24,-132.652 1378.06,-133.464"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1378.23,-136.966 1388.26,-133.572 1378.3,-129.967 1378.23,-136.966"/>
+<!-- Node43&#45;&gt;Node19 -->
+<g id="edge204" class="edge"><title>Node43&#45;&gt;Node19</title>
+<path fill="none" stroke="midnightblue" d="M748.938,-936.074C687.625,-930.572 565,-909.393 565,-828 565,-828 565,-828 565,-602 565,-402.381 569.594,-314.695 716,-179 740.059,-156.701 776.206,-145.162 802.538,-139.384"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="803.348,-142.791 812.455,-137.376 801.959,-135.931 803.348,-142.791"/>
 </g>
 <!-- Node43&#45;&gt;Node33 -->
 <g id="edge184" class="edge"><title>Node43&#45;&gt;Node33</title>
-<path fill="none" stroke="midnightblue" d="M621.16,-993.702C750.916,-992.306 1213.04,-984.871 1355,-949 1546.62,-900.58 1577.44,-841.385 1758,-761 1816.22,-735.081 1830.44,-727.673 1890,-705 1922.12,-692.773 1959.2,-680.365 1986.04,-671.683"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1987.34,-674.941 1995.79,-668.547 1985.2,-668.277 1987.34,-674.941"/>
+<path fill="none" stroke="midnightblue" d="M817.187,-937.314C969.868,-934.118 1590.31,-919.708 1783,-893 1908.26,-875.639 2060,-954.455 2060,-828 2060,-828 2060,-828 2060,-714 2060,-681.328 2069.45,-644.24 2075.96,-622.553"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2079.39,-623.31 2079.03,-612.721 2072.71,-621.222 2079.39,-623.31"/>
 </g>
 <!-- Node44 -->
 <g id="node44" class="node"><title>Node44</title>
-<polygon fill="white" stroke="#bfbfbf" points="385,-929.5 385,-948.5 471,-948.5 471,-929.5 385,-929.5"/>
-<text text-anchor="middle" x="428" y="-936.5" font-family="Helvetica,sans-Serif" font-size="10.00">dmlc/registry.h</text>
+<polygon fill="white" stroke="#bfbfbf" points="669,-873.5 669,-892.5 755,-892.5 755,-873.5 669,-873.5"/>
+<text text-anchor="middle" x="712" y="-880.5" font-family="Helvetica,sans-Serif" font-size="10.00">dmlc/registry.h</text>
 </g>
 <!-- Node43&#45;&gt;Node44 -->
 <g id="edge181" class="edge"><title>Node43&#45;&gt;Node44</title>
-<path fill="none" stroke="midnightblue" d="M561.806,-985.444C535.057,-976.359 492.597,-961.939 462.695,-951.783"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="463.671,-948.418 453.076,-948.516 461.419,-955.046 463.671,-948.418"/>
+<path fill="none" stroke="midnightblue" d="M771.593,-929.324C760.891,-921.185 744.659,-908.839 731.837,-899.087"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="733.693,-896.102 723.615,-892.834 729.456,-901.673 733.693,-896.102"/>
 </g>
 <!-- Node45 -->
 <g id="node45" class="node"><title>Node45</title>
 <g id="a_node45"><a xlink:href="type__relation_8h.html" target="_top" xlink:title="Type relation and function for type inference(checking). ">
-<polygon fill="white" stroke="black" points="1227.5,-929.5 1227.5,-948.5 1346.5,-948.5 1346.5,-929.5 1227.5,-929.5"/>
-<text text-anchor="middle" x="1287" y="-936.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/type_relation.h</text>
+<polygon fill="white" stroke="black" points="1655.5,-873.5 1655.5,-892.5 1774.5,-892.5 1774.5,-873.5 1655.5,-873.5"/>
+<text text-anchor="middle" x="1715" y="-880.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/type_relation.h</text>
 </a>
 </g>
 </g>
 <!-- Node43&#45;&gt;Node45 -->
 <g id="edge185" class="edge"><title>Node43&#45;&gt;Node45</title>
-<path fill="none" stroke="midnightblue" d="M621.236,-991.359C730,-982.969 1069.16,-956.804 1216.97,-945.402"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1217.58,-948.866 1227.28,-944.607 1217.04,-941.887 1217.58,-948.866"/>
+<path fill="none" stroke="midnightblue" d="M817.276,-936.014C953.534,-928.119 1458.48,-898.863 1645.09,-888.05"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1645.55,-891.53 1655.33,-887.457 1645.15,-884.542 1645.55,-891.53"/>
 </g>
 <!-- Node47 -->
 <g id="node47" class="node"><title>Node47</title>
 <g id="a_node47"><a xlink:href="attr__registry__map_8h.html" target="_top" xlink:title="Attribute map used in registry. ">
-<polygon fill="white" stroke="black" points="1358,-414.5 1358,-444.5 1482,-444.5 1482,-414.5 1358,-414.5"/>
-<text text-anchor="start" x="1366" y="-432.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/attr_registry</text>
-<text text-anchor="middle" x="1420" y="-421.5" font-family="Helvetica,sans-Serif" font-size="10.00">_map.h</text>
+<polygon fill="white" stroke="black" points="344,-358.5 344,-388.5 468,-388.5 468,-358.5 344,-358.5"/>
+<text text-anchor="start" x="352" y="-376.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/attr_registry</text>
+<text text-anchor="middle" x="406" y="-365.5" font-family="Helvetica,sans-Serif" font-size="10.00">_map.h</text>
 </a>
 </g>
 </g>
 <!-- Node43&#45;&gt;Node47 -->
 <g id="edge193" class="edge"><title>Node43&#45;&gt;Node47</title>
-<path fill="none" stroke="midnightblue" d="M621.195,-991.908C764.083,-981.164 1306,-919.611 1306,-604 1306,-604 1306,-604 1306,-546 1306,-502.22 1348,-469.033 1381.02,-449.71"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1383.05,-452.583 1390.05,-444.63 1379.62,-446.482 1383.05,-452.583"/>
+<path fill="none" stroke="midnightblue" d="M748.616,-935.667C691.248,-931.086 579.477,-919.009 551,-893 433.121,-785.338 451,-707.645 451,-548 451,-548 451,-548 451,-490 451,-456.106 433.967,-420.199 420.859,-397.585"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="423.699,-395.516 415.543,-388.752 417.701,-399.125 423.699,-395.516"/>
 </g>
 <!-- Node48 -->
 <g id="node48" class="node"><title>Node48</title>
 <g id="a_node48"><a xlink:href="registry_8h.html" target="_top" xlink:title="This file defines the TVM global function registry. ">
-<polygon fill="white" stroke="black" points="1092,-302.5 1092,-321.5 1214,-321.5 1214,-302.5 1092,-302.5"/>
-<text text-anchor="middle" x="1153" y="-309.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/registry.h</text>
+<polygon fill="white" stroke="black" points="821,-302.5 821,-321.5 943,-321.5 943,-302.5 821,-302.5"/>
+<text text-anchor="middle" x="882" y="-309.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/registry.h</text>
 </a>
 </g>
 </g>
 <!-- Node43&#45;&gt;Node48 -->
 <g id="edge197" class="edge"><title>Node43&#45;&gt;Node48</title>
-<path fill="none" stroke="midnightblue" d="M552.779,-991.786C498.824,-987.502 397.854,-976.006 376,-949 352.701,-920.208 329.742,-957.524 414,-817 560.596,-572.509 665.65,-555.718 913,-414 959.231,-387.512 970.029,-378.994 1019,-358 1049.9,-344.753 1086.1,-332.797 1113.08,-324.544"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1114.38,-327.808 1122.94,-321.567 1112.36,-321.107 1114.38,-327.808"/>
+<path fill="none" stroke="midnightblue" d="M748.909,-934.003C721.273,-928.999 683.227,-917.821 660,-893 639.435,-871.024 641,-858.098 641,-828 641,-828 641,-828 641,-602 641,-467.778 796.225,-362.854 857.523,-326.653"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="859.294,-329.672 866.187,-321.627 855.781,-323.618 859.294,-329.672"/>
 </g>
 <!-- Node45&#45;&gt;Node2 -->
 <g id="edge186" class="edge"><title>Node45&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M1234.6,-929.442C1205.06,-922.854 1168.48,-911.619 1140,-893 1097.67,-865.329 1062.82,-815.581 1046.31,-789.322"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1049.29,-787.488 1041.08,-780.794 1043.32,-791.148 1049.29,-787.488"/>
+<path fill="none" stroke="midnightblue" d="M1721.58,-873.401C1737.31,-853.028 1778.76,-800.565 1818,-761 1828.51,-750.405 1841.15,-739.427 1851.34,-730.967"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1853.7,-733.559 1859.22,-724.517 1849.27,-728.143 1853.7,-733.559"/>
 </g>
 <!-- Node45&#45;&gt;Node33 -->
 <g id="edge192" class="edge"><title>Node45&#45;&gt;Node33</title>
-<path fill="none" stroke="midnightblue" d="M1341.74,-929.439C1448.77,-911.435 1691.86,-864.289 1881,-781 1924.12,-762.014 1935.78,-756.288 1971,-725 1986.98,-710.807 2001.85,-691.323 2011.56,-677.396"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2014.69,-679.015 2017.41,-668.775 2008.9,-675.085 2014.69,-679.015"/>
+<path fill="none" stroke="midnightblue" d="M1772.38,-873.455C1861.24,-858.587 2022,-824.441 2022,-772 2022,-772 2022,-772 2022,-714 2022,-676.883 2048.65,-640.378 2066.43,-620.158"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2069.24,-622.276 2073.4,-612.535 2064.07,-617.552 2069.24,-622.276"/>
 </g>
 <!-- Node45&#45;&gt;Node39 -->
 <g id="edge191" class="edge"><title>Node45&#45;&gt;Node39</title>
-<path fill="none" stroke="midnightblue" d="M1308.07,-929.444C1330.06,-920.517 1364.73,-906.439 1389.66,-896.317"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1391.08,-899.521 1399.02,-892.516 1388.44,-893.035 1391.08,-899.521"/>
+<path fill="none" stroke="midnightblue" d="M1710.21,-873.083C1706.24,-865.691 1700.47,-854.953 1695.57,-845.811"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1698.51,-843.905 1690.7,-836.751 1692.35,-847.217 1698.51,-843.905"/>
 </g>
 <!-- Node46 -->
 <g id="node46" class="node"><title>Node46</title>
 <g id="a_node46"><a xlink:href="env__func_8h.html" target="_top" xlink:title="Serializable global function used in IR. ">
-<polygon fill="white" stroke="black" points="1140.5,-537.5 1140.5,-556.5 1239.5,-556.5 1239.5,-537.5 1140.5,-537.5"/>
-<text text-anchor="middle" x="1190" y="-544.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/env_func.h</text>
+<polygon fill="white" stroke="black" points="1151.5,-481.5 1151.5,-500.5 1250.5,-500.5 1250.5,-481.5 1151.5,-481.5"/>
+<text text-anchor="middle" x="1201" y="-488.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/env_func.h</text>
 </a>
 </g>
 </g>
 <!-- Node45&#45;&gt;Node46 -->
 <g id="edge187" class="edge"><title>Node45&#45;&gt;Node46</title>
-<path fill="none" stroke="midnightblue" d="M1260.09,-929.41C1221.22,-915.126 1154,-882.535 1154,-828 1154,-828 1154,-828 1154,-658 1154,-623.982 1169.74,-586.85 1180.41,-565.6"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1183.62,-567.012 1185.14,-556.527 1177.41,-563.772 1183.62,-567.012"/>
+<path fill="none" stroke="midnightblue" d="M1655.32,-881.487C1515.74,-878.894 1174.42,-864.016 1104,-781 1098.25,-774.221 1102.47,-769.756 1104,-761 1108.55,-734.982 1172.57,-566.327 1194.04,-510.163"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1197.43,-511.096 1197.73,-500.505 1190.89,-508.593 1197.43,-511.096"/>
 </g>
 <!-- Node46&#45;&gt;Node13 -->
 <g id="edge189" class="edge"><title>Node46&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M1140.42,-544.649C1034.02,-539.157 781.345,-511.883 632,-378 567.645,-320.307 573.235,-283.693 556,-199 544.301,-141.512 533.153,-121.035 556,-67 562.092,-52.591 574.53,-40.2679 585.713,-31.4025"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="587.958,-34.0949 593.895,-25.3198 583.781,-28.4772 587.958,-34.0949"/>
+<path fill="none" stroke="midnightblue" d="M1250.7,-489.534C1434.77,-487.159 2076.5,-472.905 2260,-389 2379.34,-334.432 2387.84,-286.094 2486,-199 2550.21,-142.026 2549.9,-104.741 2627,-67 2722.66,-20.1768 2852.15,-15.119 2911.66,-15.5636"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2911.88,-19.0669 2921.93,-15.7018 2911.98,-12.0675 2911.88,-19.0669"/>
 </g>
 <!-- Node46&#45;&gt;Node15 -->
 <g id="edge190" class="edge"><title>Node46&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M1194.47,-537.174C1209.52,-507.345 1259.26,-407.385 1294,-322 1329.34,-235.158 1310.29,-199.844 1364,-123 1386.43,-90.9108 1396.22,-82.892 1432,-67 1538.29,-19.7918 1679.71,-15.1555 1741.67,-15.6612"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1741.9,-19.1646 1751.95,-15.7998 1742,-12.1652 1741.9,-19.1646"/>
+<path fill="none" stroke="midnightblue" d="M1151.25,-484.683C969.825,-465.23 353.297,-398.566 335,-389 254.079,-346.692 261.991,-301.109 199,-235 183.173,-218.389 173.441,-218.888 162,-199 132.738,-148.134 118.147,-109.126 159,-67 185.008,-40.1814 293.978,-25.3671 348.562,-19.5014"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="349.128,-22.9615 358.713,-18.4467 348.405,-15.999 349.128,-22.9615"/>
 </g>
 <!-- Node46&#45;&gt;Node27 -->
 <g id="edge188" class="edge"><title>Node46&#45;&gt;Node27</title>
-<path fill="none" stroke="midnightblue" d="M1239.64,-544.693C1397.67,-540.387 1903.15,-525.513 2321,-501 2335.91,-500.125 2351.88,-499.005 2367.06,-497.854"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2367.72,-501.314 2377.42,-497.055 2367.18,-494.335 2367.72,-501.314"/>
+<path fill="none" stroke="midnightblue" d="M1250.76,-485.808C1364.03,-476.265 1641.35,-452.903 1771.89,-441.906"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1772.5,-445.368 1782.17,-441.04 1771.91,-438.392 1772.5,-445.368"/>
 </g>
 <!-- Node47&#45;&gt;Node7 -->
 <g id="edge194" class="edge"><title>Node47&#45;&gt;Node7</title>
-<path fill="none" stroke="midnightblue" d="M1482.1,-420.289C1565.47,-409.265 1713.18,-389.736 1800.28,-378.219"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1800.88,-381.67 1810.33,-376.89 1799.96,-374.731 1800.88,-381.67"/>
+<path fill="none" stroke="midnightblue" d="M468.213,-369.195C661.799,-358.911 1252.69,-327.52 1456.23,-316.707"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1456.69,-320.187 1466.49,-316.161 1456.32,-313.197 1456.69,-320.187"/>
 </g>
 <!-- Node47&#45;&gt;Node15 -->
 <g id="edge195" class="edge"><title>Node47&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M1411.62,-414.203C1385.16,-367.03 1309.22,-214.143 1379,-123 1423.87,-64.3916 1656.66,-30.641 1741.78,-20.1054"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1742.36,-23.5607 1751.87,-18.8809 1741.52,-16.6118 1742.36,-23.5607"/>
+<path fill="none" stroke="midnightblue" d="M367.718,-358.463C347.465,-349.876 322.942,-337.542 304,-322 266.271,-291.043 273.567,-267.322 237,-235 213.413,-214.151 191.61,-226.338 176,-199 146.91,-148.054 139.842,-113.2 176,-67 197.143,-39.9852 297.296,-25.4099 348.977,-19.5754"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="349.364,-23.054 358.927,-18.4928 348.607,-16.0951 349.364,-23.054"/>
 </g>
-<!-- Node47&#45;&gt;Node21 -->
-<g id="edge196" class="edge"><title>Node47&#45;&gt;Node21</title>
-<path fill="none" stroke="midnightblue" d="M1404.35,-414.247C1395.34,-404.934 1384.85,-391.943 1380,-378 1351.84,-297.082 1387.43,-193.206 1404.18,-151.998"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1407.43,-153.294 1408.07,-142.718 1400.98,-150.588 1407.43,-153.294"/>
+<!-- Node47&#45;&gt;Node19 -->
+<g id="edge196" class="edge"><title>Node47&#45;&gt;Node19</title>
+<path fill="none" stroke="midnightblue" d="M409.562,-358.355C419.582,-321.76 451.707,-223.708 518,-179 563.84,-148.086 729.5,-138.063 801.825,-135.116"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="802.339,-138.599 812.196,-134.716 802.069,-131.604 802.339,-138.599"/>
 </g>
 <!-- Node48&#45;&gt;Node13 -->
 <g id="edge199" class="edge"><title>Node48&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M1147.37,-302.179C1141.72,-293.209 1132.9,-278.841 1126,-266 1110.38,-236.93 1108.13,-228.824 1094,-199 1066.25,-140.423 1084.56,-104.93 1032,-67 969.461,-21.8683 728.484,-16.74 640.444,-16.4017"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="640.257,-12.9014 630.25,-16.3818 640.244,-19.9014 640.257,-12.9014"/>
+<path fill="none" stroke="midnightblue" d="M943.146,-306.996C1054.94,-299.585 1299.78,-282.936 1506,-266 1829.39,-239.44 1915.94,-268.001 2233,-199 2306.62,-182.979 2326.73,-178.835 2393,-143 2441.79,-116.616 2440.55,-87.729 2492,-67 2568.54,-36.1643 2821.38,-22.018 2911.63,-17.8633"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2911.98,-21.3514 2921.81,-17.4057 2911.66,-14.3584 2911.98,-21.3514"/>
 </g>
 <!-- Node48&#45;&gt;Node15 -->
 <g id="edge200" class="edge"><title>Node48&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M1150.96,-302.283C1143,-265.811 1118.06,-124.674 1194,-67 1237.84,-33.7089 1627.62,-20.4801 1741.74,-17.3001"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1742,-20.7943 1751.9,-17.0234 1741.81,-13.7969 1742,-20.7943"/>
+<path fill="none" stroke="midnightblue" d="M820.588,-309.437C716.139,-303.141 505.388,-273.921 404,-143 379.559,-111.44 377.538,-62.3566 378.551,-35.5538"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="382.064,-35.4301 379.137,-25.2475 375.075,-35.0325 382.064,-35.4301"/>
 </g>
-<!-- Node48&#45;&gt;Node16 -->
-<g id="edge198" class="edge"><title>Node48&#45;&gt;Node16</title>
-<path fill="none" stroke="midnightblue" d="M1214.25,-306.84C1373.12,-296.049 1797.49,-267.224 1962.28,-256.032"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1962.54,-259.522 1972.28,-255.352 1962.07,-252.538 1962.54,-259.522"/>
+<!-- Node48&#45;&gt;Node19 -->
+<g id="edge201" class="edge"><title>Node48&#45;&gt;Node19</title>
+<path fill="none" stroke="midnightblue" d="M862.623,-302.423C830.778,-287.074 768.652,-251.521 746,-199 733.793,-170.697 771.959,-152.39 802.327,-142.634"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="803.674,-145.884 812.242,-139.652 801.658,-139.181 803.674,-145.884"/>
 </g>
-<!-- Node48&#45;&gt;Node21 -->
-<g id="edge201" class="edge"><title>Node48&#45;&gt;Node21</title>
-<path fill="none" stroke="midnightblue" d="M1162.77,-302.224C1187.92,-279.885 1257.47,-219.758 1322,-179 1341.44,-166.72 1364.68,-155.172 1382.68,-146.849"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1384.42,-149.9 1392.08,-142.573 1381.53,-143.528 1384.42,-149.9"/>
+<!-- Node48&#45;&gt;Node20 -->
+<g id="edge198" class="edge"><title>Node48&#45;&gt;Node20</title>
+<path fill="none" stroke="midnightblue" d="M943.154,-304.491C1048.81,-293.244 1264.72,-270.264 1374.18,-258.612"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1374.86,-262.06 1384.43,-257.521 1374.12,-255.099 1374.86,-262.06"/>
 </g>
 <!-- Node49&#45;&gt;Node2 -->
 <g id="edge209" class="edge"><title>Node49&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M1460.28,-993.683C1394.13,-991.571 1220.32,-977.764 1112,-893 1085.72,-872.438 1079.57,-865.363 1062,-837 1052.91,-822.326 1045.9,-803.926 1041.47,-790.452"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1044.79,-789.367 1038.47,-780.868 1038.11,-791.457 1044.79,-789.367"/>
+<path fill="none" stroke="midnightblue" d="M2272.39,-929.351C2225.41,-903.376 2081.15,-823.956 1960,-761 1938.94,-750.057 1914.89,-738.057 1896.95,-729.202"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1898.19,-725.911 1887.67,-724.634 1895.1,-732.191 1898.19,-725.911"/>
 </g>
 <!-- Node49&#45;&gt;Node13 -->
 <g id="edge218" class="edge"><title>Node49&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M1460.46,-991.461C1391.55,-984.834 1201.27,-966.33 1043,-949 769.864,-919.094 660.919,-993.392 435,-837 262.796,-717.792 114,-701.439 114,-492 114,-492 114,-492 114,-132 114,-94.4425 134.967,-84.8715 168,-67 238.591,-28.809 486.656,-19.3231 575.797,-17.1227"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="575.941,-20.6204 585.857,-16.8891 575.779,-13.6223 575.941,-20.6204"/>
+<path fill="none" stroke="midnightblue" d="M2314.56,-937.164C2498.39,-931.212 3574,-893.578 3574,-828 3574,-828 3574,-828 3574,-132 3574,-101.205 3574.51,-85.6397 3550,-67 3504.11,-32.105 3095.35,-19.9926 2976.36,-17.189"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2976.16,-13.6836 2966.08,-16.9533 2976,-20.6818 2976.16,-13.6836"/>
 </g>
 <!-- Node49&#45;&gt;Node33 -->
 <g id="edge214" class="edge"><title>Node49&#45;&gt;Node33</title>
-<path fill="none" stroke="midnightblue" d="M1513.55,-991.398C1558.98,-986.442 1654.15,-973.857 1731,-949 1861.14,-906.906 1881.24,-865.838 2009,-817 2061.81,-796.814 2097.15,-826.28 2131,-781 2162.2,-739.259 2091.84,-694.627 2050.46,-673.102"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2051.88,-669.899 2041.37,-668.505 2048.72,-676.145 2051.88,-669.899"/>
+<path fill="none" stroke="midnightblue" d="M2289.17,-929.235C2292.34,-902.258 2298.92,-818.811 2268,-761 2231.02,-691.86 2149.94,-640.469 2108.11,-617.418"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2109.55,-614.22 2099.09,-612.553 2106.23,-620.381 2109.55,-614.22"/>
 </g>
 <!-- Node49&#45;&gt;Node34 -->
 <g id="edge219" class="edge"><title>Node49&#45;&gt;Node34</title>
-<path fill="none" stroke="midnightblue" d="M1513.64,-991.658C1582.35,-985.536 1771.21,-968.191 1928,-949 1929.3,-948.841 1930.61,-948.678 1931.93,-948.511"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1932.72,-951.937 1942.19,-947.171 1931.82,-944.996 1932.72,-951.937"/>
+<path fill="none" stroke="midnightblue" d="M2314.92,-931.27C2351.33,-922.168 2416.7,-905.825 2460.22,-894.944"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2461.12,-898.328 2469.97,-892.507 2459.42,-891.537 2461.12,-898.328"/>
 </g>
 <!-- Node49&#45;&gt;Node35 -->
 <g id="edge217" class="edge"><title>Node49&#45;&gt;Node35</title>
-<path fill="none" stroke="midnightblue" d="M1513.52,-994.068C1578.85,-993.591 1752.26,-988.389 1890,-949 1892.86,-948.183 1960.1,-915.813 1998.95,-897.069"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2000.67,-900.124 2008.15,-892.625 1997.62,-893.82 2000.67,-900.124"/>
+<path fill="none" stroke="midnightblue" d="M2314.52,-934.51C2363.49,-927.87 2471.31,-912.338 2561,-893 2634.18,-877.221 2718.31,-853.429 2765.92,-839.43"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2767.19,-842.704 2775.79,-836.513 2765.21,-835.991 2767.19,-842.704"/>
 </g>
 <!-- Node49&#45;&gt;Node45 -->
 <g id="edge215" class="edge"><title>Node49&#45;&gt;Node45</title>
-<path fill="none" stroke="midnightblue" d="M1460.44,-986.829C1426.72,-977.724 1368.16,-961.913 1328.51,-951.209"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1329.19,-947.765 1318.62,-948.537 1327.36,-954.523 1329.19,-947.765"/>
+<path fill="none" stroke="midnightblue" d="M2261.13,-935.468C2176.25,-927.469 1911.99,-902.564 1784.79,-890.577"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1785.05,-887.086 1774.76,-889.632 1784.39,-894.055 1785.05,-887.086"/>
 </g>
 <!-- Node49&#45;&gt;Node46 -->
 <g id="edge210" class="edge"><title>Node49&#45;&gt;Node46</title>
-<path fill="none" stroke="midnightblue" d="M1470.7,-985.482C1415.27,-956.378 1236.68,-861.344 1221,-837 1164.71,-749.615 1178.94,-615.747 1186.64,-566.776"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1190.13,-567.143 1188.33,-556.702 1183.23,-565.986 1190.13,-567.143"/>
+<path fill="none" stroke="midnightblue" d="M2261.39,-937.217C2074.9,-931.557 971,-895.219 971,-828 971,-828 971,-828 971,-658 971,-568.653 1086.53,-522.57 1153.83,-503.305"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1155.09,-506.589 1163.79,-500.548 1153.22,-499.842 1155.09,-506.589"/>
 </g>
 <!-- Node49&#45;&gt;Node48 -->
 <g id="edge216" class="edge"><title>Node49&#45;&gt;Node48</title>
-<path fill="none" stroke="midnightblue" d="M1460.27,-991.402C1331.23,-978.245 775.088,-914.3 680,-781 531.932,-573.429 579.704,-667.885 1050,-358 1070.86,-344.252 1096.63,-332.999 1117.17,-325.184"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1118.62,-328.378 1126.78,-321.628 1116.19,-321.813 1118.62,-328.378"/>
+<path fill="none" stroke="midnightblue" d="M2261.23,-938.269C2136.2,-939.245 1597.32,-940.354 1159,-893 959.234,-871.419 743,-916.929 743,-716 743,-716 743,-716 743,-658 743,-522.999 835.702,-378.409 869.695,-329.926"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="872.716,-331.718 875.666,-321.542 867.014,-327.657 872.716,-331.718"/>
 </g>
 <!-- Node50 -->
 <g id="node50" class="node"><title>Node50</title>
 <g id="a_node50"><a xlink:href="tensor__type_8h.html" target="_top" xlink:title="Polymorphic tensor types. ">
-<polygon fill="white" stroke="black" points="2009.5,-761.5 2009.5,-780.5 2122.5,-780.5 2122.5,-761.5 2009.5,-761.5"/>
-<text text-anchor="middle" x="2066" y="-768.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/tensor_type.h</text>
+<polygon fill="white" stroke="black" points="2307.5,-705.5 2307.5,-724.5 2420.5,-724.5 2420.5,-705.5 2307.5,-705.5"/>
+<text text-anchor="middle" x="2364" y="-712.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/tensor_type.h</text>
 </a>
 </g>
 </g>
 <!-- Node49&#45;&gt;Node50 -->
 <g id="edge211" class="edge"><title>Node49&#45;&gt;Node50</title>
-<path fill="none" stroke="midnightblue" d="M1513.52,-992.414C1555.12,-989.064 1637.43,-978.914 1700,-949 1783.79,-908.941 1778.39,-857.432 1862,-817 1905.13,-796.142 1958.08,-784.828 1999.22,-778.762"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1999.72,-782.225 2009.14,-777.366 1998.75,-775.293 1999.72,-782.225"/>
+<path fill="none" stroke="midnightblue" d="M2290.98,-929.297C2302.21,-896.494 2342.13,-779.884 2357.71,-734.377"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2361.03,-735.478 2360.96,-724.884 2354.41,-733.211 2361.03,-735.478"/>
 </g>
 <!-- Node50&#45;&gt;Node4 -->
 <g id="edge212" class="edge"><title>Node50&#45;&gt;Node4</title>
-<path fill="none" stroke="midnightblue" d="M2102.76,-761.444C2143.06,-752.063 2207.81,-736.993 2251.58,-726.804"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2252.46,-730.192 2261.41,-724.516 2250.88,-723.375 2252.46,-730.192"/>
+<path fill="none" stroke="midnightblue" d="M2413.6,-705.444C2472.46,-695.288 2569.98,-678.463 2628.41,-668.384"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2629.23,-671.793 2638.49,-666.644 2628.04,-664.895 2629.23,-671.793"/>
 </g>
 <!-- Node50&#45;&gt;Node33 -->
 <g id="edge213" class="edge"><title>Node50&#45;&gt;Node33</title>
-<path fill="none" stroke="midnightblue" d="M2062.87,-761.12C2058.4,-748.559 2049.87,-724.912 2042,-705 2038.45,-696.017 2034.29,-686.119 2030.78,-677.899"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2033.93,-676.375 2026.76,-668.579 2027.51,-679.147 2033.93,-676.375"/>
+<path fill="none" stroke="midnightblue" d="M2357.18,-705.271C2345.59,-691.098 2320.63,-663.236 2293,-649 2241.41,-622.423 2174.98,-611.533 2130.57,-607.077"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2130.89,-603.591 2120.61,-606.148 2130.24,-610.561 2130.89,-603.591"/>
 </g>
 </g>
 </svg>
diff --git a/docs/api/doxygen/algorithm_8h_source.html b/docs/api/doxygen/algorithm_8h_source.html
index 91b1e77..874d691 100644
--- a/docs/api/doxygen/algorithm_8h_source.html
+++ b/docs/api/doxygen/algorithm_8h_source.html
@@ -104,7 +104,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <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: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="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:42</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:634</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:651</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:59</div></div>
 <div class="ttc" id="structtvm_1_1relay_1_1TopKAttrs_html_a5f602cd29db662fad78e59159c371c3e"><div class="ttname"><a href="structtvm_1_1relay_1_1TopKAttrs.html#a5f602cd29db662fad78e59159c371c3e">tvm::relay::TopKAttrs::k</a></div><div class="ttdeci">Optional&lt; Integer &gt; k</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:55</div></div>
diff --git a/docs/api/doxygen/analyzer_8h.html b/docs/api/doxygen/analyzer_8h.html
index 67942ca..3ec7d28 100644
--- a/docs/api/doxygen/analyzer_8h.html
+++ b/docs/api/doxygen/analyzer_8h.html
@@ -87,7 +87,8 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 <div class="header">
   <div class="summary">
 <a href="#nested-classes">Classes</a> &#124;
-<a href="#namespaces">Namespaces</a>  </div>
+<a href="#namespaces">Namespaces</a> &#124;
+<a href="#enum-members">Enumerations</a>  </div>
   <div class="headertitle">
 <div class="title">analyzer.h File Reference</div>  </div>
 </div><!--header-->
@@ -105,7 +106,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
 </div><div class="textblock"><div class="dynheader">
 Include dependency graph for analyzer.h:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="analyzer_8h__incl.svg" width="3892" height="1426"><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="analyzer_8h__incl.svg" width="3835" height="1351"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
 </div>
 </div>
 </div><div class="textblock"><div class="dynheader">
@@ -160,6 +161,13 @@ Namespaces</h2></td></tr>
 <tr class="memitem:namespacetvm_1_1arith"><td class="memItemLeft" align="right" valign="top"> &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacetvm_1_1arith.html">tvm::arith</a></td></tr>
 <tr class="memdesc:namespacetvm_1_1arith"><td class="mdescLeft">&#160;</td><td class="mdescRight">namespace of arithmetic analysis. <br /></td></tr>
 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
+</table><table class="memberdecls">
+<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr class="memitem:ac6a38da661cd3681eb85abe1cd810422"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacetvm_1_1arith.html#ac6a38da661cd3681eb85abe1cd810422">tvm::arith::DivMode</a> { <a class="el" href="namespacetvm_1_1arith.html#ac6a38da661cd3681eb85abe1cd810422aa6da1e276448319d25de8fe181872432">tvm::arith::kTruncDiv</a>, 
+<a class="el" href="namespacetvm_1_1arith.html#ac6a38da661cd3681eb85abe1cd810422aad0250170b362173e1e2a2e3a6f13d20">tvm::arith::kFloorDiv</a>
+ }</td></tr>
+<tr class="separator:ac6a38da661cd3681eb85abe1cd810422"><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>Algebra expression simplifications. </p>
diff --git a/docs/api/doxygen/analyzer_8h__incl.svg b/docs/api/doxygen/analyzer_8h__incl.svg
index dd224fe..6f1bffd 100644
--- a/docs/api/doxygen/analyzer_8h__incl.svg
+++ b/docs/api/doxygen/analyzer_8h__incl.svg
@@ -4,1131 +4,1131 @@
 <!-- Generated by graphviz version 2.38.0 (20140413.2041)
  -->
 <!-- Title: include/tvm/arith/analyzer.h Pages: 1 -->
-<svg width="2919pt" height="1069pt"
- viewBox="0.00 0.00 2918.92 1069.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 1065)">
+<svg width="2876pt" height="1013pt"
+ viewBox="0.00 0.00 2876.26 1013.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 1009)">
 <title>include/tvm/arith/analyzer.h</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-1065 2914.92,-1065 2914.92,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-1009 2872.26,-1009 2872.26,4 -4,4"/>
 <!-- Node1 -->
 <g id="node1" class="node"><title>Node1</title>
-<polygon fill="#bfbfbf" stroke="black" points="2646.42,-1041.5 2646.42,-1060.5 2795.42,-1060.5 2795.42,-1041.5 2646.42,-1041.5"/>
-<text text-anchor="middle" x="2720.92" y="-1048.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/arith/analyzer.h</text>
+<polygon fill="#bfbfbf" stroke="black" points="1985.5,-985.5 1985.5,-1004.5 2134.5,-1004.5 2134.5,-985.5 1985.5,-985.5"/>
+<text text-anchor="middle" x="2060" y="-992.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/arith/analyzer.h</text>
 </g>
 <!-- Node2 -->
 <g id="node2" class="node"><title>Node2</title>
 <g id="a_node2"><a xlink:href="int__set_8h.html" target="_top" xlink:title="Integer set. ">
-<polygon fill="white" stroke="black" points="2474.92,-985.5 2474.92,-1004.5 2578.92,-1004.5 2578.92,-985.5 2474.92,-985.5"/>
-<text text-anchor="middle" x="2526.92" y="-992.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/arith/int_set.h</text>
+<polygon fill="white" stroke="black" points="2008,-929.5 2008,-948.5 2112,-948.5 2112,-929.5 2008,-929.5"/>
+<text text-anchor="middle" x="2060" y="-936.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/arith/int_set.h</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node2 -->
 <g id="edge1" class="edge"><title>Node1&#45;&gt;Node2</title>
-<path fill="none" stroke="midnightblue" d="M2690.18,-1041.44C2656.98,-1032.2 2603.93,-1017.44 2567.37,-1007.26"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2568.09,-1003.83 2557.52,-1004.52 2566.22,-1010.57 2568.09,-1003.83"/>
+<path fill="none" stroke="midnightblue" d="M2060,-985.083C2060,-978.006 2060,-967.861 2060,-958.986"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2063.5,-958.751 2060,-948.751 2056.5,-958.751 2063.5,-958.751"/>
 </g>
 <!-- Node3 -->
 <g id="node3" class="node"><title>Node3</title>
 <g id="a_node3"><a xlink:href="ir_2expr_8h.html" target="_top" xlink:title="Base expr nodes in TVM. ">
-<polygon fill="white" stroke="black" points="1730.42,-761.5 1730.42,-780.5 1807.42,-780.5 1807.42,-761.5 1730.42,-761.5"/>
-<text text-anchor="middle" x="1768.92" y="-768.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/expr.h</text>
+<polygon fill="white" stroke="black" points="1946.5,-705.5 1946.5,-724.5 2023.5,-724.5 2023.5,-705.5 1946.5,-705.5"/>
+<text text-anchor="middle" x="1985" y="-712.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/expr.h</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node3 -->
 <g id="edge156" class="edge"><title>Node1&#45;&gt;Node3</title>
-<path fill="none" stroke="midnightblue" d="M2700.28,-1041.42C2667.43,-1026.23 2606.92,-991.293 2606.92,-940 2606.92,-940 2606.92,-940 2606.92,-882 2606.92,-801.883 1997.01,-778.405 1817.85,-773.237"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1817.76,-769.733 1807.66,-772.95 1817.56,-776.73 1817.76,-769.733"/>
+<path fill="none" stroke="midnightblue" d="M1985.4,-994.003C1745.75,-993.038 1011,-982.082 1011,-884 1011,-884 1011,-884 1011,-826 1011,-731.856 1738.79,-718.278 1936.14,-716.326"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1936.25,-719.825 1946.22,-716.232 1936.18,-712.826 1936.25,-719.825"/>
+</g>
+<!-- Node23 -->
+<g id="node23" class="node"><title>Node23</title>
+<polygon fill="white" stroke="#bfbfbf" points="1558.5,-179.5 1558.5,-198.5 1615.5,-198.5 1615.5,-179.5 1558.5,-179.5"/>
+<text text-anchor="middle" x="1587" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">memory</text>
+</g>
+<!-- Node1&#45;&gt;Node23 -->
+<g id="edge161" class="edge"><title>Node1&#45;&gt;Node23</title>
+<path fill="none" stroke="midnightblue" d="M2134.67,-989.031C2319.86,-974.97 2781.71,-928.46 2729,-817 2659.47,-669.982 2305.36,-428.908 2159,-358 2061,-310.519 1737.62,-227.583 1625.6,-199.561"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1626.29,-196.126 1615.74,-197.1 1624.6,-202.918 1626.29,-196.126"/>
 </g>
 <!-- Node24 -->
 <g id="node24" class="node"><title>Node24</title>
-<polygon fill="white" stroke="#bfbfbf" points="1837.42,-179.5 1837.42,-198.5 1894.42,-198.5 1894.42,-179.5 1837.42,-179.5"/>
-<text text-anchor="middle" x="1865.92" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">memory</text>
+<polygon fill="white" stroke="#bfbfbf" points="2744.5,-179.5 2744.5,-198.5 2837.5,-198.5 2837.5,-179.5 2744.5,-179.5"/>
+<text text-anchor="middle" x="2791" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">unordered_map</text>
 </g>
 <!-- Node1&#45;&gt;Node24 -->
-<g id="edge161" class="edge"><title>Node1&#45;&gt;Node24</title>
-<path fill="none" stroke="midnightblue" d="M2726.21,-1041.23C2736.65,-1023.04 2758.92,-979.601 2758.92,-940 2758.92,-940 2758.92,-940 2758.92,-826 2758.92,-744.858 2682.92,-741.142 2682.92,-660 2682.92,-660 2682.92,-660 2682.92,-602 2682.92,-521.541 2644.92,-505.459 2644.92,-425 2644.92,-425 2644.92,-425 2644.92,-305.5 2644.92,-270.518 2639.09,-254.323 2609.92,-235 2550.93,-195.906 2049.4,-190.766 1904.8,-190.098"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1904.64,-186.597 1894.63,-190.056 1904.61,-193.597 1904.64,-186.597"/>
+<g id="edge162" class="edge"><title>Node1&#45;&gt;Node24</title>
+<path fill="none" stroke="midnightblue" d="M2134.53,-991.103C2327.77,-982.603 2830,-953.798 2830,-884 2830,-884 2830,-884 2830,-305.5 2830,-269.16 2812.46,-229.609 2800.9,-207.502"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2803.94,-205.768 2796.1,-198.647 2797.79,-209.106 2803.94,-205.768"/>
 </g>
 <!-- Node25 -->
 <g id="node25" class="node"><title>Node25</title>
-<polygon fill="white" stroke="#bfbfbf" points="2750.42,-179.5 2750.42,-198.5 2843.42,-198.5 2843.42,-179.5 2750.42,-179.5"/>
-<text text-anchor="middle" x="2796.92" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">unordered_map</text>
+<polygon fill="white" stroke="#bfbfbf" points="922.5,-179.5 922.5,-198.5 969.5,-198.5 969.5,-179.5 922.5,-179.5"/>
+<text text-anchor="middle" x="946" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">vector</text>
 </g>
 <!-- Node1&#45;&gt;Node25 -->
-<g id="edge162" class="edge"><title>Node1&#45;&gt;Node25</title>
-<path fill="none" stroke="midnightblue" d="M2795.56,-1044.81C2827.08,-1039.11 2862.14,-1027.67 2886.92,-1005 2909.65,-984.215 2910.92,-970.795 2910.92,-940 2910.92,-940 2910.92,-940 2910.92,-367 2910.92,-297.546 2848.11,-233.679 2815.74,-205.371"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2817.74,-202.476 2807.85,-198.656 2813.2,-207.805 2817.74,-202.476"/>
+<g id="edge163" class="edge"><title>Node1&#45;&gt;Node25</title>
+<path fill="none" stroke="midnightblue" d="M1985.43,-993.537C1639.65,-990.909 209,-974.565 209,-884 209,-884 209,-884 209,-546 209,-387.618 767.845,-235.126 912.265,-198.362"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="913.477,-201.666 922.313,-195.821 911.761,-194.88 913.477,-201.666"/>
 </g>
-<!-- Node26 -->
-<g id="node26" class="node"><title>Node26</title>
-<polygon fill="white" stroke="#bfbfbf" points="468.424,-179.5 468.424,-198.5 515.424,-198.5 515.424,-179.5 468.424,-179.5"/>
-<text text-anchor="middle" x="491.924" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">vector</text>
-</g>
-<!-- Node1&#45;&gt;Node26 -->
-<g id="edge163" class="edge"><title>Node1&#45;&gt;Node26</title>
-<path fill="none" stroke="midnightblue" d="M2646.1,-1048.93C2212.43,-1042.52 40.9239,-1007.07 40.9239,-940 40.9239,-940 40.9239,-940 40.9239,-826 40.9239,-752.242 197.187,-559.996 298.924,-414 354.988,-333.545 358.181,-303.936 427.924,-235 439.973,-223.091 455.473,-212.104 468.201,-203.968"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="470.24,-206.822 476.891,-198.575 466.548,-200.875 470.24,-206.822"/>
-</g>
-<!-- Node31 -->
-<g id="node31" class="node"><title>Node31</title>
-<polygon fill="white" stroke="#bfbfbf" points="2558.92,-235.5 2558.92,-254.5 2600.92,-254.5 2600.92,-235.5 2558.92,-235.5"/>
-<text text-anchor="middle" x="2579.92" y="-242.5" font-family="Helvetica,sans-Serif" font-size="10.00">limits</text>
+<!-- Node34 -->
+<g id="node34" class="node"><title>Node34</title>
+<polygon fill="white" stroke="#bfbfbf" points="44,-235.5 44,-254.5 86,-254.5 86,-235.5 44,-235.5"/>
+<text text-anchor="middle" x="65" y="-242.5" font-family="Helvetica,sans-Serif" font-size="10.00">limits</text>
 </g>
-<!-- Node1&#45;&gt;Node31 -->
-<g id="edge160" class="edge"><title>Node1&#45;&gt;Node31</title>
-<path fill="none" stroke="midnightblue" d="M2720.92,-1041.44C2720.92,-1022.94 2720.92,-977.812 2720.92,-940 2720.92,-940 2720.92,-940 2720.92,-882 2720.92,-800.858 2644.92,-797.142 2644.92,-716 2644.92,-716 2644.92,-716 2644.92,-602 2644.92,-521.541 2606.92,-505.459 2606.92,-425 2606.92,-425 2606.92,-425 2606.92,-367 2606.92,-329.838 2594.64,-287.764 2586.65,-264.308"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2589.87,-262.919 2583.23,-254.657 2583.27,-265.252 2589.87,-262.919"/>
+<!-- Node1&#45;&gt;Node34 -->
+<g id="edge160" class="edge"><title>Node1&#45;&gt;Node34</title>
+<path fill="none" stroke="midnightblue" d="M1985.47,-993.816C1660.04,-992.796 371.956,-986.407 195,-949 121.111,-933.38 38,-959.522 38,-884 38,-884 38,-884 38,-367 38,-329.838 50.2814,-287.764 58.2781,-264.308"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="61.6564,-265.252 61.6893,-254.657 55.0566,-262.919 61.6564,-265.252"/>
 </g>
 <!-- Node46 -->
 <g id="node46" class="node"><title>Node46</title>
 <g id="a_node46"><a xlink:href="with_8h.html" target="_top" xlink:title="RAII wrapper function to enter and exit a context object similar to python&#39;s with syntax...">
-<polygon fill="white" stroke="black" points="1598.92,-123.5 1598.92,-142.5 1704.92,-142.5 1704.92,-123.5 1598.92,-123.5"/>
-<text text-anchor="middle" x="1651.92" y="-130.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/support/with.h</text>
+<polygon fill="white" stroke="black" points="2550,-123.5 2550,-142.5 2656,-142.5 2656,-123.5 2550,-123.5"/>
+<text text-anchor="middle" x="2603" y="-130.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/support/with.h</text>
 </a>
 </g>
 </g>
 <!-- Node1&#45;&gt;Node46 -->
 <g id="edge157" class="edge"><title>Node1&#45;&gt;Node46</title>
-<path fill="none" stroke="midnightblue" d="M2755.8,-1041.4C2800.67,-1028 2872.92,-997.493 2872.92,-940 2872.92,-940 2872.92,-940 2872.92,-658 2872.92,-519.924 2758.92,-507.076 2758.92,-369 2758.92,-369 2758.92,-369 2758.92,-305.5 2758.92,-242.49 2695.86,-254.454 2635.92,-235 2463.2,-178.935 1904.32,-146.574 1715.17,-137.014"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1715.27,-133.515 1705.11,-136.51 1714.92,-140.506 1715.27,-133.515"/>
+<path fill="none" stroke="midnightblue" d="M2134.68,-991.66C2280.37,-986.621 2597.58,-973.195 2704,-949 2780.45,-931.618 2868,-962.405 2868,-884 2868,-884 2868,-884 2868,-244 2868,-213.501 2869.05,-198.967 2846,-179 2819.69,-156.217 2729.15,-144.238 2666.35,-138.52"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2666.4,-135.011 2656.13,-137.622 2665.79,-141.984 2666.4,-135.011"/>
 </g>
 <!-- Node2&#45;&gt;Node3 -->
 <g id="edge2" class="edge"><title>Node2&#45;&gt;Node3</title>
-<path fill="none" stroke="midnightblue" d="M2497.67,-985.433C2380.07,-950.991 1941.65,-822.588 1807.91,-783.418"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1808.67,-779.993 1798.09,-780.541 1806.7,-786.711 1808.67,-779.993"/>
+<path fill="none" stroke="midnightblue" d="M2046.38,-929.436C2034.95,-921.471 2019.21,-908.516 2011,-893 1983.44,-840.944 1982.45,-768.882 1983.78,-735.02"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1987.29,-734.898 1984.31,-724.732 1980.3,-734.538 1987.29,-734.898"/>
 </g>
-<!-- Node2&#45;&gt;Node25 -->
-<g id="edge155" class="edge"><title>Node2&#45;&gt;Node25</title>
-<path fill="none" stroke="midnightblue" d="M2579.17,-989.432C2667.05,-978.574 2834.92,-942.806 2834.92,-828 2834.92,-828 2834.92,-828 2834.92,-658 2834.92,-579.929 2872.92,-564.571 2872.92,-486.5 2872.92,-486.5 2872.92,-486.5 2872.92,-423 2872.92,-338.634 2827.33,-245.179 2806.77,-207.326"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2809.82,-205.605 2801.91,-198.556 2803.7,-208.999 2809.82,-205.605"/>
+<!-- Node2&#45;&gt;Node24 -->
+<g id="edge155" class="edge"><title>Node2&#45;&gt;Node24</title>
+<path fill="none" stroke="midnightblue" d="M2112.02,-934.756C2267.18,-924.393 2716,-889.132 2716,-828 2716,-828 2716,-828 2716,-305.5 2716,-263.977 2750.52,-225.636 2772.72,-205.27"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2775.08,-207.853 2780.25,-198.607 2770.44,-202.609 2775.08,-207.853"/>
 </g>
 <!-- Node43 -->
 <g id="node43" class="node"><title>Node43</title>
 <g id="a_node43"><a xlink:href="tir_2expr_8h.html" target="_top" xlink:title="TIR expressions. ">
-<polygon fill="white" stroke="black" points="1411.92,-929.5 1411.92,-948.5 1491.92,-948.5 1491.92,-929.5 1411.92,-929.5"/>
-<text text-anchor="middle" x="1451.92" y="-936.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/tir/expr.h</text>
+<polygon fill="white" stroke="black" points="2020,-873.5 2020,-892.5 2100,-892.5 2100,-873.5 2020,-873.5"/>
+<text text-anchor="middle" x="2060" y="-880.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/tir/expr.h</text>
 </a>
 </g>
 </g>
 <!-- Node2&#45;&gt;Node43 -->
 <g id="edge132" class="edge"><title>Node2&#45;&gt;Node43</title>
-<path fill="none" stroke="midnightblue" d="M2474.71,-991.377C2291.87,-982.193 1681.87,-951.551 1502.15,-942.523"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1502.1,-939.016 1491.93,-942.01 1501.75,-946.007 1502.1,-939.016"/>
+<path fill="none" stroke="midnightblue" d="M2060,-929.083C2060,-922.006 2060,-911.861 2060,-902.986"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2063.5,-902.751 2060,-892.751 2056.5,-902.751 2063.5,-902.751"/>
 </g>
 <!-- Node4 -->
 <g id="node4" class="node"><title>Node4</title>
 <g id="a_node4"><a xlink:href="span_8h.html" target="_top" xlink:title="Span information for debugging purposes. ">
-<polygon fill="white" stroke="black" points="2183.92,-649.5 2183.92,-668.5 2263.92,-668.5 2263.92,-649.5 2183.92,-649.5"/>
-<text text-anchor="middle" x="2223.92" y="-656.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/span.h</text>
+<polygon fill="white" stroke="black" points="1858,-593.5 1858,-612.5 1938,-612.5 1938,-593.5 1858,-593.5"/>
+<text text-anchor="middle" x="1898" y="-600.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/span.h</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="M1804.25,-761.46C1885.97,-741.702 2088.02,-692.857 2178.65,-670.945"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2179.72,-674.286 2188.62,-668.535 2178.08,-667.483 2179.72,-674.286"/>
+<path fill="none" stroke="midnightblue" d="M1974.27,-705.44C1963.96,-696.894 1948.33,-683.045 1937,-669 1925.14,-654.311 1914.33,-635.676 1907.11,-622.129"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1910.05,-620.18 1902.34,-612.911 1903.83,-623.4 1910.05,-620.18"/>
 </g>
 <!-- Node5 -->
 <g id="node5" class="node"><title>Node5</title>
 <g id="a_node5"><a xlink:href="node_8h.html" target="_top" xlink:title="Definitions and helper macros for IR/AST nodes. ">
-<polygon fill="white" stroke="black" points="1108.92,-593.5 1108.92,-612.5 1206.92,-612.5 1206.92,-593.5 1108.92,-593.5"/>
-<text text-anchor="middle" x="1157.92" y="-600.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/node.h</text>
+<polygon fill="white" stroke="black" points="1324,-537.5 1324,-556.5 1422,-556.5 1422,-537.5 1324,-537.5"/>
+<text text-anchor="middle" x="1373" y="-544.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/node.h</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node5 -->
 <g id="edge126" class="edge"><title>Node3&#45;&gt;Node5</title>
-<path fill="none" stroke="midnightblue" d="M1731.53,-761.482C1667.89,-746.428 1535.02,-712.551 1427.92,-669 1410.24,-661.811 1407.93,-655.329 1389.92,-649 1332.95,-628.972 1264.79,-617.098 1217.15,-610.623"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1217.37,-607.122 1207,-609.283 1216.46,-614.062 1217.37,-607.122"/>
+<path fill="none" stroke="midnightblue" d="M1953.38,-705.425C1851.1,-677.681 1529.15,-590.355 1414.25,-559.189"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1414.99,-555.764 1404.43,-556.524 1413.16,-562.52 1414.99,-555.764"/>
 </g>
 <!-- Node6 -->
 <g id="node6" class="node"><title>Node6</title>
 <g id="a_node6"><a xlink:href="node_2container_8h.html" target="_top" xlink:title="Array/Map container in the DSL graph. ">
-<polygon fill="white" stroke="black" points="1454.42,-414.5 1454.42,-433.5 1573.42,-433.5 1573.42,-414.5 1454.42,-414.5"/>
-<text text-anchor="middle" x="1513.92" y="-421.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/container.h</text>
+<polygon fill="white" stroke="black" points="2031.5,-358.5 2031.5,-377.5 2150.5,-377.5 2150.5,-358.5 2031.5,-358.5"/>
+<text text-anchor="middle" x="2091" y="-365.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/container.h</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node6 -->
 <g id="edge125" class="edge"><title>Node3&#45;&gt;Node6</title>
-<path fill="none" stroke="midnightblue" d="M1744.14,-761.409C1707.18,-746.835 1641.92,-713.526 1641.92,-660 1641.92,-660 1641.92,-660 1641.92,-602 1641.92,-582.657 1560.62,-481.717 1527.61,-441.531"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1530.23,-439.213 1521.17,-433.722 1524.83,-443.665 1530.23,-439.213"/>
+<path fill="none" stroke="midnightblue" d="M1996.47,-705.5C2006.97,-697.204 2022.3,-683.712 2032,-669 2089.35,-582.033 2090.91,-548.682 2101,-445 2102.33,-431.287 2102.5,-427.696 2101,-414 2100.03,-405.14 2098.01,-395.472 2096.04,-387.375"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2099.38,-386.333 2093.48,-377.533 2092.61,-388.092 2099.38,-386.333"/>
 </g>
 <!-- Node10 -->
 <g id="node10" class="node"><title>Node10</title>
 <g id="a_node10"><a xlink:href="object_8h.html" target="_top" xlink:title="A managed object in the TVM runtime. ">
-<polygon fill="white" stroke="black" points="1425.42,-123.5 1425.42,-142.5 1542.42,-142.5 1542.42,-123.5 1425.42,-123.5"/>
-<text text-anchor="middle" x="1483.92" y="-130.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/object.h</text>
+<polygon fill="white" stroke="black" points="1140.5,-123.5 1140.5,-142.5 1257.5,-142.5 1257.5,-123.5 1140.5,-123.5"/>
+<text text-anchor="middle" x="1199" y="-130.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/object.h</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node10 -->
 <g id="edge127" class="edge"><title>Node3&#45;&gt;Node10</title>
-<path fill="none" stroke="midnightblue" d="M1807.53,-768.207C1914.76,-762.356 2212.36,-739.911 2272.92,-669 2314.65,-620.144 2343.91,-404.751 2278.92,-291 2223.31,-193.664 2161.79,-205.732 2052.92,-179 1852.48,-129.781 1795.64,-159.731 1589.92,-143 1577.92,-142.023 1565.14,-140.96 1552.78,-139.918"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1552.77,-136.405 1542.51,-139.049 1552.18,-143.38 1552.77,-136.405"/>
+<path fill="none" stroke="midnightblue" d="M1946.4,-711.313C1730.3,-695.859 677.367,-614.99 596,-501 487.493,-348.99 688.859,-238.176 866,-179 913.539,-163.119 1047.29,-148.283 1130.1,-140.244"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1130.57,-143.716 1140.18,-139.274 1129.9,-136.748 1130.57,-143.716"/>
 </g>
 <!-- Node15 -->
 <g id="node15" class="node"><title>Node15</title>
-<polygon fill="white" stroke="#bfbfbf" points="2223.92,-62 2223.92,-81 2267.92,-81 2267.92,-62 2223.92,-62"/>
-<text text-anchor="middle" x="2245.92" y="-69" font-family="Helvetica,sans-Serif" font-size="10.00">string</text>
+<polygon fill="white" stroke="#bfbfbf" points="1976,-62 1976,-81 2020,-81 2020,-62 1976,-62"/>
+<text text-anchor="middle" x="1998" y="-69" font-family="Helvetica,sans-Serif" font-size="10.00">string</text>
 </g>
 <!-- Node3&#45;&gt;Node15 -->
 <g id="edge130" class="edge"><title>Node3&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M1807.59,-768.247C1957.62,-760.939 2492.92,-729.965 2492.92,-660 2492.92,-660 2492.92,-660 2492.92,-188 2492.92,-94.3111 2345.3,-76.4515 2278.3,-73.1702"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2278.41,-69.6719 2268.28,-72.7594 2278.13,-76.666 2278.41,-69.6719"/>
+<path fill="none" stroke="midnightblue" d="M2023.91,-706.806C2147.95,-682.776 2526,-600.631 2526,-492 2526,-492 2526,-492 2526,-244 2526,-213.902 2528.38,-200.189 2507,-179 2474.53,-146.809 2353.64,-132.903 2309,-123 2208.16,-100.63 2086.87,-83.7851 2030.17,-76.4854"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2030.4,-72.986 2020.03,-75.1941 2029.51,-79.9299 2030.4,-72.986"/>
 </g>
 <!-- Node16 -->
 <g id="node16" class="node"><title>Node16</title>
-<polygon fill="white" stroke="#bfbfbf" points="348.924,-62 348.924,-81 416.924,-81 416.924,-62 348.924,-62"/>
-<text text-anchor="middle" x="382.924" y="-69" font-family="Helvetica,sans-Serif" font-size="10.00">type_traits</text>
+<polygon fill="white" stroke="#bfbfbf" points="784,-62 784,-81 852,-81 852,-62 784,-62"/>
+<text text-anchor="middle" x="818" y="-69" font-family="Helvetica,sans-Serif" font-size="10.00">type_traits</text>
 </g>
 <!-- Node3&#45;&gt;Node16 -->
 <g id="edge131" class="edge"><title>Node3&#45;&gt;Node16</title>
-<path fill="none" stroke="midnightblue" d="M1730.22,-766.904C1536.35,-750.939 670.672,-674.115 430.924,-557 297.189,-491.672 324.404,-383.128 338.924,-235 343.857,-184.676 342.664,-170.88 358.924,-123 362.77,-111.676 368.472,-99.5549 373.354,-90.027"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="376.452,-91.6551 378.032,-81.1787 370.264,-88.3835 376.452,-91.6551"/>
+<path fill="none" stroke="midnightblue" d="M1946.32,-712.599C1839.14,-708.491 1529.3,-695.092 1273,-669 849.172,-625.854 671.995,-713.204 341,-445 281.699,-396.948 259.589,-367.133 265,-291 266.782,-265.922 261.961,-257.589 273,-235 303.362,-172.871 319.016,-153.657 381,-123 449.362,-89.1883 677.041,-77.3968 773.84,-73.8465"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="774.016,-77.3425 783.886,-73.4905 773.768,-70.3469 774.016,-77.3425"/>
 </g>
-<!-- Node3&#45;&gt;Node31 -->
-<g id="edge129" class="edge"><title>Node3&#45;&gt;Node31</title>
-<path fill="none" stroke="midnightblue" d="M1807.67,-770.078C1951.67,-770.041 2450.58,-766.866 2506.92,-725 2531.64,-706.634 2530.92,-690.795 2530.92,-660 2530.92,-660 2530.92,-660 2530.92,-367 2530.92,-327.536 2553.59,-285.778 2568.09,-263.104"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2571.11,-264.886 2573.72,-254.617 2565.28,-261.019 2571.11,-264.886"/>
+<!-- Node20 -->
+<g id="node20" class="node"><title>Node20</title>
+<polygon fill="white" stroke="#bfbfbf" points="2436,-179.5 2436,-198.5 2498,-198.5 2498,-179.5 2436,-179.5"/>
+<text text-anchor="middle" x="2467" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">algorithm</text>
 </g>
-<!-- Node33 -->
-<g id="node33" class="node"><title>Node33</title>
-<polygon fill="white" stroke="#bfbfbf" points="1593.92,-297 1593.92,-316 1655.92,-316 1655.92,-297 1593.92,-297"/>
-<text text-anchor="middle" x="1624.92" y="-304" font-family="Helvetica,sans-Serif" font-size="10.00">algorithm</text>
+<!-- Node3&#45;&gt;Node20 -->
+<g id="edge128" class="edge"><title>Node3&#45;&gt;Node20</title>
+<path fill="none" stroke="midnightblue" d="M2002.32,-705.457C2059.44,-676.512 2244.17,-576.57 2350,-445 2411.92,-368.024 2449.16,-252.967 2461.97,-208.48"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2465.36,-209.33 2464.69,-198.756 2458.62,-207.439 2465.36,-209.33"/>
 </g>
-<!-- Node3&#45;&gt;Node33 -->
-<g id="edge128" class="edge"><title>Node3&#45;&gt;Node33</title>
-<path fill="none" stroke="midnightblue" d="M1761.35,-761.258C1754.17,-752.577 1743.53,-738.63 1736.92,-725 1723.8,-697.915 1717.92,-690.098 1717.92,-660 1717.92,-660 1717.92,-660 1717.92,-423 1717.92,-392.205 1712.47,-382.583 1693.92,-358 1682.48,-342.835 1665.24,-330.213 1650.85,-321.38"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1652.3,-318.17 1641.9,-316.134 1648.76,-324.21 1652.3,-318.17"/>
+<!-- Node3&#45;&gt;Node34 -->
+<g id="edge129" class="edge"><title>Node3&#45;&gt;Node34</title>
+<path fill="none" stroke="midnightblue" d="M1946.22,-714.234C1722.81,-715.401 605.033,-718.701 461,-669 381.676,-641.628 369.226,-615.433 309,-557 205.796,-456.87 108.075,-312.306 75.9986,-263.124"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="78.8513,-261.09 70.4765,-254.6 72.9765,-264.896 78.8513,-261.09"/>
 </g>
 <!-- Node42 -->
 <g id="node42" class="node"><title>Node42</title>
 <g id="a_node42"><a xlink:href="ir_2type_8h.html" target="_top" xlink:title="IR/AST nodes for the unified type system in TVM. ">
-<polygon fill="white" stroke="black" points="1746.42,-705.5 1746.42,-724.5 1823.42,-724.5 1823.42,-705.5 1746.42,-705.5"/>
-<text text-anchor="middle" x="1784.92" y="-712.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/type.h</text>
+<polygon fill="white" stroke="black" points="1946.5,-649.5 1946.5,-668.5 2023.5,-668.5 2023.5,-649.5 1946.5,-649.5"/>
+<text text-anchor="middle" x="1985" y="-656.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/ir/type.h</text>
 </a>
 </g>
 </g>
 <!-- Node3&#45;&gt;Node42 -->
 <g id="edge118" class="edge"><title>Node3&#45;&gt;Node42</title>
-<path fill="none" stroke="midnightblue" d="M1771.57,-761.083C1773.71,-753.849 1776.8,-743.409 1779.47,-734.397"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1782.85,-735.333 1782.33,-724.751 1776.13,-733.345 1782.85,-735.333"/>
+<path fill="none" stroke="midnightblue" d="M1985,-705.083C1985,-698.006 1985,-687.861 1985,-678.986"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1988.5,-678.751 1985,-668.751 1981.5,-678.751 1988.5,-678.751"/>
 </g>
 <!-- Node4&#45;&gt;Node5 -->
 <g id="edge4" class="edge"><title>Node4&#45;&gt;Node5</title>
-<path fill="none" stroke="midnightblue" d="M2183.76,-655.965C2021.16,-647.729 1411.23,-616.831 1217.43,-607.014"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1217.32,-603.504 1207.16,-606.494 1216.97,-610.495 1217.32,-603.504"/>
+<path fill="none" stroke="midnightblue" d="M1857.68,-597.852C1765.68,-588.39 1539.96,-565.173 1432.17,-554.086"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1432.42,-550.593 1422.11,-553.051 1431.7,-557.556 1432.42,-550.593"/>
 </g>
 <!-- Node4&#45;&gt;Node10 -->
 <g id="edge116" class="edge"><title>Node4&#45;&gt;Node10</title>
-<path fill="none" stroke="midnightblue" d="M2229.62,-649.288C2240.89,-631.205 2264.92,-587.946 2264.92,-548 2264.92,-548 2264.92,-548 2264.92,-305.5 2264.92,-236.627 2188.5,-265.851 2126.92,-235 2076.45,-209.714 2067.32,-194.097 2012.92,-179 2012.58,-178.905 1695.54,-151.972 1552.5,-139.824"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1552.77,-136.334 1542.51,-138.975 1552.18,-143.309 1552.77,-136.334"/>
+<path fill="none" stroke="midnightblue" d="M1857.69,-601.86C1654.53,-600.742 749.306,-590.726 667,-501 546.524,-369.663 747.562,-260.617 906,-179 944.015,-159.417 1056.15,-146.296 1130.15,-139.499"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1130.68,-142.966 1140.32,-138.582 1130.05,-135.994 1130.68,-142.966"/>
 </g>
 <!-- Node4&#45;&gt;Node15 -->
 <g id="edge117" class="edge"><title>Node4&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M2234.28,-649.239C2243.79,-640.76 2257.75,-627.143 2266.92,-613 2362.8,-465.159 2416.92,-422.209 2416.92,-246 2416.92,-246 2416.92,-246 2416.92,-188 2416.92,-121.61 2327.31,-90.8136 2277.83,-78.8691"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2278.46,-75.4219 2267.93,-76.6004 2276.9,-82.2451 2278.46,-75.4219"/>
+<path fill="none" stroke="midnightblue" d="M1899.65,-593.251C1911.07,-532.769 1978.33,-176.638 1994.5,-91.0086"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1997.95,-91.6377 1996.36,-81.1619 1991.07,-90.3387 1997.95,-91.6377"/>
 </g>
 <!-- Node5&#45;&gt;Node6 -->
 <g id="edge5" class="edge"><title>Node5&#45;&gt;Node6</title>
-<path fill="none" stroke="midnightblue" d="M1207.15,-597.878C1240.03,-592.851 1282.48,-581.705 1311.92,-557 1344.97,-529.279 1321.76,-497.581 1354.92,-470 1379.89,-449.233 1413.87,-438.033 1444.01,-432"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1444.86,-435.401 1454.06,-430.146 1443.59,-428.517 1444.86,-435.401"/>
+<path fill="none" stroke="midnightblue" d="M1422.19,-545.11C1536.35,-542.521 1816.21,-533.007 1904,-501 1906.37,-500.137 2022.48,-417.704 2070.52,-383.559"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2072.79,-386.24 2078.91,-377.594 2068.74,-380.534 2072.79,-386.24"/>
 </g>
 <!-- Node7 -->
 <g id="node7" class="node"><title>Node7</title>
 <g id="a_node7"><a xlink:href="runtime_2container_8h.html" target="_top" xlink:title="Common POD(plain old data) container types. ">
-<polygon fill="white" stroke="black" points="1745.92,-358.5 1745.92,-377.5 1877.92,-377.5 1877.92,-358.5 1745.92,-358.5"/>
-<text text-anchor="middle" x="1811.92" y="-365.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/container.h</text>
+<polygon fill="white" stroke="black" points="2024,-235.5 2024,-254.5 2156,-254.5 2156,-235.5 2024,-235.5"/>
+<text text-anchor="middle" x="2090" y="-242.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/container.h</text>
 </a>
 </g>
 </g>
 <!-- Node5&#45;&gt;Node7 -->
 <g id="edge109" class="edge"><title>Node5&#45;&gt;Node7</title>
-<path fill="none" stroke="midnightblue" d="M1197.12,-593.453C1233.05,-585.27 1287.56,-571.982 1333.92,-557 1507.76,-500.832 1709.48,-414.165 1783.14,-381.783"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1784.92,-384.82 1792.66,-377.583 1782.1,-378.415 1784.92,-384.82"/>
+<path fill="none" stroke="midnightblue" d="M1422.05,-546.078C1530.94,-545.526 1789.3,-540.013 1866,-501 1975.35,-445.383 2054.99,-311.577 2080.92,-263.54"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2084.04,-265.125 2085.63,-254.65 2077.86,-261.848 2084.04,-265.125"/>
 </g>
 <!-- Node9 -->
 <g id="node9" class="node"><title>Node9</title>
 <g id="a_node9"><a xlink:href="runtime_2memory_8h.html" target="_top" xlink:title="Runtime memory management. ">
-<polygon fill="white" stroke="black" points="1322.42,-179.5 1322.42,-198.5 1449.42,-198.5 1449.42,-179.5 1322.42,-179.5"/>
-<text text-anchor="middle" x="1385.92" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/memory.h</text>
+<polygon fill="white" stroke="black" points="1633.5,-179.5 1633.5,-198.5 1760.5,-198.5 1760.5,-179.5 1633.5,-179.5"/>
+<text text-anchor="middle" x="1697" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/memory.h</text>
 </a>
 </g>
 </g>
 <!-- Node5&#45;&gt;Node9 -->
 <g id="edge110" class="edge"><title>Node5&#45;&gt;Node9</title>
-<path fill="none" stroke="midnightblue" d="M1150.77,-593.364C1144.15,-584.763 1134.77,-570.873 1130.92,-557 1128.55,-548.434 1130.68,-545.885 1130.92,-537 1131.37,-520.981 1132.48,-517.019 1132.92,-501 1133.31,-487.228 1133.15,-483.776 1132.92,-470 1131.22,-365.523 1058.63,-314.939 1125.92,-235 1149.32,-207.207 1243.53,-196.58 1311.82,-192.516"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1312.33,-195.993 1322.12,-191.94 1311.94,-189.004 1312.33,-195.993"/>
+<path fill="none" stroke="midnightblue" d="M1390.67,-537.416C1421.67,-521.829 1486.92,-486.607 1533,-445 1612.65,-373.083 1635.72,-351.82 1682,-255 1689.02,-240.306 1692.86,-222.142 1694.89,-208.754"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1698.36,-209.184 1696.2,-198.812 1691.42,-208.269 1698.36,-209.184"/>
 </g>
 <!-- Node5&#45;&gt;Node10 -->
 <g id="edge111" class="edge"><title>Node5&#45;&gt;Node10</title>
-<path fill="none" stroke="midnightblue" d="M1206.93,-594.682C1231.7,-588.561 1260.36,-577.376 1278.92,-557 1300.78,-533.014 1297.92,-518.951 1297.92,-486.5 1297.92,-486.5 1297.92,-486.5 1297.92,-367 1297.92,-263.889 1402.22,-285.767 1457.92,-199 1467.25,-184.474 1474.23,-166.058 1478.6,-152.54"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1481.96,-153.503 1481.54,-142.917 1475.27,-151.46 1481.96,-153.503"/>
+<path fill="none" stroke="midnightblue" d="M1323.87,-544.686C1245.26,-541.676 1095.81,-531.941 1054,-501 934.926,-412.886 945.096,-343.612 913,-199 911.074,-190.322 907.224,-185.756 913,-179 926.978,-162.651 1050.14,-148.046 1130.22,-140.162"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1130.63,-143.639 1140.24,-139.188 1129.95,-136.672 1130.63,-143.639"/>
 </g>
 <!-- Node11 -->
 <g id="node11" class="node"><title>Node11</title>
 <g id="a_node11"><a xlink:href="c__runtime__api_8h.html" target="_top" xlink:title="tvm/runtime/c_runtime\l_api.h">
-<polygon fill="white" stroke="black" points="167.424,-56.5 167.424,-86.5 294.424,-86.5 294.424,-56.5 167.424,-56.5"/>
-<text text-anchor="start" x="175.424" y="-74.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/c_runtime</text>
-<text text-anchor="middle" x="230.924" y="-63.5" font-family="Helvetica,sans-Serif" font-size="10.00">_api.h</text>
+<polygon fill="white" stroke="black" points="300.5,-56.5 300.5,-86.5 427.5,-86.5 427.5,-56.5 300.5,-56.5"/>
+<text text-anchor="start" x="308.5" y="-74.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/c_runtime</text>
+<text text-anchor="middle" x="364" y="-63.5" font-family="Helvetica,sans-Serif" font-size="10.00">_api.h</text>
 </a>
 </g>
 </g>
 <!-- Node5&#45;&gt;Node11 -->
 <g id="edge108" class="edge"><title>Node5&#45;&gt;Node11</title>
-<path fill="none" stroke="midnightblue" d="M1108.77,-601.866C966.804,-601.019 558.244,-595.235 430.924,-557 216.218,-492.522 115.79,-460.812 26.9239,-255 13.5342,-223.989 9.41785,-207.887 26.9239,-179 55.4375,-131.949 112.303,-104.701 158.768,-89.5654"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="160.012,-92.8433 168.511,-86.5167 157.922,-86.1627 160.012,-92.8433"/>
+<path fill="none" stroke="midnightblue" d="M1323.77,-546.566C1208.18,-547.093 910.754,-543.777 667,-501 579.449,-485.635 558.125,-476.487 475,-445 355.079,-399.574 321.161,-392.434 214,-322 153.855,-282.468 99.4512,-239.78 138,-179 171.282,-126.523 238.094,-99.4274 290.483,-85.7395"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="291.566,-89.0765 300.42,-83.2568 289.869,-82.2853 291.566,-89.0765"/>
 </g>
 <!-- Node5&#45;&gt;Node15 -->
 <g id="edge112" class="edge"><title>Node5&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M1207.3,-598.531C1435.73,-581.162 2378.92,-494.406 2378.92,-246 2378.92,-246 2378.92,-246 2378.92,-188 2378.92,-134.575 2316.99,-100.279 2277.65,-83.8839"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2278.77,-80.5629 2268.19,-80.1005 2276.17,-87.0627 2278.77,-80.5629"/>
+<path fill="none" stroke="midnightblue" d="M1422.01,-544.533C1544.09,-539.552 1852,-518.289 1852,-430.5 1852,-430.5 1852,-430.5 1852,-367 1852,-253.548 1860.58,-214.98 1927,-123 1938.37,-107.259 1956.18,-94.6068 1971.13,-85.9038"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1972.92,-88.9098 1979.98,-81.0029 1969.53,-82.7863 1972.92,-88.9098"/>
 </g>
 <!-- Node5&#45;&gt;Node16 -->
 <g id="edge113" class="edge"><title>Node5&#45;&gt;Node16</title>
-<path fill="none" stroke="midnightblue" d="M1108.54,-600.709C978.926,-596.972 631.342,-584.604 519.924,-557 460.046,-542.165 429.624,-550.584 392.924,-501 297.09,-371.522 356.182,-154.617 376.713,-90.7285"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="380.039,-91.8164 379.851,-81.2233 373.392,-89.6216 380.039,-91.8164"/>
+<path fill="none" stroke="midnightblue" d="M1323.66,-544.635C1210.57,-541.044 935.626,-529.571 848,-501 831.695,-495.684 829.947,-489.409 815,-481 625.464,-374.363 503.565,-434.647 381,-255 347.252,-205.534 357.925,-155.838 408,-123 467.408,-84.0419 680.415,-75.1376 773.705,-73.1027"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="774.014,-76.5973 783.942,-72.8967 773.873,-69.5987 774.014,-76.5973"/>
 </g>
 <!-- Node17 -->
 <g id="node17" class="node"><title>Node17</title>
-<polygon fill="white" stroke="#bfbfbf" points="1196.92,-62 1196.92,-81 1238.92,-81 1238.92,-62 1196.92,-62"/>
-<text text-anchor="middle" x="1217.92" y="-69" font-family="Helvetica,sans-Serif" font-size="10.00">utility</text>
+<polygon fill="white" stroke="#bfbfbf" points="2465,-62 2465,-81 2507,-81 2507,-62 2465,-62"/>
+<text text-anchor="middle" x="2486" y="-69" font-family="Helvetica,sans-Serif" font-size="10.00">utility</text>
 </g>
 <!-- Node5&#45;&gt;Node17 -->
 <g id="edge114" class="edge"><title>Node5&#45;&gt;Node17</title>
-<path fill="none" stroke="midnightblue" d="M1108.52,-600.841C990.182,-597.614 693.299,-586.721 598.924,-557 491.221,-523.082 376.835,-526.269 388.924,-414 404.394,-270.331 397.391,-170.319 533.924,-123 657.073,-80.3198 1069.79,-73.7058 1186.77,-72.6853"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1186.88,-76.1847 1196.85,-72.6051 1186.82,-69.1849 1186.88,-76.1847"/>
+<path fill="none" stroke="midnightblue" d="M1422.25,-544.324C1540.25,-539.94 1836.44,-526.659 1932,-501 2110.75,-453.004 2585.18,-299.492 2684,-143 2722.66,-81.7725 2582.4,-73.1062 2517.38,-72.304"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2517.29,-68.8034 2507.26,-72.2354 2517.24,-75.8032 2517.29,-68.8034"/>
 </g>
-<!-- Node5&#45;&gt;Node26 -->
-<g id="edge115" class="edge"><title>Node5&#45;&gt;Node26</title>
-<path fill="none" stroke="midnightblue" d="M1108.82,-600.241C975.853,-594.563 612.683,-572.7 520.924,-501 460.591,-453.856 434.304,-257.829 433.924,-255 432.74,-246.19 430.014,-242.983 433.924,-235 440.446,-221.684 453.02,-211.177 464.797,-203.676"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="466.695,-206.621 473.534,-198.529 463.142,-200.589 466.695,-206.621"/>
+<!-- Node5&#45;&gt;Node25 -->
+<g id="edge115" class="edge"><title>Node5&#45;&gt;Node25</title>
+<path fill="none" stroke="midnightblue" d="M1323.62,-543.692C1218.4,-538.393 975.284,-524.011 896,-501 882.829,-497.177 793.168,-456.693 786,-445 729.463,-352.776 868.936,-242.99 924.426,-204.326"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="926.592,-207.084 932.864,-198.545 922.636,-201.309 926.592,-207.084"/>
 </g>
 <!-- Node36 -->
 <g id="node36" class="node"><title>Node36</title>
 <g id="a_node36"><a xlink:href="reflection_8h.html" target="_top" xlink:title="Reflection and serialization of compiler IR/AST nodes. ">
-<polygon fill="white" stroke="black" points="731.424,-537.5 731.424,-556.5 850.424,-556.5 850.424,-537.5 731.424,-537.5"/>
-<text text-anchor="middle" x="790.924" y="-544.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/reflection.h</text>
+<polygon fill="white" stroke="black" points="1063.5,-481.5 1063.5,-500.5 1182.5,-500.5 1182.5,-481.5 1063.5,-481.5"/>
+<text text-anchor="middle" x="1123" y="-488.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/reflection.h</text>
 </a>
 </g>
 </g>
 <!-- Node5&#45;&gt;Node36 -->
 <g id="edge77" class="edge"><title>Node5&#45;&gt;Node36</title>
-<path fill="none" stroke="midnightblue" d="M1108.81,-594.773C1044.45,-585.304 931.271,-568.651 858.765,-557.982"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="859.216,-554.511 848.813,-556.518 858.197,-561.436 859.216,-554.511"/>
+<path fill="none" stroke="midnightblue" d="M1333.39,-537.444C1289.77,-528.023 1219.6,-512.866 1172.42,-502.675"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1172.94,-499.207 1162.43,-500.516 1171.46,-506.049 1172.94,-499.207"/>
 </g>
 <!-- Node37 -->
 <g id="node37" class="node"><title>Node37</title>
 <g id="a_node37"><a xlink:href="structural__equal_8h.html" target="_top" xlink:title="Structural equality comparison. ">
-<polygon fill="white" stroke="black" points="1013.42,-470.5 1013.42,-500.5 1124.42,-500.5 1124.42,-470.5 1013.42,-470.5"/>
-<text text-anchor="start" x="1021.42" y="-488.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/structural</text>
-<text text-anchor="middle" x="1068.92" y="-477.5" font-family="Helvetica,sans-Serif" font-size="10.00">_equal.h</text>
+<polygon fill="white" stroke="black" points="1413.5,-414.5 1413.5,-444.5 1524.5,-444.5 1524.5,-414.5 1413.5,-414.5"/>
+<text text-anchor="start" x="1421.5" y="-432.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/structural</text>
+<text text-anchor="middle" x="1469" y="-421.5" font-family="Helvetica,sans-Serif" font-size="10.00">_equal.h</text>
 </a>
 </g>
 </g>
 <!-- Node5&#45;&gt;Node37 -->
 <g id="edge106" class="edge"><title>Node5&#45;&gt;Node37</title>
-<path fill="none" stroke="midnightblue" d="M1142,-593.346C1128.67,-585.41 1109.96,-572.547 1097.92,-557 1087.23,-543.189 1079.86,-524.882 1075.22,-510.385"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1078.52,-509.211 1072.32,-500.621 1071.81,-511.204 1078.52,-509.211"/>
+<path fill="none" stroke="midnightblue" d="M1380.22,-537.319C1395.09,-519.424 1429.55,-477.966 1450.9,-452.281"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1453.63,-454.473 1457.33,-444.545 1448.24,-449.998 1453.63,-454.473"/>
 </g>
 <!-- Node39 -->
 <g id="node39" class="node"><title>Node39</title>
 <g id="a_node39"><a xlink:href="structural__hash_8h.html" target="_top" xlink:title="tvm/node/structural\l_hash.h">
-<polygon fill="white" stroke="black" points="884.424,-470.5 884.424,-500.5 995.424,-500.5 995.424,-470.5 884.424,-470.5"/>
-<text text-anchor="start" x="892.424" y="-488.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/structural</text>
-<text text-anchor="middle" x="939.924" y="-477.5" font-family="Helvetica,sans-Serif" font-size="10.00">_hash.h</text>
+<polygon fill="white" stroke="black" points="1284.5,-414.5 1284.5,-444.5 1395.5,-444.5 1395.5,-414.5 1284.5,-414.5"/>
+<text text-anchor="start" x="1292.5" y="-432.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/structural</text>
+<text text-anchor="middle" x="1340" y="-421.5" font-family="Helvetica,sans-Serif" font-size="10.00">_hash.h</text>
 </a>
 </g>
 </g>
 <!-- Node5&#45;&gt;Node39 -->
 <g id="edge107" class="edge"><title>Node5&#45;&gt;Node39</title>
-<path fill="none" stroke="midnightblue" d="M1141.54,-593.319C1106.45,-574.727 1023.35,-530.699 975.507,-505.353"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="976.909,-502.134 966.434,-500.545 973.631,-508.32 976.909,-502.134"/>
+<path fill="none" stroke="midnightblue" d="M1370.52,-537.319C1365.54,-519.889 1354.17,-480.104 1346.8,-454.313"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1350.13,-453.199 1344.01,-444.545 1343.39,-455.122 1350.13,-453.199"/>
 </g>
 <!-- Node40 -->
 <g id="node40" class="node"><title>Node40</title>
 <g id="a_node40"><a xlink:href="repr__printer_8h.html" target="_top" xlink:title="Printer class to print repr string of each AST/IR nodes. ">
-<polygon fill="white" stroke="black" points="1139.92,-537.5 1139.92,-556.5 1269.92,-556.5 1269.92,-537.5 1139.92,-537.5"/>
-<text text-anchor="middle" x="1204.92" y="-544.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/repr_printer.h</text>
+<polygon fill="white" stroke="black" points="676,-481.5 676,-500.5 806,-500.5 806,-481.5 676,-481.5"/>
+<text text-anchor="middle" x="741" y="-488.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/node/repr_printer.h</text>
 </a>
 </g>
 </g>
 <!-- Node5&#45;&gt;Node40 -->
 <g id="edge103" class="edge"><title>Node5&#45;&gt;Node40</title>
-<path fill="none" stroke="midnightblue" d="M1165.69,-593.083C1172.46,-585.298 1182.47,-573.801 1190.68,-564.367"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1193.38,-566.592 1197.31,-556.751 1188.1,-561.996 1193.38,-566.592"/>
+<path fill="none" stroke="midnightblue" d="M1323.76,-542.528C1227.09,-535.595 1005.75,-519.133 820,-501 818.725,-500.876 817.438,-500.748 816.143,-500.619"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="816.385,-497.125 806.08,-499.582 815.668,-504.088 816.385,-497.125"/>
 </g>
 <!-- Node6&#45;&gt;Node7 -->
 <g id="edge6" class="edge"><title>Node6&#45;&gt;Node7</title>
-<path fill="none" stroke="midnightblue" d="M1561.14,-414.444C1613.67,-404.925 1698.53,-389.547 1754.77,-379.356"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1755.71,-382.743 1764.93,-377.516 1754.46,-375.856 1755.71,-382.743"/>
+<path fill="none" stroke="midnightblue" d="M2091.83,-358.106C2093.06,-343.915 2095.08,-315.273 2094,-291 2093.62,-282.372 2092.82,-272.841 2092.04,-264.78"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2095.5,-264.199 2090.99,-254.612 2088.54,-264.918 2095.5,-264.199"/>
 </g>
 <!-- Node6&#45;&gt;Node9 -->
-<g id="edge71" class="edge"><title>Node6&#45;&gt;Node9</title>
-<path fill="none" stroke="midnightblue" d="M1500.03,-414.395C1476.55,-399.029 1429.36,-364.464 1406.92,-322 1387.57,-285.36 1385,-235.608 1385.21,-208.865"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1388.72,-208.698 1385.45,-198.621 1381.72,-208.539 1388.72,-208.698"/>
+<g id="edge32" class="edge"><title>Node6&#45;&gt;Node9</title>
+<path fill="none" stroke="midnightblue" d="M2081.23,-358.383C2053.99,-334.814 1974.03,-268.796 1896,-235 1870.84,-224.101 1803.32,-209.925 1753.88,-200.422"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1754.42,-196.962 1743.94,-198.528 1753.11,-203.838 1754.42,-196.962"/>
 </g>
 <!-- Node6&#45;&gt;Node10 -->
-<g id="edge72" class="edge"><title>Node6&#45;&gt;Node10</title>
-<path fill="none" stroke="midnightblue" d="M1516.5,-414.478C1523.75,-391.708 1546.38,-328.624 1584.92,-291 1610.24,-266.287 1637.41,-285.148 1655.92,-255 1660.58,-247.426 1657.84,-243.68 1655.92,-235 1650.01,-208.205 1650.6,-197.043 1629.92,-179 1608.48,-160.287 1579.37,-149.356 1552.78,-142.97"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1553.25,-139.49 1542.73,-140.738 1551.74,-146.323 1553.25,-139.49"/>
+<g id="edge33" class="edge"><title>Node6&#45;&gt;Node10</title>
+<path fill="none" stroke="midnightblue" d="M2058.2,-358.431C1921.31,-322.676 1395.68,-185.375 1241.65,-145.141"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1242.19,-141.665 1231.63,-142.524 1240.42,-148.437 1242.19,-141.665"/>
 </g>
 <!-- Node6&#45;&gt;Node15 -->
 <g id="edge75" class="edge"><title>Node6&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M1573.6,-418.301C1688.94,-409.047 1934.46,-388.457 1971.92,-378 2027.45,-362.502 2045.96,-360.444 2088.92,-322 2166.58,-252.507 2156.86,-210.845 2212.92,-123 2220.1,-111.76 2228.3,-99.2099 2234.73,-89.4327"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2237.68,-91.3166 2240.26,-81.0415 2231.84,-87.4631 2237.68,-91.3166"/>
+<path fill="none" stroke="midnightblue" d="M2106.5,-358.289C2161.93,-326.084 2343.22,-211.068 2270,-123 2239.82,-86.704 2095.64,-76.3735 2030.3,-73.533"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2030.29,-70.0298 2020.16,-73.1251 2030.01,-77.0241 2030.29,-70.0298"/>
 </g>
 <!-- Node6&#45;&gt;Node17 -->
 <g id="edge76" class="edge"><title>Node6&#45;&gt;Node17</title>
-<path fill="none" stroke="midnightblue" d="M1491.76,-414.392C1473.62,-406.65 1447.95,-394.036 1428.92,-378 1328.13,-293.024 1314.41,-256.841 1247.92,-143 1238.09,-126.158 1229.68,-105.481 1224.29,-90.8877"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1227.44,-89.3155 1220.78,-81.0777 1220.85,-91.6723 1227.44,-89.3155"/>
+<path fill="none" stroke="midnightblue" d="M2140.87,-358.473C2282.03,-333.096 2677.95,-252.935 2736,-143 2740.15,-135.14 2741.63,-129.88 2736,-123 2708.69,-89.6203 2578.18,-77.7994 2517.35,-74.0553"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2517.36,-70.5506 2507.18,-73.4653 2516.96,-77.5388 2517.36,-70.5506"/>
 </g>
-<!-- Node20 -->
-<g id="node20" class="node"><title>Node20</title>
-<g id="a_node20"><a xlink:href="packed__func_8h.html" target="_top" xlink:title="Type&#45;erased function used across TVM API. ">
-<polygon fill="white" stroke="black" points="1416.42,-291.5 1416.42,-321.5 1529.42,-321.5 1529.42,-291.5 1416.42,-291.5"/>
-<text text-anchor="start" x="1424.42" y="-309.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/packed</text>
-<text text-anchor="middle" x="1472.92" y="-298.5" font-family="Helvetica,sans-Serif" font-size="10.00">_func.h</text>
-</a>
+<!-- Node6&#45;&gt;Node20 -->
+<g id="edge74" class="edge"><title>Node6&#45;&gt;Node20</title>
+<path fill="none" stroke="midnightblue" d="M2150.51,-360.757C2187.88,-354.868 2236.01,-343.556 2274,-322 2321.29,-295.167 2314.96,-265.458 2360,-235 2381.18,-220.673 2407.66,-209.493 2428.97,-201.859"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2430.37,-205.081 2438.67,-198.501 2428.08,-198.466 2430.37,-205.081"/>
 </g>
+<!-- Node26 -->
+<g id="node26" class="node"><title>Node26</title>
+<g id="a_node26"><a xlink:href="packed__func_8h.html" target="_top" xlink:title="Type&#45;erased function used across TVM API. ">
+<polygon fill="white" stroke="black" points="1474.5,-291.5 1474.5,-321.5 1587.5,-321.5 1587.5,-291.5 1474.5,-291.5"/>
+<text text-anchor="start" x="1482.5" y="-309.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/packed</text>
+<text text-anchor="middle" x="1531" y="-298.5" font-family="Helvetica,sans-Serif" font-size="10.00">_func.h</text>
+</a>
 </g>
-<!-- Node6&#45;&gt;Node20 -->
-<g id="edge73" class="edge"><title>Node6&#45;&gt;Node20</title>
-<path fill="none" stroke="midnightblue" d="M1510.84,-414.319C1504.63,-396.812 1490.41,-356.749 1481.26,-330.97"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1484.55,-329.798 1477.91,-321.545 1477.96,-332.14 1484.55,-329.798"/>
 </g>
-<!-- Node6&#45;&gt;Node33 -->
-<g id="edge74" class="edge"><title>Node6&#45;&gt;Node33</title>
-<path fill="none" stroke="midnightblue" d="M1530.2,-414.404C1544.46,-406.329 1565.15,-393.229 1579.92,-378 1595.2,-362.25 1608.13,-340.527 1616.15,-325.371"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1619.46,-326.581 1620.89,-316.083 1613.23,-323.399 1619.46,-326.581"/>
+<!-- Node6&#45;&gt;Node26 -->
+<g id="edge34" class="edge"><title>Node6&#45;&gt;Node26</title>
+<path fill="none" stroke="midnightblue" d="M2031.34,-360.661C1925.98,-349.467 1707.74,-326.279 1597.63,-314.579"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1597.95,-311.094 1587.64,-313.518 1597.21,-318.055 1597.95,-311.094"/>
 </g>
 <!-- Node8 -->
 <g id="node8" class="node"><title>Node8</title>
-<polygon fill="white" stroke="#bfbfbf" points="1502.92,-62 1502.92,-81 1588.92,-81 1588.92,-62 1502.92,-62"/>
-<text text-anchor="middle" x="1545.92" y="-69" font-family="Helvetica,sans-Serif" font-size="10.00">dmlc/logging.h</text>
+<polygon fill="white" stroke="#bfbfbf" points="1253,-62 1253,-81 1339,-81 1339,-62 1253,-62"/>
+<text text-anchor="middle" x="1296" y="-69" font-family="Helvetica,sans-Serif" font-size="10.00">dmlc/logging.h</text>
 </g>
 <!-- Node7&#45;&gt;Node8 -->
 <g id="edge7" class="edge"><title>Node7&#45;&gt;Node8</title>
-<path fill="none" stroke="midnightblue" d="M1878.01,-363.689C1907.41,-358.512 1939.49,-346.967 1957.92,-322 1996.07,-270.319 1983,-223.764 1936.92,-179 1888.66,-132.111 1694.23,-95.8337 1599.01,-80.4881"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1599.43,-77.0116 1589,-78.8945 1598.33,-83.9244 1599.43,-77.0116"/>
+<path fill="none" stroke="midnightblue" d="M2079.95,-235.493C2063.07,-221.638 2027.5,-194.224 1993,-179 1897.54,-136.871 1867.77,-141.07 1765,-123 1615.61,-96.7316 1436.88,-82.0389 1349.47,-75.9223"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1349.49,-72.4154 1339.27,-75.2187 1349.01,-79.3988 1349.49,-72.4154"/>
 </g>
 <!-- Node7&#45;&gt;Node9 -->
 <g id="edge8" class="edge"><title>Node7&#45;&gt;Node9</title>
-<path fill="none" stroke="midnightblue" d="M1782.11,-358.399C1760.13,-351.088 1730.31,-339.044 1707.92,-322 1668.44,-291.933 1680.62,-260.302 1637.92,-235 1608.39,-217.499 1522.73,-204.733 1459.44,-197.36"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1459.82,-193.881 1449.49,-196.223 1459.03,-200.836 1459.82,-193.881"/>
+<path fill="none" stroke="midnightblue" d="M2027.73,-235.444C1957.45,-225.786 1843.28,-210.099 1769.16,-199.916"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1769.36,-196.41 1758.98,-198.516 1768.41,-203.345 1769.36,-196.41"/>
 </g>
 <!-- Node7&#45;&gt;Node10 -->
 <g id="edge22" class="edge"><title>Node7&#45;&gt;Node10</title>
-<path fill="none" stroke="midnightblue" d="M1802.59,-358.085C1788.34,-343.37 1764.29,-313.401 1778.92,-291 1800.69,-257.676 1839.16,-288.324 1860.92,-255 1865.78,-247.558 1866.01,-242.291 1860.92,-235 1825.83,-184.673 1651.74,-155.007 1552.86,-141.955"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1553.02,-138.447 1542.65,-140.632 1552.12,-145.389 1553.02,-138.447"/>
+<path fill="none" stroke="midnightblue" d="M2055.09,-235.484C1996.39,-221.492 1874.02,-193.723 1769,-179 1589.01,-153.766 1374.91,-141.609 1267.56,-136.731"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1267.66,-133.232 1257.51,-136.281 1267.35,-140.225 1267.66,-133.232"/>
 </g>
 <!-- Node7&#45;&gt;Node15 -->
-<g id="edge66" class="edge"><title>Node7&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M1878.21,-359.533C1944.58,-347.939 2036.92,-318.739 2036.92,-246 2036.92,-246 2036.92,-246 2036.92,-188 2036.92,-157.205 2038.22,-143.805 2060.92,-123 2103.4,-84.0786 2172.98,-74.7009 2213.61,-72.7105"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2213.91,-76.2021 2223.77,-72.3381 2213.65,-69.2068 2213.91,-76.2021"/>
+<g id="edge27" class="edge"><title>Node7&#45;&gt;Node15</title>
+<path fill="none" stroke="midnightblue" d="M2085.31,-235.26C2070.85,-208.306 2026.76,-126.116 2007.35,-89.9237"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2010.38,-88.177 2002.57,-81.0194 2004.21,-91.486 2010.38,-88.177"/>
 </g>
 <!-- Node7&#45;&gt;Node16 -->
-<g id="edge68" class="edge"><title>Node7&#45;&gt;Node16</title>
-<path fill="none" stroke="midnightblue" d="M1745.9,-367.402C1582.96,-367.677 1148.89,-364.036 789.924,-322 632.619,-303.579 567.519,-348.828 439.924,-255 387.577,-216.507 381.957,-130.176 382.211,-91.6715"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="385.717,-91.4365 382.433,-81.3633 378.718,-91.2856 385.717,-91.4365"/>
+<g id="edge29" class="edge"><title>Node7&#45;&gt;Node16</title>
+<path fill="none" stroke="midnightblue" d="M2062.68,-235.477C1976.03,-208.473 1711.95,-126.383 1693,-123 1418.65,-74.0283 1345.22,-103.101 1067,-87 995.362,-82.8543 912.134,-78 862.337,-75.0916"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="862.422,-71.5907 852.235,-74.5015 862.014,-78.5788 862.422,-71.5907"/>
 </g>
 <!-- Node7&#45;&gt;Node17 -->
-<g id="edge69" class="edge"><title>Node7&#45;&gt;Node17</title>
-<path fill="none" stroke="midnightblue" d="M1803.17,-358.421C1789.77,-344.19 1766.9,-314.9 1778.92,-291 1812.31,-224.663 1952.35,-234.431 1902.92,-179 1856.33,-126.741 1656.93,-163.301 1589.92,-143 1571.28,-137.352 1569.46,-128.983 1550.92,-123 1443.79,-88.4256 1309.47,-77.293 1249.44,-73.8978"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1249.29,-70.385 1239.12,-73.35 1248.92,-77.3752 1249.29,-70.385"/>
+<g id="edge30" class="edge"><title>Node7&#45;&gt;Node17</title>
+<path fill="none" stroke="midnightblue" d="M2123.32,-235.465C2153.28,-227.384 2198.25,-214.242 2236,-199 2322.15,-164.221 2418.9,-110.928 2462.49,-86.1029"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2464.26,-89.1221 2471.2,-81.1165 2460.78,-83.0471 2464.26,-89.1221"/>
 </g>
 <!-- Node7&#45;&gt;Node20 -->
 <g id="edge23" class="edge"><title>Node7&#45;&gt;Node20</title>
-<path fill="none" stroke="midnightblue" d="M1763.35,-358.475C1704.58,-348.16 1605.33,-330.74 1539.47,-319.18"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1540.06,-315.73 1529.6,-317.448 1538.85,-322.624 1540.06,-315.73"/>
+<path fill="none" stroke="midnightblue" d="M2149.74,-235.444C2226.8,-224.406 2358.85,-205.491 2425.67,-195.92"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2426.42,-199.349 2435.82,-194.466 2425.42,-192.42 2426.42,-199.349"/>
 </g>
-<!-- Node7&#45;&gt;Node24 -->
-<g id="edge65" class="edge"><title>Node7&#45;&gt;Node24</title>
-<path fill="none" stroke="midnightblue" d="M1878.23,-359.782C1901.98,-353.63 1926.43,-342.402 1940.92,-322 1948.49,-311.352 1944.31,-247.354 1936.92,-235 1928.33,-220.613 1913.15,-210.078 1899.04,-202.834"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1900.53,-199.667 1889.99,-198.542 1897.53,-205.991 1900.53,-199.667"/>
+<!-- Node21 -->
+<g id="node21" class="node"><title>Node21</title>
+<polygon fill="white" stroke="#bfbfbf" points="2083.5,-179.5 2083.5,-198.5 2132.5,-198.5 2132.5,-179.5 2083.5,-179.5"/>
+<text text-anchor="middle" x="2108" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">cstring</text>
 </g>
-<!-- Node7&#45;&gt;Node25 -->
-<g id="edge67" class="edge"><title>Node7&#45;&gt;Node25</title>
-<path fill="none" stroke="midnightblue" d="M1859.43,-358.463C2023.13,-329.047 2563.38,-231.966 2740.29,-200.177"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2740.96,-203.613 2750.18,-198.4 2739.72,-196.724 2740.96,-203.613"/>
+<!-- Node7&#45;&gt;Node21 -->
+<g id="edge24" class="edge"><title>Node7&#45;&gt;Node21</title>
+<path fill="none" stroke="midnightblue" d="M2092.97,-235.083C2095.38,-227.849 2098.86,-217.409 2101.87,-208.397"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2105.24,-209.345 2105.08,-198.751 2098.6,-207.131 2105.24,-209.345"/>
 </g>
-<!-- Node7&#45;&gt;Node26 -->
-<g id="edge70" class="edge"><title>Node7&#45;&gt;Node26</title>
-<path fill="none" stroke="midnightblue" d="M1745.81,-364.429C1526.45,-355.34 824.344,-321.629 608.924,-255 589.677,-249.047 542.826,-221.337 514.595,-204.075"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="516.153,-200.925 505.802,-198.668 512.487,-206.888 516.153,-200.925"/>
+<!-- Node22 -->
+<g id="node22" class="node"><title>Node22</title>
+<polygon fill="white" stroke="#bfbfbf" points="2150.5,-179.5 2150.5,-198.5 2227.5,-198.5 2227.5,-179.5 2150.5,-179.5"/>
+<text text-anchor="middle" x="2189" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">initializer_list</text>
 </g>
-<!-- Node7&#45;&gt;Node33 -->
-<g id="edge62" class="edge"><title>Node7&#45;&gt;Node33</title>
-<path fill="none" stroke="midnightblue" d="M1784.95,-358.496C1756.38,-349.476 1709.95,-334.792 1669.92,-322 1667.14,-321.11 1664.26,-320.187 1661.36,-319.257"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1662.16,-315.837 1651.57,-316.109 1660.02,-322.502 1662.16,-315.837"/>
+<!-- Node7&#45;&gt;Node22 -->
+<g id="edge25" class="edge"><title>Node7&#45;&gt;Node22</title>
+<path fill="none" stroke="midnightblue" d="M2105.91,-235.324C2121.64,-226.743 2145.94,-213.486 2164.21,-203.522"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2166.03,-206.516 2173.13,-198.655 2162.68,-200.37 2166.03,-206.516"/>
 </g>
-<!-- Node34 -->
-<g id="node34" class="node"><title>Node34</title>
-<polygon fill="white" stroke="#bfbfbf" points="1788.42,-297 1788.42,-316 1837.42,-316 1837.42,-297 1788.42,-297"/>
-<text text-anchor="middle" x="1812.92" y="-304" font-family="Helvetica,sans-Serif" font-size="10.00">cstring</text>
+<!-- Node7&#45;&gt;Node23 -->
+<g id="edge26" class="edge"><title>Node7&#45;&gt;Node23</title>
+<path fill="none" stroke="midnightblue" d="M2023.63,-240.57C1934.93,-235.325 1772.74,-223.425 1625.71,-199.081"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1626.04,-195.587 1615.6,-197.383 1624.88,-202.491 1626.04,-195.587"/>
 </g>
-<!-- Node7&#45;&gt;Node34 -->
-<g id="edge63" class="edge"><title>Node7&#45;&gt;Node34</title>
-<path fill="none" stroke="midnightblue" d="M1812.07,-358.475C1812.21,-350.08 1812.43,-336.981 1812.61,-326.163"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1816.11,-326.067 1812.78,-316.009 1809.11,-325.949 1816.11,-326.067"/>
-</g>
-<!-- Node35 -->
-<g id="node35" class="node"><title>Node35</title>
-<polygon fill="white" stroke="#bfbfbf" points="1855.42,-297 1855.42,-316 1932.42,-316 1932.42,-297 1855.42,-297"/>
-<text text-anchor="middle" x="1893.92" y="-304" font-family="Helvetica,sans-Serif" font-size="10.00">initializer_list</text>
+<!-- Node7&#45;&gt;Node24 -->
+<g id="edge28" class="edge"><title>Node7&#45;&gt;Node24</title>
+<path fill="none" stroke="midnightblue" d="M2156.26,-238.895C2293.34,-228.336 2605.93,-204.257 2734.33,-194.365"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2734.65,-197.851 2744.35,-193.593 2734.11,-190.872 2734.65,-197.851"/>
 </g>
-<!-- Node7&#45;&gt;Node35 -->
-<g id="edge64" class="edge"><title>Node7&#45;&gt;Node35</title>
-<path fill="none" stroke="midnightblue" d="M1823.67,-358.475C1836.7,-349.02 1857.96,-333.596 1873.68,-322.187"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1876.16,-324.715 1882.2,-316.009 1872.05,-319.049 1876.16,-324.715"/>
+<!-- Node7&#45;&gt;Node25 -->
+<g id="edge31" class="edge"><title>Node7&#45;&gt;Node25</title>
+<path fill="none" stroke="midnightblue" d="M2023.97,-240.883C1809.77,-230.772 1138.94,-199.107 980.007,-191.605"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="980.028,-188.102 969.874,-191.127 979.698,-195.095 980.028,-188.102"/>
 </g>
 <!-- Node9&#45;&gt;Node10 -->
 <g id="edge9" class="edge"><title>Node9&#45;&gt;Node10</title>
-<path fill="none" stroke="midnightblue" d="M1401.67,-179.324C1417.24,-170.743 1441.3,-157.486 1459.38,-147.522"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1461.15,-150.546 1468.22,-142.655 1457.77,-144.415 1461.15,-150.546"/>
+<path fill="none" stroke="midnightblue" d="M1633.31,-180.077C1630.16,-179.708 1627.04,-179.347 1624,-179 1471.26,-161.594 1432.84,-159.488 1280,-143 1276.08,-142.577 1272.05,-142.139 1267.98,-141.695"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1268.16,-138.193 1257.83,-140.582 1267.39,-145.151 1268.16,-138.193"/>
 </g>
 <!-- Node9&#45;&gt;Node16 -->
 <g id="edge20" class="edge"><title>Node9&#45;&gt;Node16</title>
-<path fill="none" stroke="midnightblue" d="M1362.13,-179.477C1320.81,-165.08 1232.8,-136.223 1155.92,-123 881.882,-75.8653 546.269,-71.9263 427.302,-72.1548"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="427.119,-68.6552 417.129,-72.1858 427.14,-75.6552 427.119,-68.6552"/>
+<path fill="none" stroke="midnightblue" d="M1644.68,-179.463C1563.66,-166.39 1402.92,-141.035 1266,-123 1118.4,-103.558 942.811,-85.1279 862.311,-76.9393"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="862.357,-73.4261 852.055,-75.8992 861.65,-80.3903 862.357,-73.4261"/>
 </g>
 <!-- Node9&#45;&gt;Node17 -->
 <g id="edge21" class="edge"><title>Node9&#45;&gt;Node17</title>
-<path fill="none" stroke="midnightblue" d="M1376.76,-179.407C1362.62,-166.372 1334.35,-141.195 1307.92,-123 1287.44,-108.896 1262.71,-95.2398 1244.36,-85.6927"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1245.9,-82.5474 1235.4,-81.094 1242.7,-88.7748 1245.9,-82.5474"/>
+<path fill="none" stroke="midnightblue" d="M1726.46,-179.404C1775.5,-165.422 1877.19,-137.827 1965,-123 2148.95,-91.9381 2372.9,-78.2198 2454.42,-74.0034"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2454.71,-77.4932 2464.52,-73.4922 2454.35,-70.5022 2454.71,-77.4932"/>
 </g>
 <!-- Node19 -->
 <g id="node19" class="node"><title>Node19</title>
-<polygon fill="white" stroke="#bfbfbf" points="1360.42,-123.5 1360.42,-142.5 1407.42,-142.5 1407.42,-123.5 1360.42,-123.5"/>
-<text text-anchor="middle" x="1383.92" y="-130.5" font-family="Helvetica,sans-Serif" font-size="10.00">cstdlib</text>
+<polygon fill="white" stroke="#bfbfbf" points="1637.5,-123.5 1637.5,-142.5 1684.5,-142.5 1684.5,-123.5 1637.5,-123.5"/>
+<text text-anchor="middle" x="1661" y="-130.5" font-family="Helvetica,sans-Serif" font-size="10.00">cstdlib</text>
 </g>
 <!-- Node9&#45;&gt;Node19 -->
 <g id="edge19" class="edge"><title>Node9&#45;&gt;Node19</title>
-<path fill="none" stroke="midnightblue" d="M1385.59,-179.083C1385.33,-172.006 1384.96,-161.861 1384.63,-152.986"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1388.12,-152.615 1384.25,-142.751 1381.12,-152.874 1388.12,-152.615"/>
+<path fill="none" stroke="midnightblue" d="M1691.06,-179.083C1686.02,-171.534 1678.66,-160.495 1672.49,-151.23"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1675.29,-149.13 1666.83,-142.751 1669.47,-153.013 1675.29,-149.13"/>
 </g>
 <!-- Node10&#45;&gt;Node8 -->
 <g id="edge10" class="edge"><title>Node10&#45;&gt;Node8</title>
-<path fill="none" stroke="midnightblue" d="M1492.81,-123.475C1502.38,-114.285 1517.83,-99.4563 1529.61,-88.156"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1532.27,-90.4585 1537.06,-81.0091 1527.42,-85.408 1532.27,-90.4585"/>
+<path fill="none" stroke="midnightblue" d="M1212.9,-123.475C1228.67,-113.799 1254.64,-97.8721 1273.35,-86.3941"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1275.43,-89.2213 1282.13,-81.0091 1271.77,-83.2544 1275.43,-89.2213"/>
 </g>
 <!-- Node10&#45;&gt;Node11 -->
 <g id="edge11" class="edge"><title>Node10&#45;&gt;Node11</title>
-<path fill="none" stroke="midnightblue" d="M1425.36,-123.878C1422.17,-123.551 1419.01,-123.255 1415.92,-123 939.062,-83.5615 816.773,-126.597 339.924,-87 328.52,-86.0531 316.481,-84.7546 304.729,-83.3212"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="304.857,-79.8098 294.498,-82.0322 303.982,-86.7549 304.857,-79.8098"/>
+<path fill="none" stroke="midnightblue" d="M1140.28,-127.816C991.9,-117.243 602.054,-89.4631 438.211,-77.7881"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="437.974,-74.2624 427.751,-77.0427 437.477,-81.2447 437.974,-74.2624"/>
 </g>
 <!-- Node10&#45;&gt;Node15 -->
 <g id="edge15" class="edge"><title>Node10&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M1542.51,-126.943C1557.93,-125.634 1574.55,-124.244 1589.92,-123 1829.46,-103.611 2118.35,-81.9825 2213.69,-74.8913"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2214.12,-78.3689 2223.83,-74.1372 2213.6,-71.3881 2214.12,-78.3689"/>
+<path fill="none" stroke="midnightblue" d="M1257.75,-127.625C1415.53,-115.876 1844.7,-83.9162 1965.8,-74.8982"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1966.19,-78.3786 1975.9,-74.1455 1965.67,-71.3979 1966.19,-78.3786"/>
 </g>
 <!-- Node10&#45;&gt;Node16 -->
 <g id="edge16" class="edge"><title>Node10&#45;&gt;Node16</title>
-<path fill="none" stroke="midnightblue" d="M1425.35,-123.935C1422.17,-123.594 1419.01,-123.279 1415.92,-123 1034.3,-88.4766 571.069,-76.4183 427.498,-73.3615"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="427.397,-69.8588 417.326,-73.1488 427.251,-76.8572 427.397,-69.8588"/>
+<path fill="none" stroke="midnightblue" d="M1144.41,-123.475C1068.47,-111.616 932.417,-90.3683 862.365,-79.4283"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="862.535,-75.9126 852.115,-77.8277 861.455,-82.8288 862.535,-75.9126"/>
 </g>
 <!-- Node10&#45;&gt;Node17 -->
 <g id="edge17" class="edge"><title>Node10&#45;&gt;Node17</title>
-<path fill="none" stroke="midnightblue" d="M1445.81,-123.475C1392.81,-111.62 1297.87,-90.3827 1248.95,-79.4394"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1249.48,-75.972 1238.96,-77.2046 1247.95,-82.8032 1249.48,-75.972"/>
+<path fill="none" stroke="midnightblue" d="M1257.64,-129.289C1482.6,-118.889 2286.15,-81.7392 2454.81,-73.9421"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2455.16,-77.4297 2464.99,-73.4715 2454.83,-70.4372 2455.16,-77.4297"/>
 </g>
 <!-- Node18 -->
 <g id="node18" class="node"><title>Node18</title>
-<polygon fill="white" stroke="#bfbfbf" points="1395.92,-62 1395.92,-81 1445.92,-81 1445.92,-62 1395.92,-62"/>
-<text text-anchor="middle" x="1420.92" y="-69" font-family="Helvetica,sans-Serif" font-size="10.00">atomic</text>
+<polygon fill="white" stroke="#bfbfbf" points="1076,-62 1076,-81 1126,-81 1126,-62 1076,-62"/>
+<text text-anchor="middle" x="1101" y="-69" font-family="Helvetica,sans-Serif" font-size="10.00">atomic</text>
 </g>
 <!-- Node10&#45;&gt;Node18 -->
 <g id="edge18" class="edge"><title>Node10&#45;&gt;Node18</title>
-<path fill="none" stroke="midnightblue" d="M1474.9,-123.475C1465.17,-114.285 1449.47,-99.4563 1437.5,-88.156"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1439.61,-85.3308 1429.93,-81.0091 1434.8,-90.4199 1439.61,-85.3308"/>
+<path fill="none" stroke="midnightblue" d="M1184.96,-123.475C1168.95,-113.755 1142.55,-97.7266 1123.63,-86.2372"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1125.38,-83.2072 1115.01,-81.0091 1121.75,-89.1907 1125.38,-83.2072"/>
 </g>
 <!-- Node12 -->
 <g id="node12" class="node"><title>Node12</title>
-<polygon fill="white" stroke="#bfbfbf" points="94.9239,-0.5 94.9239,-19.5 184.924,-19.5 184.924,-0.5 94.9239,-0.5"/>
-<text text-anchor="middle" x="139.924" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">dlpack/dlpack.h</text>
+<polygon fill="white" stroke="#bfbfbf" points="228,-0.5 228,-19.5 318,-19.5 318,-0.5 228,-0.5"/>
+<text text-anchor="middle" x="273" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">dlpack/dlpack.h</text>
 </g>
 <!-- Node11&#45;&gt;Node12 -->
 <g id="edge12" class="edge"><title>Node11&#45;&gt;Node12</title>
-<path fill="none" stroke="midnightblue" d="M209.358,-56.3993C195.044,-47.0402 176.312,-34.7924 161.912,-25.3771"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="163.45,-22.2009 153.165,-19.6578 159.62,-28.0597 163.45,-22.2009"/>
+<path fill="none" stroke="midnightblue" d="M342.434,-56.3993C328.12,-47.0402 309.388,-34.7924 294.989,-25.3771"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="296.526,-22.2009 286.241,-19.6578 292.696,-28.0597 296.526,-22.2009"/>
 </g>
 <!-- Node13 -->
 <g id="node13" class="node"><title>Node13</title>
-<polygon fill="white" stroke="#bfbfbf" points="203.424,-0.5 203.424,-19.5 258.424,-19.5 258.424,-0.5 203.424,-0.5"/>
-<text text-anchor="middle" x="230.924" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">stddef.h</text>
+<polygon fill="white" stroke="#bfbfbf" points="336.5,-0.5 336.5,-19.5 391.5,-19.5 391.5,-0.5 336.5,-0.5"/>
+<text text-anchor="middle" x="364" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">stddef.h</text>
 </g>
 <!-- Node11&#45;&gt;Node13 -->
 <g id="edge13" class="edge"><title>Node11&#45;&gt;Node13</title>
-<path fill="none" stroke="midnightblue" d="M230.924,-56.3993C230.924,-48.4664 230.924,-38.458 230.924,-29.8583"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="234.424,-29.6577 230.924,-19.6578 227.424,-29.6578 234.424,-29.6577"/>
+<path fill="none" stroke="midnightblue" d="M364,-56.3993C364,-48.4664 364,-38.458 364,-29.8583"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="367.5,-29.6577 364,-19.6578 360.5,-29.6578 367.5,-29.6577"/>
 </g>
 <!-- Node14 -->
 <g id="node14" class="node"><title>Node14</title>
-<polygon fill="white" stroke="#bfbfbf" points="276.424,-0.5 276.424,-19.5 329.424,-19.5 329.424,-0.5 276.424,-0.5"/>
-<text text-anchor="middle" x="302.924" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">stdint.h</text>
+<polygon fill="white" stroke="#bfbfbf" points="409.5,-0.5 409.5,-19.5 462.5,-19.5 462.5,-0.5 409.5,-0.5"/>
+<text text-anchor="middle" x="436" y="-7.5" font-family="Helvetica,sans-Serif" font-size="10.00">stdint.h</text>
 </g>
 <!-- Node11&#45;&gt;Node14 -->
 <g id="edge14" class="edge"><title>Node11&#45;&gt;Node14</title>
-<path fill="none" stroke="midnightblue" d="M247.987,-56.3993C258.989,-47.3076 273.289,-35.4899 284.542,-26.1909"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="286.968,-28.726 292.447,-19.6578 282.509,-23.33 286.968,-28.726"/>
-</g>
-<!-- Node20&#45;&gt;Node8 -->
-<g id="edge24" class="edge"><title>Node20&#45;&gt;Node8</title>
-<path fill="none" stroke="midnightblue" d="M1529.51,-301.686C1568.71,-296.433 1620.08,-284.053 1655.92,-255 1699.47,-219.704 1700.66,-197.464 1713.92,-143 1726.27,-92.3305 1653.03,-77.6848 1599.32,-73.6785"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1599.41,-70.1773 1589.21,-73.0297 1598.96,-77.1629 1599.41,-70.1773"/>
-</g>
-<!-- Node20&#45;&gt;Node10 -->
-<g id="edge53" class="edge"><title>Node20&#45;&gt;Node10</title>
-<path fill="none" stroke="midnightblue" d="M1529.64,-295.547C1572.01,-286.821 1624.78,-272.762 1637.92,-255 1674.93,-204.973 1580.32,-164.634 1523.37,-145.699"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1524.14,-142.272 1513.55,-142.522 1521.99,-148.932 1524.14,-142.272"/>
-</g>
-<!-- Node20&#45;&gt;Node11 -->
-<g id="edge25" class="edge"><title>Node20&#45;&gt;Node11</title>
-<path fill="none" stroke="midnightblue" d="M1416.35,-304.899C1213.6,-302.449 530.523,-291.537 439.924,-255 354.213,-220.435 279.587,-135.178 247.57,-94.6225"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="250.297,-92.4277 241.396,-86.6812 244.771,-96.7242 250.297,-92.4277"/>
-</g>
-<!-- Node20&#45;&gt;Node15 -->
-<g id="edge57" class="edge"><title>Node20&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M1529.63,-295.542C1572.08,-287.181 1631.15,-273.604 1680.92,-255 1749.82,-229.251 1759.58,-206.172 1827.92,-179 1911.71,-145.688 1935.58,-145.411 2022.92,-123 2090.41,-105.682 2170.19,-88.3714 2213.68,-79.1993"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2214.6,-82.5821 2223.67,-77.1011 2213.16,-75.7316 2214.6,-82.5821"/>
-</g>
-<!-- Node20&#45;&gt;Node16 -->
-<g id="edge59" class="edge"><title>Node20&#45;&gt;Node16</title>
-<path fill="none" stroke="midnightblue" d="M1416.3,-303.851C1240.99,-298.495 714.511,-280.453 641.924,-255 614.696,-245.452 458.116,-128.96 402.51,-87.2418"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="404.299,-84.2085 394.202,-81.001 400.095,-89.8054 404.299,-84.2085"/>
-</g>
-<!-- Node20&#45;&gt;Node17 -->
-<g id="edge60" class="edge"><title>Node20&#45;&gt;Node17</title>
-<path fill="none" stroke="midnightblue" d="M1446.02,-291.356C1412.53,-272.941 1354.64,-238.414 1312.92,-199 1276.81,-164.882 1244.3,-115.82 1228.33,-89.9674"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1231.23,-88.0029 1223.05,-81.2751 1225.25,-91.6385 1231.23,-88.0029"/>
+<path fill="none" stroke="midnightblue" d="M381.063,-56.3993C392.065,-47.3076 406.365,-35.4899 417.618,-26.1909"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="420.044,-28.726 425.523,-19.6578 415.585,-23.33 420.044,-28.726"/>
+</g>
+<!-- Node26&#45;&gt;Node7 -->
+<g id="edge37" class="edge"><title>Node26&#45;&gt;Node7</title>
+<path fill="none" stroke="midnightblue" d="M1587.68,-299.467C1688.71,-288.713 1899.99,-266.224 2013.69,-254.123"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2014.13,-257.595 2023.71,-253.056 2013.39,-250.634 2014.13,-257.595"/>
+</g>
+<!-- Node26&#45;&gt;Node8 -->
+<g id="edge35" class="edge"><title>Node26&#45;&gt;Node8</title>
+<path fill="none" stroke="midnightblue" d="M1543.91,-291.422C1556.11,-276.35 1570.79,-252.275 1558,-235 1525.37,-190.933 1487.89,-225.693 1440,-199 1385.97,-168.887 1334.48,-115.81 1310.33,-88.9941"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1312.74,-86.431 1303.48,-81.2727 1307.5,-91.0762 1312.74,-86.431"/>
+</g>
+<!-- Node26&#45;&gt;Node10 -->
+<g id="edge65" class="edge"><title>Node26&#45;&gt;Node10</title>
+<path fill="none" stroke="midnightblue" d="M1474.45,-291.503C1431.94,-280.533 1377.63,-265.429 1357,-255 1299.71,-226.044 1242.36,-175.39 1215.21,-149.781"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1217.44,-147.066 1207.79,-142.689 1212.6,-152.128 1217.44,-147.066"/>
+</g>
+<!-- Node26&#45;&gt;Node11 -->
+<g id="edge36" class="edge"><title>Node26&#45;&gt;Node11</title>
+<path fill="none" stroke="midnightblue" d="M1474.38,-305.068C1263.86,-303.166 533.466,-293.807 437,-255 380.723,-232.36 366.412,-203.205 359,-143 357.107,-127.625 358.297,-110.268 359.99,-96.624"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="363.475,-96.9771 361.406,-86.5862 356.543,-95.9993 363.475,-96.9771"/>
+</g>
+<!-- Node26&#45;&gt;Node15 -->
+<g id="edge69" class="edge"><title>Node26&#45;&gt;Node15</title>
+<path fill="none" stroke="midnightblue" d="M1550.16,-291.458C1567.44,-277.038 1588.26,-254.07 1575,-235 1548.74,-197.249 1504.26,-236.751 1478,-199 1458.71,-171.27 1455.3,-148.012 1478,-123 1510.86,-86.799 1857.18,-75.7556 1965.68,-73.1715"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1966.08,-76.6634 1976,-72.9345 1965.92,-69.6652 1966.08,-76.6634"/>
+</g>
+<!-- Node26&#45;&gt;Node16 -->
+<g id="edge71" class="edge"><title>Node26&#45;&gt;Node16</title>
+<path fill="none" stroke="midnightblue" d="M1474.47,-305.986C1348.19,-306.202 1047.39,-301.646 959,-255 888.763,-217.933 842.72,-128.745 825.545,-90.4568"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="828.67,-88.8656 821.47,-81.0928 822.251,-91.6588 828.67,-88.8656"/>
+</g>
+<!-- Node26&#45;&gt;Node17 -->
+<g id="edge72" class="edge"><title>Node26&#45;&gt;Node17</title>
+<path fill="none" stroke="midnightblue" d="M1587.9,-304.822C1699.5,-302.646 1954.56,-293.491 2165,-255 2284.27,-233.186 2308.58,-205.012 2427,-179 2479.24,-167.524 2630.12,-183.553 2665,-143 2707.82,-93.211 2579.27,-78.3147 2517.33,-74.0831"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="2517.5,-70.5867 2507.3,-73.4511 2517.06,-77.5729 2517.5,-70.5867"/>
+</g>
+<!-- Node26&#45;&gt;Node23 -->
+<g id="edge68" class="edge"><title>Node26&#45;&gt;Node23</title>
+<path fill="none" stroke="midnightblue" d="M1582.91,-291.44C1601.04,-283.765 1619.47,-272.194 1630,-255 1640.71,-237.51 1623.66,-217.944 1607.97,-204.892"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1610.08,-202.099 1600.05,-198.706 1605.78,-207.617 1610.08,-202.099"/>
+</g>
+<!-- Node26&#45;&gt;Node25 -->
+<g id="edge73" class="edge"><title>Node26&#45;&gt;Node25</title>
+<path fill="none" stroke="midnightblue" d="M1474.1,-294.118C1432.14,-285.122 1373.91,-271.376 1324,-255 1302.04,-247.795 1298.3,-241.057 1276,-235 1247.79,-227.339 1058.2,-203.698 979.817,-194.107"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="979.873,-190.588 969.523,-192.85 979.025,-197.536 979.873,-190.588"/>
 </g>
-<!-- Node21 -->
-<g id="node21" class="node"><title>Node21</title>
-<g id="a_node21"><a xlink:href="data__type_8h.html" target="_top" xlink:title="tvm/runtime/data_type.h">
-<polygon fill="white" stroke="black" points="947.924,-179.5 947.924,-198.5 1083.92,-198.5 1083.92,-179.5 947.924,-179.5"/>
-<text text-anchor="middle" x="1015.92" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/data_type.h</text>
+<!-- Node27 -->
+<g id="node27" class="node"><title>Node27</title>
+<g id="a_node27"><a xlink:href="data__type_8h.html" target="_top" xlink:title="tvm/runtime/data_type.h">
+<polygon fill="white" stroke="black" points="578,-179.5 578,-198.5 714,-198.5 714,-179.5 578,-179.5"/>
+<text text-anchor="middle" x="646" y="-186.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/data_type.h</text>
 </a>
 </g>
 </g>
-<!-- Node20&#45;&gt;Node21 -->
-<g id="edge26" class="edge"><title>Node20&#45;&gt;Node21</title>
-<path fill="none" stroke="midnightblue" d="M1430.94,-291.387C1384.73,-276.175 1308.08,-251.878 1240.92,-235 1185.43,-221.054 1121.38,-208.591 1075.84,-200.338"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1076.3,-196.864 1065.84,-198.538 1075.06,-203.754 1076.3,-196.864"/>
+<!-- Node26&#45;&gt;Node27 -->
+<g id="edge38" class="edge"><title>Node26&#45;&gt;Node27</title>
+<path fill="none" stroke="midnightblue" d="M1474.27,-295.534C1422.42,-286.124 1343.73,-271.089 1276,-255 1243.69,-247.324 1236.7,-240.806 1204,-235 1034.82,-204.963 833.178,-194.952 724.603,-191.632"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="724.49,-188.127 714.391,-191.331 724.283,-195.124 724.49,-188.127"/>
 </g>
-<!-- Node22 -->
-<g id="node22" class="node"><title>Node22</title>
-<g id="a_node22"><a xlink:href="runtime_2module_8h.html" target="_top" xlink:title="Runtime container of the functions generated by TVM, This is used to support dynamically link...">
-<polygon fill="white" stroke="black" points="1504.92,-235.5 1504.92,-254.5 1628.92,-254.5 1628.92,-235.5 1504.92,-235.5"/>
-<text text-anchor="middle" x="1566.92" y="-242.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/module.h</text>
+<!-- Node28 -->
+<g id="node28" class="node"><title>Node28</title>
+<g id="a_node28"><a xlink:href="runtime_2module_8h.html" target="_top" xlink:title="Runtime container of the functions generated by TVM, This is used to support dynamically link...">
+<polygon fill="white" stroke="black" points="1366,-235.5 1366,-254.5 1490,-254.5 1490,-235.5 1366,-235.5"/>
+<text text-anchor="middle" x="1428" y="-242.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/module.h</text>
 </a>
 </g>
 </g>
-<!-- Node20&#45;&gt;Node22 -->
-<g id="edge31" class="edge"><title>Node20&#45;&gt;Node22</title>
-<path fill="none" stroke="midnightblue" d="M1489.36,-291.399C1503.2,-281.862 1523.02,-269.325 1539.25,-259.842"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1541.37,-262.66 1548.32,-254.658 1537.9,-256.583 1541.37,-262.66"/>
+<!-- Node26&#45;&gt;Node28 -->
+<g id="edge43" class="edge"><title>Node26&#45;&gt;Node28</title>
+<path fill="none" stroke="midnightblue" d="M1500.75,-291.399C1483.18,-281.951 1461.73,-269.559 1446.58,-260.109"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1448.37,-257.096 1438.06,-254.658 1444.6,-262.994 1448.37,-257.096"/>
 </g>
-<!-- Node20&#45;&gt;Node24 -->
-<g id="edge56" class="edge"><title>Node20&#45;&gt;Node24</title>
-<path fill="none" stroke="midnightblue" d="M1529.7,-297.206C1597.83,-286.876 1707.78,-268.895 1746.92,-255 1783.19,-242.126 1821.67,-219.188 1844.74,-204.29"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1846.91,-207.049 1853.35,-198.637 1843.07,-201.197 1846.91,-207.049"/>
-</g>
-<!-- Node20&#45;&gt;Node26 -->
-<g id="edge61" class="edge"><title>Node20&#45;&gt;Node26</title>
-<path fill="none" stroke="midnightblue" d="M1416.15,-298.286C1368.26,-290.998 1298.5,-277.534 1240.92,-255 1224.6,-248.611 1223.69,-240.136 1206.92,-235 1202.79,-233.735 667.122,-200.761 525.788,-192.079"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="525.757,-188.57 515.561,-191.451 525.328,-195.557 525.757,-188.57"/>
-</g>
-<!-- Node27 -->
-<g id="node27" class="node"><title>Node27</title>
-<g id="a_node27"><a xlink:href="ndarray_8h.html" target="_top" xlink:title="A device&#45;independent managed NDArray abstraction. ">
-<polygon fill="white" stroke="black" points="651.424,-235.5 651.424,-254.5 774.424,-254.5 774.424,-235.5 651.424,-235.5"/>
-<text text-anchor="middle" x="712.924" y="-242.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/ndarray.h</text>
+<!-- Node30 -->
+<g id="node30" class="node"><title>Node30</title>
+<g id="a_node30"><a xlink:href="ndarray_8h.html" target="_top" xlink:title="A device&#45;independent managed NDArray abstraction. ">
+<polygon fill="white" stroke="black" points="446.5,-235.5 446.5,-254.5 569.5,-254.5 569.5,-235.5 446.5,-235.5"/>
+<text text-anchor="middle" x="508" y="-242.5" font-family="Helvetica,sans-Serif" font-size="10.00">tvm/runtime/ndarray.h</text>
 </a>
 </g>
 </g>
-<!-- Node20&#45;&gt;Node27 -->
-<g id="edge41" class="edge"><title>Node20&#45;&gt;Node27</title>
-<path fill="none" stroke="midnightblue" d="M1416.42,-301.076C1280.4,-290.427 934.881,-263.377 784.582,-251.61"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="784.779,-248.115 774.536,-250.824 784.233,-255.094 784.779,-248.115"/>
+<!-- Node26&#45;&gt;Node30 -->
+<g id="edge53" class="edge"><title>Node26&#45;&gt;Node30</title>
+<path fill="none" stroke="midnightblue" d="M1474.17,-302.195C1299.81,-292.054 772.586,-261.389 579.69,-250.17"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="579.847,-246.673 569.661,-249.586 579.441,-253.661 579.847,-246.673"/>
 </g>
-<!-- Node30 -->
-<g id="node30" class="node"><title>Node30</title>
-<polygon fill="white" stroke="#bfbfbf" points="1135.42,-235.5 1135.42,-254.5 1198.42,-254.5 1198.42,-235.5 1135.42,-235.5"/>
-<text text-anchor="middle" x="1166.92" y="-242.5" font-family="Helvetica,sans-Serif" font-size="10.00">functional</text>
+<!-- Node33 -->
+<g id="node33" class="node"><title>Node33</title>
+<polygon fill="white" stroke="#bfbfbf" points="1132.5,-235.5 1132.5,-254.5 1195.5,-254.5 1195.5,-235.5 1132.5,-235.5"/>
+<text text-anchor="middle" x="1164" y="-242.5" font-family="Helvetica,sans-Serif" font-size="10.00">functional</text>
 </g>
-<!-- Node20&#45;&gt;Node30 -->
-<g id="edge54" class="edge"><title>Node20&#45;&gt;Node30</title>
-<path fill="none" stroke="midnightblue" d="M1416.37,-294.538C1363.7,-284.324 1282.99,-268.659 1212.92,-255 1211.48,-254.718 1210,-254.43 1208.51,-254.14"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1209.08,-250.685 1198.6,-252.203 1207.74,-257.555 1209.08,-250.685"/>
+<!-- Node26&#45;&gt;Node33 -->
+<g id="edge66" class="edge"><title>Node26&#45;&gt;Node33</title>
+<path fill="none" stroke="midnightblue" d="M1474.46,-296.334C1400.22,-284.297 1271.59,-263.443 1205.63,-252.749"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="1206.03,-249.269 1195.6,-251.123 1204.91,-256.179 1206.03,-249.269"/>
 </g>
-<!-- Node20&#45;&gt;Node31 -->
-<g id="edge55" class="edge"><title>Node20&#45;&gt;Node31</title>
-<path fill="none" stroke="midnightblue" d="M1529.51,-297.239C1547.22,-294.905 1566.86,-292.575 1584.92,-291 1963.68,-257.976 2425.78,-248.484 2548.68,-246.463"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2548.93,-249.959 2558.87,-246.3 2548.82,-242.96 2548.93,-249.959"/>
+<!-- Node26&#45;&gt;Node34 -->
+<g id="edge67" class="edge"><title>Node26&#45;&gt;Node34</title>
+<path fill="none" stroke="midnightblue" d="M1474.43,-303.204C1231.69,-293.352 282.196,-254.815 96.5706,-247.281"/>
+<polygon fill="midnightblue" stroke="midnightblue" points="96.5322,-243.777 86.3985,-246.868 96.2483,-250.771 96.5322,-243.777"/>
 </g>
-<!-- Node32 -->
-<g id="node32" class="node"><title>Node32</title>
-<polygon fill="white" stroke="#bfbfbf" points="1445.42,-235.5 1445.42,-254.5 1486.42,-254.5 1486.42,-235.5 1445.42,-235.5"/>
-<text text-anchor="middle" x="1465.92" y="-242.5" font-family="Helvetica,sans-Serif" font-size="10.00">tuple</text>
-</g>
-<!-- Node20&#45;&gt;Node32 -->
-<g id="edge58" class="edge"><title>Node20&#45;&gt;Node32</title>
-<path fill="none" stroke="midnightblue" d="M1471.27,-291.399C1470.33,-283.466 1469.15,-273.458 1468.14,-264.858"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1471.59,-264.18 1466.94,-254.658 1464.63,-264.998 1471.59,-264.18"/>
-</g>
-<!-- Node21&#45;&gt;Node8 -->
-<g id="edge27" class="edge"><title>Node21&#45;&gt;Node8</title>
-<path fill="none" stroke="midnightblue" d="M1055.33,-179.413C1150.4,-158.694 1392.22,-105.995 1496.66,-83.2366"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1497.6,-86.614 1506.62,-81.065 1496.11,-79.7746 1497.6,-86.614"/>
-</g>
-<!-- Node21&#45;&gt;Node11 -->
-<g id="edge28" class="edge"><title>Node21&#45;&gt;Node11</title>
-<path fill="none" stroke="midnightblue" d="M976.859,-179.498C939.058,-171.049 880.254,-157.315 829.924,-143 802.481,-135.195 796.885,-128.676 768.924,-123 581.411,-84.9362 530.146,-107.621 339.924,-87 328.548,-85.7667 316.523,-84.316 304.777,-82.8173"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="304.917,-79.3063 294.55,-81.4922 304.017,-86.2483 304.917,-79.3063"/>
-</g>
-<!-- Node21&#45;&gt;Node15 -->
-<g id="edge29" class="edge"><title>Node21&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M1084,-185.92C1209.1,-181.585 1483.83,-169.682 1713.92,-143 1767.2,-136.822 1779.85,-130.701 1832.92,-123 1974.07,-102.521 2143.16,-83.5924 2213.13,-76.004"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2213.93,-79.4386 2223.49,-74.8849 2213.17,-72.4791 2213.93,-79.4386"/>
-</g>
-<!-- Node21&#45;&gt;Node16 -->
-<g id="edge30" class="edge"><title>Node21&#45;&gt;Node16</title>
-<path fill="none" stroke="midnightblue" d="M996.262,-179.481C962.788,-165.354 892.287,-137.231 829.924,-123 684.915,-89.9106 508.27,-78.1052 427.316,-74.229"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="427.152,-70.7178 417.002,-73.7536 426.83,-77.7104 427.152,-70.7178"/>
-</g>
-<!-- Node22&#45;&gt;Node9 -->
-<g id="edge34" class="edge"><title>Node22&#45;&gt;Node9</title>
-<path fill="none" stroke="midnightblue" d="M1538.24,-235.444C1507.4,-226.241 1458.2,-211.562 1424.09,-201.388"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1425.05,-198.021 1414.47,-198.516 1423.05,-204.729 1425.05,-198.021"/>
-</g>
-<!-- Node22&#45;&gt;Node10 -->
-<g id="edge35" class="edge"><title>Node22&#45;&gt;Node10</title>
-<path fill="none" stroke="midnightblue" d="M1560.41,-235.368C1546.65,-217.135 1514.43,-174.426 1496.51,-150.675"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1499.22,-148.466 1490.41,-142.591 1493.64,-152.682 1499.22,-148.466"/>
-</g>
-<!-- Node22&#45;&gt;Node11 -->
-<g id="edge33" class="edge"><title>Node22&#45;&gt;Node11</title>
-<path fill="none" stroke="midnightblue" d="M1508.29,-235.5C1456.57,-227.553 1379.3,-214.591 1312.92,-199 1282.26,-191.797 1275.34,-187.204 1244.92,-179 1144.18,-151.827 1120.14,-138.282 1016.92,-123 718.859,-78.8703 639.945,-114.888 339.924,-87 328.53,-85.9409 316.496,-84.5828 304.746,-83.1238"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="304.879,-79.6125 294.517,-81.8206 303.994,-86.5564 304.879,-79.6125"/>
-</g>
-<!-- Node22&#45;&gt;Node15 -->
-<g id="edge37" class="edge"><title>Node22&#45;&gt;Node15</title>
-<path fill="none" stroke="midnightblue" d="M1584.23,-235.351C1629.86,-212.939 1757.73,-152.668 1870.92,-123 1994.92,-90.4997 2147.77,-78.2043 2213.44,-74.195"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2213.8,-77.68 2223.58,-73.6003 2213.39,-70.692 2213.8,-77.68"/>
-</g>
-<!-- Node22&#45;&gt;Node20 -->
-<g id="edge40" class="edge"><title>Node22&#45;&gt;Node20</title>
-<path fill="none" stroke="midnightblue" d="M1558.18,-254.658C1546.98,-262.859 1527.55,-275.462 1510,-286.069"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1507.84,-283.277 1501.04,-291.399 1511.42,-289.293 1507.84,-283.277"/>
+<!-- Node35 -->
+<g id="node35" class="node"><title>Node35</title>
+<polygon fill="white" stroke="#bfbfbf" points="1508.5,-235.5 1508.5,-254.5 1549.5,-254.5 1549.5,-235.5 1508.5,-235.5"/>
+<text text-anchor="middle" x="1529" y="-242.5" font-family="Helvetica,sans-Serif" font-size="10.00">tuple</text>
 </g>
-<!-- Node23 -->
-<g id="node23" class="node"><title>Node23</title>
-<polygon fill="white" stroke="#bfbfbf" points="947.924,-123.5 947.924,-142.5 1007.92,-142.5 1007.92,-123.5 947.924,-123.5"/>
-<text text-anchor="middle" x="977.924" y="-130.5" font-family="Helvetica,sans-Serif" font-size="10.00">dmlc/io.h</text>
-</g>
-<!-- Node22&#45;&gt;Node23 -->
-<g id="edge32" class="edge"><title>Node22&#45;&gt;Node23</title>
-<path fill="none" stroke="midnightblue" d="M1506.01,-235.467C1447.79,-227.073 1357.65,-213.446 1279.92,-199 1185.66,-181.481 1075.78,-156.733 1018.06,-143.395"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1018.78,-139.968 1008.24,-141.12 1017.2,-146.787 1018.78,-139.968"/>
-</g>
-<!-- Node22&#45;&gt;Node24 -->
-<g id="edge36" class="edge"><title>Node22&#45;&gt;Node24</title>
-<path fill="none" stroke="midnightblue" d="M1614.3,-235.444C1673.24,-224.799 1772.75,-206.828 1827.29,-196.977"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1828.04,-200.399 1837.26,-195.177 1826.79,-193.51 1828.04,-200.399"/>
-</g>
-<!-- Node22&#45;&gt;Node25 -->
-<g id="edge38" class="edge"><title>Node22&#45;&gt;Node25</title>
-<path fill="none" stroke="midnightblue" d="M1629.19,-241.267C1841.59,-231.941 2535.8,-201.464 2739.96,-192.501"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="2740.32,-195.988 2750.16,-192.053 2740.02,-188.995 2740.32,-195.988"/>
-</g>
-<!-- Node22&#45;&gt;Node26 -->
-<g id="edge39" class="edge"><title>Node22&#45;&gt;Node26</title>
-<path fill="none" stroke="midnightblue" d="M1504.91,-235.919C1501.53,-235.582 1498.19,-235.272 1494.92,-235 1115.46,-203.358 1019.2,-218.636 638.924,-199 600.149,-196.998 555.652,-194.204 525.865,-192.263"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="525.801,-188.751 515.594,-191.589 525.343,-195.736 525.801,-188.751"/>
-</g>
-<!-- Node27&#45;&gt;Node10 -->
-<g id="edge44" class="edge"><title>Node27&#45;&gt;Node10</title>
-<path fill="none" stroke="midnightblue" d="M758.007,-235.465C795.489,-227.766 849.937,-215.176 895.924,-199 915.807,-192.006 918.53,-184.324 938.924,-179 1141.42,-126.141 1202.55,-163.74 1415.11,-142.998"/>
-<polygon fill="midnightblue" stroke="midnightblue" points="1415.74,-146.452 1425.34,-141.966 1415.04,-139.487 1415.74,-146.452"/>
+<!-- Node26&#45;&gt;Node35 -->
... 375163 lines suppressed ...