You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tvm.apache.org by co...@apache.org on 2022/03/02 00:30:09 UTC

[tvm-site] branch asf-site updated: Docs build at Wed Mar 2 00:29:54 UTC 2022

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

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


The following commit(s) were added to refs/heads/asf-site by this push:
     new 205120c  Docs build at Wed Mar  2 00:29:54 UTC 2022
205120c is described below

commit 205120c28c71c149433bc6342785e2782af0618d
Author: Cody Yu <co...@gmail.com>
AuthorDate: Wed Mar 2 00:29:55 2022 +0000

    Docs build at Wed Mar  2 00:29:54 UTC 2022
---
 .../tvmc_python.py                                 |  292 +
 .../convolution_opt.py                             |    7 +-
 .../tvmc_command_line_driver.py                    |    2 +-
 .../autotvm_relay_x86.ipynb                        |    2 +-
 .../micro_tflite.py                                |   34 +-
 .../micro_ethosu.ipynb                             |   16 +-
 .../autotvm_relay_x86.py                           |   10 +-
 .../micro_tflite.ipynb                             |    6 +-
 .../deploy_detection.py                            |    2 +-
 .../deploy_detection.ipynb                         |    2 +-
 .../micro_tvmc.ipynb                               |   92 +
 .../build_gcn.ipynb                                |    2 +-
 .../tvmc_python.ipynb                              |  141 +
 .../deploy_classification.ipynb                    |    2 +-
 .../micro_autotune.py                              |  132 +-
 .../deploy_classification.py                       |    4 +-
 .../micro_ethosu.py                                |   15 +-
 .../convolution_opt.ipynb                          |    2 +-
 .../using_relay_viz.ipynb                          |  151 +
 .../using_relay_viz.py                             |  159 +
 .../dabb6b43ea9ef9d7bd1a3912001deace/build_gcn.py  |    1 -
 .../eb483c672b88006c331115968e0ffd9b/micro_tvmc.py |  198 +
 .../tvmc_command_line_driver.ipynb                 |    2 +-
 .../micro_autotune.ipynb                           |   36 +-
 docs/_images/sphx_glr_micro_tvmc_thumb.png         |  Bin 0 -> 26786 bytes
 docs/_images/sphx_glr_tvmc_python_thumb.png        |  Bin 0 -> 26786 bytes
 docs/_images/sphx_glr_using_relay_viz_thumb.png    |  Bin 0 -> 26786 bytes
 docs/_sources/arch/benchmark.rst.txt               |    2 +-
 docs/_sources/arch/inferbound.rst.txt              |    8 +-
 docs/_sources/contribute/ci.rst.txt                |  176 +
 docs/_sources/contribute/code_review.rst.txt       |    8 +
 docs/_sources/contribute/committer_guide.rst.txt   |    2 +-
 docs/_sources/contribute/community.rst.txt         |    6 +-
 docs/_sources/contribute/document.rst.txt          |   71 +-
 docs/_sources/contribute/git_howto.rst.txt         |   47 +-
 docs/_sources/contribute/index.rst.txt             |    3 +-
 docs/_sources/contribute/pull_request.rst.txt      |    2 +
 .../how_to/compile_models/from_caffe2.rst.txt      |   16 +
 .../how_to/compile_models/from_mxnet.rst.txt       |    1 +
 .../how_to/compile_models/from_onnx.rst.txt        |    4 +-
 .../how_to/compile_models/from_paddle.rst.txt      |   14 +-
 .../how_to/compile_models/from_pytorch.rst.txt     |    9 +
 .../how_to/compile_models/from_tensorflow.rst.txt  |  150 +-
 .../compile_models/sg_execution_times.rst.txt      |   22 +-
 .../deploy_models/deploy_model_on_android.rst.txt  |    2 +-
 .../deploy_models/deploy_model_on_rasp.rst.txt     |    2 +-
 .../deploy_object_detection_pytorch.rst.txt        |   35 +-
 .../deploy_models/deploy_prequantized.rst.txt      |   26 +-
 .../deploy_prequantized_tflite.rst.txt             |    4 +-
 .../how_to/deploy_models/deploy_quantized.rst.txt  |    7 +-
 .../deploy_models/deploy_ssd_gluoncv.rst.txt       |    6 +-
 .../deploy_models/sg_execution_times.rst.txt       |   18 +-
 .../extend_tvm/bring_your_own_datatypes.rst.txt    |    8 +
 .../extend_tvm/low_level_custom_pass.rst.txt       |    7 +-
 .../how_to/extend_tvm/sg_execution_times.rst.txt   |   10 +-
 .../how_to/extend_tvm/use_pass_instrument.rst.txt  |   16 +-
 .../optimize_operators/opt_conv_cuda.rst.txt       |    2 +-
 .../optimize_operators/opt_conv_tensorcore.rst.txt |   29 +-
 .../how_to/optimize_operators/opt_gemm.rst.txt     |   69 +-
 .../optimize_operators/sg_execution_times.rst.txt  |    8 +-
 .../sg_execution_times.rst.txt                     |   16 +-
 .../tune_conv2d_layer_cuda.rst.txt                 | 1187 +--
 .../tune_network_arm.rst.txt                       |   80 +-
 .../tune_network_cuda.rst.txt                      |  100 +-
 .../tune_network_mali.rst.txt                      |   80 +-
 .../tune_network_x86.rst.txt                       |  183 +-
 .../tune_sparse_x86.rst.txt                        |   62 +-
 .../tune_with_autotvm/sg_execution_times.rst.txt   |   12 +-
 .../tune_with_autotvm/tune_conv2d_cuda.rst.txt     |   44 +-
 .../tune_with_autotvm/tune_relay_cuda.rst.txt      |    2 +-
 .../how_to/work_with_microtvm/index.rst.txt        |   20 +
 .../work_with_microtvm/micro_autotune.rst.txt      |  161 +-
 .../how_to/work_with_microtvm/micro_ethosu.rst.txt |   13 +-
 .../how_to/work_with_microtvm/micro_tflite.rst.txt |   40 +-
 .../how_to/work_with_microtvm/micro_tvmc.rst.txt   |  207 +
 .../work_with_microtvm/sg_execution_times.rst.txt  |   11 +-
 .../how_to/work_with_relay/build_gcn.rst.txt       |   50 +-
 docs/_sources/how_to/work_with_relay/index.rst.txt |   20 +
 .../work_with_relay/sg_execution_times.rst.txt     |    7 +-
 .../how_to/work_with_relay/using_relay_viz.rst.txt |  296 +
 .../how_to/work_with_schedules/reduction.rst.txt   |   46 +-
 .../how_to/work_with_schedules/scan.rst.txt        |   10 +-
 .../schedule_primitives.rst.txt                    |   21 +-
 .../work_with_schedules/sg_execution_times.rst.txt |   18 +-
 .../how_to/work_with_schedules/tensorize.rst.txt   |   14 +-
 .../work_with_schedules/tuple_inputs.rst.txt       |   22 +-
 docs/_sources/install/from_source.rst.txt          |    2 +-
 docs/_sources/reference/api/python/contrib.rst.txt |   10 +
 docs/_sources/reference/langref/relay_op.rst.txt   |   14 +-
 .../tutorials/autotvm/sg_execution_times.rst.txt   |    6 +-
 .../vta/tutorials/autotvm/tune_relay_vta.rst.txt   |    2 +-
 .../frontend/deploy_classification.rst.txt         |   10 +-
 .../tutorials/frontend/deploy_detection.rst.txt    |    6 +-
 .../tutorials/frontend/sg_execution_times.rst.txt  |    6 +-
 .../topic/vta/tutorials/matrix_multiply.rst.txt    |   22 +-
 .../vta/tutorials/optimize/convolution_opt.rst.txt |  155 +-
 .../tutorials/optimize/matrix_multiply_opt.rst.txt |   79 +-
 .../tutorials/optimize/sg_execution_times.rst.txt  |    6 +-
 .../topic/vta/tutorials/sg_execution_times.rst.txt |    6 +-
 .../topic/vta/tutorials/vta_get_started.rst.txt    |   12 +-
 .../tutorial/auto_scheduler_matmul_x86.rst.txt     |   24 +-
 docs/_sources/tutorial/autotvm_relay_x86.rst.txt   |   76 +-
 .../tutorial/cross_compilation_and_rpc.rst.txt     |    2 +-
 docs/_sources/tutorial/index.rst.txt               |   20 +
 docs/_sources/tutorial/intro_topi.rst.txt          |  222 +-
 docs/_sources/tutorial/relay_quick_start.rst.txt   |    2 +-
 docs/_sources/tutorial/sg_execution_times.rst.txt  |   25 +-
 .../tutorial/tensor_expr_get_started.rst.txt       |  105 +-
 .../tutorial/tvmc_command_line_driver.rst.txt      |    2 +-
 docs/_sources/tutorial/tvmc_python.rst.txt         |  295 +
 docs/_static/documentation_options.js              |    2 +-
 docs/arch/benchmark.html                           |    6 +-
 docs/arch/convert_layout.html                      |    4 +-
 docs/arch/debugger.html                            |    4 +-
 docs/arch/device_target_interactions.html          |    4 +-
 docs/arch/frontend/tensorflow.html                 |    4 +-
 docs/arch/hybrid_script.html                       |    4 +-
 docs/arch/index.html                               |    4 +-
 docs/arch/inferbound.html                          |   12 +-
 .../arch/introduction_to_module_serialization.html |    4 +-
 docs/arch/microtvm_design.html                     |    4 +-
 docs/arch/microtvm_project_api.html                |    4 +-
 docs/arch/model_library_format.html                |    4 +-
 docs/arch/pass_infra.html                          |    4 +-
 docs/arch/relay_intro.html                         |    4 +-
 docs/arch/relay_op_strategy.html                   |    4 +-
 docs/arch/runtime.html                             |    4 +-
 docs/arch/runtimes/vulkan.html                     |    4 +-
 docs/arch/security.html                            |    4 +-
 docs/arch/virtual_machine.html                     |    4 +-
 docs/contribute/ci.html                            |  527 ++
 docs/contribute/code_guide.html                    |    7 +-
 docs/contribute/code_review.html                   |   22 +-
 docs/contribute/committer_guide.html               |   11 +-
 docs/contribute/community.html                     |   15 +-
 docs/contribute/document.html                      |   71 +-
 docs/contribute/error_handling.html                |    7 +-
 docs/contribute/git_howto.html                     |   65 +-
 docs/contribute/index.html                         |   24 +-
 docs/contribute/pull_request.html                  |    9 +-
 docs/contribute/release_process.html               |   11 +-
 docs/dev/how_to/how_to.html                        |    4 +-
 docs/dev/how_to/pytest_target_parametrization.html |    4 +-
 docs/dev/how_to/relay_add_op.html                  |    4 +-
 docs/dev/how_to/relay_add_pass.html                |    4 +-
 docs/dev/how_to/relay_bring_your_own_codegen.html  |    4 +-
 docs/dev/tutorial/codebase_walkthrough.html        |    4 +-
 docs/dev/tutorial/index.html                       |    4 +-
 docs/errors.html                                   |    4 +-
 docs/faq.html                                      |    4 +-
 docs/genindex.html                                 |  193 +-
 docs/how_to/compile_models/from_caffe2.html        |   19 +-
 docs/how_to/compile_models/from_coreml.html        |    4 +-
 docs/how_to/compile_models/from_darknet.html       |    8 +-
 docs/how_to/compile_models/from_keras.html         |    8 +-
 docs/how_to/compile_models/from_mxnet.html         |   11 +-
 docs/how_to/compile_models/from_onnx.html          |   12 +-
 docs/how_to/compile_models/from_paddle.html        |   10 +-
 docs/how_to/compile_models/from_pytorch.html       |   13 +-
 docs/how_to/compile_models/from_tensorflow.html    |  150 +-
 docs/how_to/compile_models/from_tflite.html        |    8 +-
 docs/how_to/compile_models/index.html              |    4 +-
 docs/how_to/compile_models/sg_execution_times.html |   26 +-
 docs/how_to/deploy/android.html                    |    4 +-
 docs/how_to/deploy/arm_compute_lib.html            |    4 +-
 docs/how_to/deploy/bnns.html                       |    4 +-
 docs/how_to/deploy/cpp_deploy.html                 |    4 +-
 docs/how_to/deploy/hls.html                        |    4 +-
 docs/how_to/deploy/index.html                      |    4 +-
 docs/how_to/deploy/integrate.html                  |    4 +-
 docs/how_to/deploy/tensorrt.html                   |    4 +-
 docs/how_to/deploy/vitis_ai.html                   |    4 +-
 .../deploy_models/deploy_model_on_android.html     |    6 +-
 .../how_to/deploy_models/deploy_model_on_rasp.html |    6 +-
 .../deploy_object_detection_pytorch.html           |   70 +-
 docs/how_to/deploy_models/deploy_prequantized.html |   26 +-
 .../deploy_models/deploy_prequantized_tflite.html  |    8 +-
 docs/how_to/deploy_models/deploy_quantized.html    |    7 +-
 docs/how_to/deploy_models/deploy_sparse.html       |    6 +-
 docs/how_to/deploy_models/deploy_ssd_gluoncv.html  |   30 +-
 docs/how_to/deploy_models/index.html               |    4 +-
 docs/how_to/deploy_models/sg_execution_times.html  |   22 +-
 .../extend_tvm/bring_your_own_datatypes.html       |    8 +-
 docs/how_to/extend_tvm/index.html                  |    8 +-
 docs/how_to/extend_tvm/low_level_custom_pass.html  |   11 +-
 docs/how_to/extend_tvm/sg_execution_times.html     |   14 +-
 docs/how_to/extend_tvm/use_pass_infra.html         |    4 +-
 docs/how_to/extend_tvm/use_pass_instrument.html    |   20 +-
 docs/how_to/index.html                             |    4 +-
 docs/how_to/optimize_operators/index.html          |    4 +-
 docs/how_to/optimize_operators/opt_conv_cuda.html  |    6 +-
 .../optimize_operators/opt_conv_tensorcore.html    |   33 +-
 docs/how_to/optimize_operators/opt_gemm.html       |   73 +-
 .../optimize_operators/sg_execution_times.html     |   12 +-
 docs/how_to/profile/index.html                     |    4 +-
 docs/how_to/profile/papi.html                      |    4 +-
 docs/how_to/tune_with_autoscheduler/index.html     |    4 +-
 .../sg_execution_times.html                        |   18 +-
 .../tune_conv2d_layer_cuda.html                    | 1186 +--
 .../tune_with_autoscheduler/tune_network_arm.html  |   84 +-
 .../tune_with_autoscheduler/tune_network_cuda.html |  104 +-
 .../tune_with_autoscheduler/tune_network_mali.html |   84 +-
 .../tune_with_autoscheduler/tune_network_x86.html  |  183 +-
 .../tune_with_autoscheduler/tune_sparse_x86.html   |   65 +-
 docs/how_to/tune_with_autotvm/index.html           |    4 +-
 .../tune_with_autotvm/sg_execution_times.html      |   16 +-
 .../how_to/tune_with_autotvm/tune_conv2d_cuda.html |   48 +-
 docs/how_to/tune_with_autotvm/tune_relay_arm.html  |    4 +-
 docs/how_to/tune_with_autotvm/tune_relay_cuda.html |    6 +-
 .../tune_with_autotvm/tune_relay_mobile_gpu.html   |    4 +-
 docs/how_to/tune_with_autotvm/tune_relay_x86.html  |    4 +-
 docs/how_to/work_with_microtvm/index.html          |   19 +-
 docs/how_to/work_with_microtvm/micro_autotune.html |  164 +-
 docs/how_to/work_with_microtvm/micro_ethosu.html   |   25 +-
 .../work_with_microtvm/micro_reference_vm.html     |    7 +-
 docs/how_to/work_with_microtvm/micro_tflite.html   |   51 +-
 docs/how_to/work_with_microtvm/micro_tvmc.html     |  569 ++
 .../work_with_microtvm/sg_execution_times.html     |   15 +-
 docs/how_to/work_with_relay/build_gcn.html         |   57 +-
 docs/how_to/work_with_relay/index.html             |   11 +-
 .../how_to/work_with_relay/sg_execution_times.html |   11 +-
 .../how_to/work_with_relay/using_external_lib.html |    9 +-
 docs/how_to/work_with_relay/using_relay_viz.html   |  610 ++
 docs/how_to/work_with_schedules/extern_op.html     |    4 +-
 docs/how_to/work_with_schedules/index.html         |    8 +-
 docs/how_to/work_with_schedules/intrin_math.html   |    4 +-
 docs/how_to/work_with_schedules/reduction.html     |   52 +-
 docs/how_to/work_with_schedules/scan.html          |   14 +-
 .../work_with_schedules/schedule_primitives.html   |   25 +-
 .../work_with_schedules/sg_execution_times.html    |   22 +-
 docs/how_to/work_with_schedules/tedd.html          |    4 +-
 docs/how_to/work_with_schedules/tensorize.html     |   18 +-
 docs/how_to/work_with_schedules/tuple_inputs.html  |   26 +-
 docs/index.html                                    |    4 +-
 docs/install/docker.html                           |    4 +-
 docs/install/from_source.html                      |    6 +-
 docs/install/index.html                            |    4 +-
 docs/install/nnpack.html                           |    4 +-
 docs/install/tlcpack.html                          |    4 +-
 docs/objects.inv                                   |  Bin 21255 -> 22072 bytes
 docs/py-modindex.html                              |   19 +-
 docs/reference/api/doxygen/affine__type_8h.html    |    2 +-
 .../api/doxygen/affine__type_8h__incl.svg          | 1254 +--
 .../api/doxygen/affine__type_8h_source.html        |   10 +-
 docs/reference/api/doxygen/algorithm_8h.html       |    2 +-
 docs/reference/api/doxygen/algorithm_8h__incl.svg  | 1683 ++--
 docs/reference/api/doxygen/algorithms_8h.html      |  119 +
 docs/reference/api/doxygen/algorithms_8h__incl.svg | 1475 +++
 .../api/doxygen/algorithms_8h_source.html          |   82 +
 docs/reference/api/doxygen/analyzer_8h.html        |    4 +-
 .../api/doxygen/analyzer_8h__dep__incl.svg         |  102 +-
 docs/reference/api/doxygen/analyzer_8h__incl.svg   | 1454 +--
 docs/reference/api/doxygen/analyzer_8h_source.html |   10 +-
 docs/reference/api/doxygen/annotated.html          |  773 +-
 docs/reference/api/doxygen/annotation_8h.html      |    2 +-
 docs/reference/api/doxygen/annotation_8h__incl.svg | 1336 +--
 docs/reference/api/doxygen/arg__info_8h.html       |    4 +-
 .../api/doxygen/arg__info_8h__dep__incl.svg        |  190 +-
 docs/reference/api/doxygen/arg__info_8h__incl.svg  | 1534 ++--
 .../reference/api/doxygen/arg__info_8h_source.html |   12 +-
 docs/reference/api/doxygen/array_8h.html           |    2 +-
 docs/reference/api/doxygen/array_8h__dep__incl.svg | 1852 ++--
 docs/reference/api/doxygen/array_8h_source.html    |   12 +-
 .../api/doxygen/array__utils_8h__incl.svg          |  118 +-
 .../api/doxygen/attr__registry__map_8h.html        |    2 +-
 .../doxygen/attr__registry__map_8h__dep__incl.svg  | 1056 +--
 .../api/doxygen/attr__registry__map_8h_source.html |    2 +-
 .../api/doxygen/auto__schedule_8h__incl.svg        | 1460 +--
 .../api/doxygen/auto__schedule_8h_source.html      |    8 +-
 .../doxygen/auto__scheduler_2cost__model_8h.html   |  128 +
 .../auto__scheduler_2cost__model_8h__incl.svg      | 1440 +++
 .../auto__scheduler_2cost__model_8h_source.html    |  110 +
 .../doxygen/auto__scheduler_2feature_8h__incl.svg  |  188 +-
 docs/reference/api/doxygen/autodiff_8h.html        |    2 +-
 docs/reference/api/doxygen/autodiff_8h__incl.svg   | 1456 +--
 docs/reference/api/doxygen/bias__add_8h__incl.svg  |   82 +-
 .../reference/api/doxygen/bias__add_8h_source.html |    2 +-
 docs/reference/api/doxygen/bitserial_8h.html       |    2 +-
 docs/reference/api/doxygen/bitserial_8h__incl.svg  | 1489 ++--
 docs/reference/api/doxygen/block__scope_8h.html    |    4 +-
 .../api/doxygen/block__scope_8h__dep__incl.svg     |  222 +-
 .../api/doxygen/block__scope_8h__incl.svg          | 1444 +--
 .../api/doxygen/block__scope_8h_source.html        |   16 +-
 docs/reference/api/doxygen/bound_8h.html           |    2 +-
 docs/reference/api/doxygen/bound_8h__incl.svg      | 1466 +--
 docs/reference/api/doxygen/broadcast_8h__incl.svg  |  106 +-
 docs/reference/api/doxygen/buffer_8h.html          |    2 +-
 .../reference/api/doxygen/buffer_8h__dep__incl.svg |   28 +-
 docs/reference/api/doxygen/buffer_8h__incl.svg     | 1302 +--
 docs/reference/api/doxygen/buffer_8h_source.html   |   16 +-
 docs/reference/api/doxygen/builder_8h.html         |    4 +-
 .../api/doxygen/builder_8h__dep__incl.svg          |   76 +-
 docs/reference/api/doxygen/builder_8h__incl.svg    | 1250 +--
 docs/reference/api/doxygen/builder_8h_source.html  |   47 +-
 docs/reference/api/doxygen/builtin_8h.html         |    8 +-
 .../api/doxygen/builtin_8h__dep__incl.svg          |  188 +-
 docs/reference/api/doxygen/builtin_8h__incl.svg    | 1190 +--
 docs/reference/api/doxygen/builtin_8h_source.html  |   32 +-
 docs/reference/api/doxygen/bytecode_8h.html        |    4 +-
 docs/reference/api/doxygen/bytecode_8h_source.html |   95 +-
 .../api/doxygen/c__backend__api_8h_source.html     |    4 +-
 docs/reference/api/doxygen/c__runtime__api_8h.html |    2 +-
 .../api/doxygen/c__runtime__api_8h__dep__incl.svg  | 1537 ++--
 .../api/doxygen/c__runtime__api_8h_source.html     |    6 +-
 docs/reference/api/doxygen/call_8h.html            |    2 +-
 docs/reference/api/doxygen/call_8h__incl.svg       | 1336 +--
 docs/reference/api/doxygen/classes.html            |  419 +-
 .../classtvm_1_1AffineTypeNode__coll__graph.svg    |    4 +-
 .../classtvm_1_1AffineType__coll__graph.svg        |    4 +-
 .../classtvm_1_1AttrFieldInfoNode__coll__graph.svg |    4 +-
 .../classtvm_1_1AttrFieldInfo__coll__graph.svg     |    4 +-
 .../api/doxygen/classtvm_1_1Attrs__coll__graph.svg |    4 +-
 .../api/doxygen/classtvm_1_1BaseAttrsNode.html     |   10 +-
 .../classtvm_1_1BaseAttrsNode__coll__graph.svg     |   16 +-
 .../classtvm_1_1BaseExprNode__coll__graph.svg      |    4 +-
 .../doxygen/classtvm_1_1BaseExpr__coll__graph.svg  |    4 +-
 .../doxygen/classtvm_1_1BaseFuncNode-members.html  |    2 +-
 .../api/doxygen/classtvm_1_1BaseFuncNode.html      |    6 +-
 .../classtvm_1_1BaseFuncNode__coll__graph.svg      |    4 +-
 .../doxygen/classtvm_1_1BaseFunc__coll__graph.svg  |    4 +-
 ...classtvm_1_1BaseTensorTypeNode__coll__graph.svg |    4 +-
 .../classtvm_1_1BaseTensorType__coll__graph.svg    |    4 +-
 .../api/doxygen/classtvm_1_1Bool__coll__graph.svg  |    4 +-
 .../classtvm_1_1CompilationConfigNode-members.html |    8 +-
 .../doxygen/classtvm_1_1CompilationConfigNode.html |   66 +-
 ...sstvm_1_1CompilationConfigNode__coll__graph.svg |  296 +-
 ...vm_1_1CompilationConfigNode__inherit__graph.svg |    8 +-
 .../classtvm_1_1CompilationConfig__coll__graph.svg |    4 +-
 .../classtvm_1_1CompileError__coll__graph.svg      |    4 +-
 .../classtvm_1_1ConstructorNode-members.html       |    2 +-
 .../api/doxygen/classtvm_1_1ConstructorNode.html   |    6 +-
 .../classtvm_1_1ConstructorNode__coll__graph.svg   |    4 +-
 .../classtvm_1_1Constructor__coll__graph.svg       |    4 +-
 .../classtvm_1_1DiagnosticBuilder__coll__graph.svg |    4 +-
 ...sstvm_1_1DiagnosticContextNode__coll__graph.svg |    4 +-
 .../classtvm_1_1DiagnosticContext__coll__graph.svg |    4 +-
 .../classtvm_1_1DiagnosticNode__coll__graph.svg    |    4 +-
 ...classtvm_1_1DiagnosticRenderer__coll__graph.svg |    4 +-
 .../classtvm_1_1Diagnostic__coll__graph.svg        |    4 +-
 .../classtvm_1_1DictAttrsNode__coll__graph.svg     |    4 +-
 .../doxygen/classtvm_1_1DictAttrs__coll__graph.svg |    4 +-
 .../api/doxygen/classtvm_1_1EnvFuncNode.html       |    2 +-
 .../classtvm_1_1EnvFuncNode__coll__graph.svg       |  230 +-
 .../doxygen/classtvm_1_1EnvFunc__coll__graph.svg   |    4 +-
 .../classtvm_1_1FloatImmNode__coll__graph.svg      |    4 +-
 .../doxygen/classtvm_1_1FloatImm__coll__graph.svg  |    4 +-
 .../classtvm_1_1FuncTypeNode__coll__graph.svg      |    4 +-
 .../doxygen/classtvm_1_1FuncType__coll__graph.svg  |    4 +-
 .../doxygen/classtvm_1_1GenericFunc-members.html   |   31 +-
 .../api/doxygen/classtvm_1_1GenericFunc.html       |   26 +-
 .../api/doxygen/classtvm_1_1GenericFuncNode.html   |    2 +-
 .../classtvm_1_1GenericFuncNode__coll__graph.svg   |  131 +-
 .../classtvm_1_1GenericFunc__coll__graph.svg       |  105 +-
 .../classtvm_1_1GenericFunc__inherit__graph.svg    |   75 +-
 .../classtvm_1_1GlobalTypeVarNode__coll__graph.svg |    4 +-
 .../classtvm_1_1GlobalTypeVar__coll__graph.svg     |    4 +-
 .../doxygen/classtvm_1_1GlobalVarNode-members.html |    2 +-
 .../api/doxygen/classtvm_1_1GlobalVarNode.html     |    6 +-
 .../classtvm_1_1GlobalVarNode__coll__graph.svg     |    4 +-
 .../doxygen/classtvm_1_1GlobalVar__coll__graph.svg |    4 +-
 .../classtvm_1_1IRModuleNode__coll__graph.svg      |    4 +-
 .../doxygen/classtvm_1_1IRModule__coll__graph.svg  |    4 +-
 ...classtvm_1_1IncompleteTypeNode__coll__graph.svg |    4 +-
 .../classtvm_1_1IncompleteType__coll__graph.svg    |    4 +-
 .../classtvm_1_1IntImmNode__coll__graph.svg        |    4 +-
 .../doxygen/classtvm_1_1IntImm__coll__graph.svg    |    4 +-
 .../doxygen/classtvm_1_1Integer__coll__graph.svg   |    4 +-
 .../doxygen/classtvm_1_1LinkedParam-members.html   |  102 +
 .../api/doxygen/classtvm_1_1LinkedParam.html       |  256 +
 .../classtvm_1_1LinkedParamNode-members.html       |  115 +
 .../api/doxygen/classtvm_1_1LinkedParamNode.html   |  320 +
 .../classtvm_1_1LinkedParamNode__coll__graph.svg   |  183 +
 ...classtvm_1_1LinkedParamNode__inherit__graph.svg |   76 +
 .../classtvm_1_1LinkedParam__coll__graph.svg       |   92 +
 .../classtvm_1_1LinkedParam__inherit__graph.svg    |   62 +
 .../classtvm_1_1MemoryInfoNode__coll__graph.svg    |    4 +-
 .../classtvm_1_1MemoryInfo__coll__graph.svg        |    4 +-
 .../api/doxygen/classtvm_1_1OpNode-members.html    |    2 +-
 docs/reference/api/doxygen/classtvm_1_1OpNode.html |    6 +-
 .../doxygen/classtvm_1_1OpNode__coll__graph.svg    |    4 +-
 .../api/doxygen/classtvm_1_1Op__coll__graph.svg    |    4 +-
 .../classtvm_1_1PointerTypeNode__coll__graph.svg   |    4 +-
 .../classtvm_1_1PointerType__coll__graph.svg       |    4 +-
 .../api/doxygen/classtvm_1_1PoolInfo-members.html  |  101 +
 .../api/doxygen/classtvm_1_1PoolInfo.html          |  279 +
 .../doxygen/classtvm_1_1PoolInfo__coll__graph.svg  |   90 +
 .../classtvm_1_1PoolInfo__inherit__graph.svg       |   60 +
 .../classtvm_1_1PrimExprNode__coll__graph.svg      |    4 +-
 .../doxygen/classtvm_1_1PrimExpr__coll__graph.svg  |    4 +-
 .../classtvm_1_1PrimTypeNode__coll__graph.svg      |    4 +-
 .../doxygen/classtvm_1_1PrimType__coll__graph.svg  |    4 +-
 .../doxygen/classtvm_1_1RangeNode__coll__graph.svg |    4 +-
 .../api/doxygen/classtvm_1_1Range__coll__graph.svg |    4 +-
 .../doxygen/classtvm_1_1RelayExprNode-members.html |    2 +-
 .../api/doxygen/classtvm_1_1RelayExprNode.html     |   21 +-
 .../classtvm_1_1RelayExprNode__coll__graph.svg     |    4 +-
 .../doxygen/classtvm_1_1RelayExpr__coll__graph.svg |    4 +-
 .../classtvm_1_1RelayRefTypeNode__coll__graph.svg  |    4 +-
 .../classtvm_1_1RelayRefType__coll__graph.svg      |    4 +-
 .../api/doxygen/classtvm_1_1SEScope-members.html   |  113 -
 .../reference/api/doxygen/classtvm_1_1SEScope.html |  713 --
 .../doxygen/classtvm_1_1SEScopeCache-members.html  |   82 -
 .../api/doxygen/classtvm_1_1SEScopeCache.html      |  173 -
 .../classtvm_1_1SEScopeCache__coll__graph.svg      |   24 -
 .../doxygen/classtvm_1_1SEScopeNode-members.html   |  132 -
 .../api/doxygen/classtvm_1_1SEScopeNode.html       |  514 --
 .../classtvm_1_1SEScopeNode__coll__graph.svg       |  267 -
 .../classtvm_1_1SEScopeNode__inherit__graph.svg    |  133 -
 .../doxygen/classtvm_1_1SEScope__coll__graph.svg   |  102 -
 .../classtvm_1_1SEScope__inherit__graph.svg        |   72 -
 .../api/doxygen/classtvm_1_1SourceName.html        |    4 +-
 .../api/doxygen/classtvm_1_1SourceNameNode.html    |    4 +-
 .../classtvm_1_1SourceNameNode__coll__graph.svg    |    4 +-
 .../classtvm_1_1SourceName__coll__graph.svg        |    4 +-
 docs/reference/api/doxygen/classtvm_1_1Span.html   |    4 +-
 .../api/doxygen/classtvm_1_1SpanNode.html          |    4 +-
 .../doxygen/classtvm_1_1SpanNode__coll__graph.svg  |    4 +-
 .../api/doxygen/classtvm_1_1Span__coll__graph.svg  |    4 +-
 .../api/doxygen/classtvm_1_1TargetKindNode.html    |    2 +-
 .../classtvm_1_1TargetKindNode__coll__graph.svg    |  276 +-
 .../classtvm_1_1TargetKind__coll__graph.svg        |    4 +-
 .../classtvm_1_1TargetNode__coll__graph.svg        |    8 +-
 .../classtvm_1_1TargetTagNode__coll__graph.svg     |    4 +-
 .../doxygen/classtvm_1_1TargetTag__coll__graph.svg |    4 +-
 .../doxygen/classtvm_1_1Target__coll__graph.svg    |    4 +-
 ...asstvm_1_1TensorAffineTypeNode__coll__graph.svg |    4 +-
 .../classtvm_1_1TensorAffineType__coll__graph.svg  |    4 +-
 .../classtvm_1_1TensorTypeNode__coll__graph.svg    |    4 +-
 .../classtvm_1_1TensorType__coll__graph.svg        |    4 +-
 ...lasstvm_1_1TupleAffineTypeNode__coll__graph.svg |    4 +-
 .../classtvm_1_1TupleAffineType__coll__graph.svg   |    4 +-
 .../classtvm_1_1TupleTypeNode__coll__graph.svg     |    4 +-
 .../doxygen/classtvm_1_1TupleType__coll__graph.svg |    4 +-
 .../classtvm_1_1TypeCallNode__coll__graph.svg      |    4 +-
 .../doxygen/classtvm_1_1TypeCall__coll__graph.svg  |    4 +-
 ...classtvm_1_1TypeConstraintNode__coll__graph.svg |    4 +-
 .../classtvm_1_1TypeConstraint__coll__graph.svg    |    4 +-
 .../classtvm_1_1TypeDataNode__coll__graph.svg      |    4 +-
 .../doxygen/classtvm_1_1TypeData__coll__graph.svg  |    4 +-
 .../doxygen/classtvm_1_1TypeNode__coll__graph.svg  |    4 +-
 .../classtvm_1_1TypeRelationNode__coll__graph.svg  |    4 +-
 .../classtvm_1_1TypeRelation__coll__graph.svg      |    4 +-
 .../classtvm_1_1TypeReporter__coll__graph.svg      |    4 +-
 .../classtvm_1_1TypeVarNode__coll__graph.svg       |    4 +-
 .../doxygen/classtvm_1_1TypeVar__coll__graph.svg   |    4 +-
 .../api/doxygen/classtvm_1_1Type__coll__graph.svg  |    4 +-
 ...nvFunc_3_01R_07Args_8_8_8_08_4__coll__graph.svg |    4 +-
 .../doxygen/classtvm_1_1VirtualDevice-members.html |  113 +
 .../api/doxygen/classtvm_1_1VirtualDevice.html     |  712 ++
 .../classtvm_1_1VirtualDeviceCache-members.html    |   82 +
 .../doxygen/classtvm_1_1VirtualDeviceCache.html    |  173 +
 ...classtvm_1_1VirtualDeviceCache__coll__graph.svg |   24 +
 .../classtvm_1_1VirtualDeviceNode-members.html     |  132 +
 .../api/doxygen/classtvm_1_1VirtualDeviceNode.html |  516 ++
 .../classtvm_1_1VirtualDeviceNode__coll__graph.svg |  268 +
 ...asstvm_1_1VirtualDeviceNode__inherit__graph.svg |  134 +
 .../classtvm_1_1VirtualDevice__coll__graph.svg     |  102 +
 .../classtvm_1_1VirtualDevice__inherit__graph.svg  |   72 +
 .../classtvm_1_1WorkspaceMemoryPools-members.html  |  101 +
 .../doxygen/classtvm_1_1WorkspaceMemoryPools.html  |  221 +
 ...asstvm_1_1WorkspaceMemoryPools__coll__graph.svg |   90 +
 ...tvm_1_1WorkspaceMemoryPools__inherit__graph.svg |   60 +
 ...stvm_1_1arith_1_1ConstIntBound__coll__graph.svg |    4 +-
 ...1_1arith_1_1IntConstraintsNode__coll__graph.svg |    4 +-
 ...1_1IntConstraintsTransformNode__coll__graph.svg |    4 +-
 ...ith_1_1IntConstraintsTransform__coll__graph.svg |    4 +-
 ...tvm_1_1arith_1_1IntConstraints__coll__graph.svg |    4 +-
 ...1_1arith_1_1IntGroupBoundsNode__coll__graph.svg |    4 +-
 ...tvm_1_1arith_1_1IntGroupBounds__coll__graph.svg |    4 +-
 .../classtvm_1_1arith_1_1IntSet-members.html       |    2 +
 .../api/doxygen/classtvm_1_1arith_1_1IntSet.html   |   44 +-
 .../classtvm_1_1arith_1_1IntSet__coll__graph.svg   |  132 +-
 ...classtvm_1_1arith_1_1IntSet__inherit__graph.svg |   92 +-
 ...vm_1_1arith_1_1IterMapExprNode__coll__graph.svg |    4 +-
 ...asstvm_1_1arith_1_1IterMapExpr__coll__graph.svg |    4 +-
 ...sstvm_1_1arith_1_1IterMarkNode__coll__graph.svg |    4 +-
 .../classtvm_1_1arith_1_1IterMark__coll__graph.svg |    4 +-
 ..._1_1arith_1_1IterSplitExprNode__coll__graph.svg |    4 +-
 ...stvm_1_1arith_1_1IterSplitExpr__coll__graph.svg |    4 +-
 ...vm_1_1arith_1_1IterSumExprNode__coll__graph.svg |    4 +-
 ...asstvm_1_1arith_1_1IterSumExpr__coll__graph.svg |    4 +-
 ...lasstvm_1_1arith_1_1ModularSet__coll__graph.svg |    4 +-
 ...cheduler_1_1AccessAnalyzerNode__coll__graph.svg |    4 +-
 ...o__scheduler_1_1AccessAnalyzer__coll__graph.svg |    4 +-
 ...o__scheduler_1_1AnnotationStep__coll__graph.svg |    4 +-
 ..._1auto__scheduler_1_1AttachMap__coll__graph.svg |    4 +-
 ...__scheduler_1_1BuildResultNode__coll__graph.svg |    4 +-
 ...auto__scheduler_1_1BuildResult__coll__graph.svg |    4 +-
 ...scheduler_1_1CacheReadStepNode__coll__graph.svg |    4 +-
 ...to__scheduler_1_1CacheReadStep__coll__graph.svg |    4 +-
 ...cheduler_1_1CacheWriteStepNode__coll__graph.svg |    4 +-
 ...o__scheduler_1_1CacheWriteStep__coll__graph.svg |    4 +-
 ...to__scheduler_1_1ComputeAtStep__coll__graph.svg |    4 +-
 ...o__scheduler_1_1ComputeDAGNode__coll__graph.svg |    4 +-
 ...1auto__scheduler_1_1ComputeDAG__coll__graph.svg |    4 +-
 ...scheduler_1_1ComputeInlineStep__coll__graph.svg |    4 +-
 ...__scheduler_1_1ComputeRootStep__coll__graph.svg |    4 +-
 .../classtvm_1_1auto__scheduler_1_1CostModel.html  |    4 +-
 ...asstvm_1_1auto__scheduler_1_1CostModelNode.html |    4 +-
 ..._1auto__scheduler_1_1CostModel__coll__graph.svg |    4 +-
 ...er_1_1FollowFusedSplitStepNode__coll__graph.svg |    4 +-
 ...eduler_1_1FollowFusedSplitStep__coll__graph.svg |    4 +-
 ...__scheduler_1_1FollowSplitStep__coll__graph.svg |    4 +-
 ...uto__scheduler_1_1FuseStepNode__coll__graph.svg |    4 +-
 ...1_1auto__scheduler_1_1FuseStep__coll__graph.svg |    4 +-
 ...o__scheduler_1_1HardwareParams__coll__graph.svg |    4 +-
 ...uto__scheduler_1_1IteratorNode__coll__graph.svg |    4 +-
 ...1_1auto__scheduler_1_1Iterator__coll__graph.svg |    4 +-
 ..._scheduler_1_1LocalBuilderNode__coll__graph.svg |    4 +-
 ...uto__scheduler_1_1LocalBuilder__coll__graph.svg |    4 +-
 ..._1_1auto__scheduler_1_1LocalRunner-members.html |    2 +-
 ...classtvm_1_1auto__scheduler_1_1LocalRunner.html |   19 +-
 ...auto__scheduler_1_1LocalRunnerNode-members.html |   57 +-
 ...stvm_1_1auto__scheduler_1_1LocalRunnerNode.html |    7 +-
 ...__scheduler_1_1LocalRunnerNode__coll__graph.svg |  109 +-
 ...cheduler_1_1LocalRunnerNode__inherit__graph.svg |  105 +-
 ...auto__scheduler_1_1LocalRunner__coll__graph.svg |    4 +-
 ...__scheduler_1_1MeasureCallback__coll__graph.svg |    4 +-
 ..._scheduler_1_1MeasureInputNode__coll__graph.svg |    4 +-
 ...uto__scheduler_1_1MeasureInput__coll__graph.svg |    4 +-
 ...scheduler_1_1MeasureResultNode__coll__graph.svg |    4 +-
 ...to__scheduler_1_1MeasureResult__coll__graph.svg |    4 +-
 ...o__scheduler_1_1PragmaStepNode__coll__graph.svg |    4 +-
 ...1auto__scheduler_1_1PragmaStep__coll__graph.svg |    4 +-
 ...r_1_1PreloadMeasuredStatesNode__coll__graph.svg |    4 +-
 ...duler_1_1PreloadMeasuredStates__coll__graph.svg |    4 +-
 ...o__scheduler_1_1ProgramBuilder__coll__graph.svg |    4 +-
 ...heduler_1_1ProgramMeasurerNode__coll__graph.svg |    8 +-
 ...__scheduler_1_1ProgramMeasurer__coll__graph.svg |    4 +-
 ...to__scheduler_1_1ProgramRunnerNode-members.html |   55 +-
 ...vm_1_1auto__scheduler_1_1ProgramRunnerNode.html |   23 +-
 ...scheduler_1_1ProgramRunnerNode__coll__graph.svg |  105 +-
 ...eduler_1_1ProgramRunnerNode__inherit__graph.svg |  109 +-
 ...to__scheduler_1_1ProgramRunner__coll__graph.svg |    4 +-
 ...cheduler_1_1PythonBasedMeasureCallbackNode.html |    2 +-
 ...PythonBasedMeasureCallbackNode__coll__graph.svg |  223 +-
 ..._1_1PythonBasedMeasureCallback__coll__graph.svg |    4 +-
 ...tvm_1_1auto__scheduler_1_1PythonBasedModel.html |    4 +-
 ...1_1auto__scheduler_1_1PythonBasedModelNode.html |    6 +-
 ...eduler_1_1PythonBasedModelNode__coll__graph.svg |  237 +-
 ..._scheduler_1_1PythonBasedModel__coll__graph.svg |    4 +-
 ...vm_1_1auto__scheduler_1_1RPCRunner-members.html |    2 +-
 .../classtvm_1_1auto__scheduler_1_1RPCRunner.html  |   19 +-
 ..._1auto__scheduler_1_1RPCRunnerNode-members.html |   67 +-
 ...asstvm_1_1auto__scheduler_1_1RPCRunnerNode.html |    5 +-
 ...to__scheduler_1_1RPCRunnerNode__coll__graph.svg |   39 +-
 ..._scheduler_1_1RPCRunnerNode__inherit__graph.svg |  105 +-
 ..._1auto__scheduler_1_1RPCRunner__coll__graph.svg |    4 +-
 ...classtvm_1_1auto__scheduler_1_1RandomModel.html |    4 +-
 ...stvm_1_1auto__scheduler_1_1RandomModelNode.html |    4 +-
 ...auto__scheduler_1_1RandomModel__coll__graph.svg |    4 +-
 ..._scheduler_1_1RecordReaderNode__coll__graph.svg |    4 +-
 ...uto__scheduler_1_1RecordReader__coll__graph.svg |    4 +-
 ..._scheduler_1_1RecordToFileNode__coll__graph.svg |    4 +-
 ...uto__scheduler_1_1RecordToFile__coll__graph.svg |    4 +-
 ...__scheduler_1_1ReorderStepNode__coll__graph.svg |    4 +-
 ...auto__scheduler_1_1ReorderStep__coll__graph.svg |    4 +-
 ...auto__scheduler_1_1RfactorStep__coll__graph.svg |    4 +-
 ...o__scheduler_1_1SearchCallback__coll__graph.svg |    4 +-
 ..._scheduler_1_1SearchPolicyNode__coll__graph.svg |    4 +-
 ...uto__scheduler_1_1SearchPolicy__coll__graph.svg |    4 +-
 ...o__scheduler_1_1SearchTaskNode__coll__graph.svg |    4 +-
 ...1auto__scheduler_1_1SearchTask__coll__graph.svg |    4 +-
 ...to__scheduler_1_1SplitStepNode__coll__graph.svg |    8 +-
 ..._1auto__scheduler_1_1SplitStep__coll__graph.svg |    4 +-
 ..._1auto__scheduler_1_1StageNode__coll__graph.svg |    4 +-
 ...vm_1_1auto__scheduler_1_1Stage__coll__graph.svg |    4 +-
 ..._1auto__scheduler_1_1StateNode__coll__graph.svg |    8 +-
 ...vm_1_1auto__scheduler_1_1State__coll__graph.svg |    4 +-
 ...tvm_1_1auto__scheduler_1_1Step__coll__graph.svg |    4 +-
 ..._scheduler_1_1StorageAlignStep__coll__graph.svg |    4 +-
 ...scheduler_1_1TuningOptionsNode__coll__graph.svg |    8 +-
 ...to__scheduler_1_1TuningOptions__coll__graph.svg |    4 +-
 ...vm_1_1detail_1_1AttrDocVisitor__coll__graph.svg |    4 +-
 ...strument_1_1PassInstrumentNode__coll__graph.svg |    4 +-
 ..._1instrument_1_1PassInstrument__coll__graph.svg |    4 +-
 ...meta__schedule_1_1ApplyHistoryBest-members.html |    2 +-
 ...stvm_1_1meta__schedule_1_1ApplyHistoryBest.html |    6 +-
 ...__schedule_1_1ApplyHistoryBestNode-members.html |    2 +-
 ..._1_1meta__schedule_1_1ApplyHistoryBestNode.html |   19 +-
 ...hedule_1_1ApplyHistoryBestNode__coll__graph.svg |    4 +-
 ...__schedule_1_1ApplyHistoryBest__coll__graph.svg |    4 +-
 ...m_1_1meta__schedule_1_1ArgInfo__coll__graph.svg |    4 +-
 ..._1_1meta__schedule_1_1BuilderInput-members.html |    2 +-
 ...classtvm_1_1meta__schedule_1_1BuilderInput.html |   19 +-
 ...meta__schedule_1_1BuilderInputNode-members.html |   25 +-
 ...stvm_1_1meta__schedule_1_1BuilderInputNode.html |   23 +-
 ...__schedule_1_1BuilderInputNode__coll__graph.svg |  229 +-
 ...chedule_1_1BuilderInputNode__inherit__graph.svg |   93 +-
 ...meta__schedule_1_1BuilderInput__coll__graph.svg |    4 +-
 ..._schedule_1_1BuilderResultNode__coll__graph.svg |    8 +-
 ...eta__schedule_1_1BuilderResult__coll__graph.svg |    4 +-
 ...m_1_1meta__schedule_1_1Builder__coll__graph.svg |    4 +-
 ...tvm_1_1meta__schedule_1_1CostModel-members.html |  101 +
 .../classtvm_1_1meta__schedule_1_1CostModel.html   |  280 +
 ...1_1meta__schedule_1_1CostModelNode-members.html |  118 +
 ...lasstvm_1_1meta__schedule_1_1CostModelNode.html |  494 ++
 ...eta__schedule_1_1CostModelNode__coll__graph.svg |   86 +
 ...__schedule_1_1CostModelNode__inherit__graph.svg |  110 +
 ...1_1meta__schedule_1_1CostModel__coll__graph.svg |   91 +
 ...meta__schedule_1_1CostModel__inherit__graph.svg |   61 +
 ...stvm_1_1meta__schedule_1_1Database-members.html |    2 +-
 .../classtvm_1_1meta__schedule_1_1Database.html    |   17 +-
 ..._1_1meta__schedule_1_1DatabaseNode-members.html |   39 +-
 ...classtvm_1_1meta__schedule_1_1DatabaseNode.html |   44 +-
 ...meta__schedule_1_1DatabaseNode__coll__graph.svg |   99 +-
 ...a__schedule_1_1DatabaseNode__inherit__graph.svg |  139 +-
 ..._1_1meta__schedule_1_1Database__coll__graph.svg |    4 +-
 ...1_1meta__schedule_1_1ExtractedTask-members.html |    2 +-
 ...lasstvm_1_1meta__schedule_1_1ExtractedTask.html |   16 +-
 ...eta__schedule_1_1ExtractedTaskNode-members.html |   19 +-
 ...tvm_1_1meta__schedule_1_1ExtractedTaskNode.html |   23 +-
 ..._schedule_1_1ExtractedTaskNode__coll__graph.svg |  173 +-
 ...hedule_1_1ExtractedTaskNode__inherit__graph.svg |   93 +-
 ...eta__schedule_1_1ExtractedTask__coll__graph.svg |    4 +-
 ...meta__schedule_1_1FeatureExtractor-members.html |  102 +
 ...stvm_1_1meta__schedule_1_1FeatureExtractor.html |  315 +
 ...__schedule_1_1FeatureExtractorNode-members.html |  115 +
 ..._1_1meta__schedule_1_1FeatureExtractorNode.html |  359 +
 ...hedule_1_1FeatureExtractorNode__coll__graph.svg |   83 +
 ...ule_1_1FeatureExtractorNode__inherit__graph.svg |  101 +
 ...__schedule_1_1FeatureExtractor__coll__graph.svg |   92 +
 ...chedule_1_1FeatureExtractor__inherit__graph.svg |   62 +
 ...1meta__schedule_1_1MeasureCallback-members.html |  105 +
 ...sstvm_1_1meta__schedule_1_1MeasureCallback.html |  383 +
 ...a__schedule_1_1MeasureCallbackNode-members.html |  115 +
 ...m_1_1meta__schedule_1_1MeasureCallbackNode.html |  379 +
 ...chedule_1_1MeasureCallbackNode__coll__graph.svg |   83 +
 ...dule_1_1MeasureCallbackNode__inherit__graph.svg |  101 +
 ...a__schedule_1_1MeasureCallback__coll__graph.svg |   95 +
 ...schedule_1_1MeasureCallback__inherit__graph.svg |   65 +
 ...hedule_1_1MeasureCandidateNode__coll__graph.svg |    4 +-
 ...__schedule_1_1MeasureCandidate__coll__graph.svg |    4 +-
 ...a__schedule_1_1MetaScheduleContext-members.html |    2 +-
 ...m_1_1meta__schedule_1_1MetaScheduleContext.html |   17 +-
 ...chedule_1_1MetaScheduleContextNode-members.html |    2 +-
 ...1meta__schedule_1_1MetaScheduleContextNode.html |   19 +-
 ...chedule_1_1MetaScheduleContext__coll__graph.svg |    4 +-
 ...sstvm_1_1meta__schedule_1_1Mutator-members.html |  105 +
 .../classtvm_1_1meta__schedule_1_1Mutator.html     |  395 +
 ...m_1_1meta__schedule_1_1MutatorNode-members.html |  116 +
 .../classtvm_1_1meta__schedule_1_1MutatorNode.html |  399 +
 ...1meta__schedule_1_1MutatorNode__coll__graph.svg |   84 +
 ...ta__schedule_1_1MutatorNode__inherit__graph.svg |  105 +
 ...m_1_1meta__schedule_1_1Mutator__coll__graph.svg |   95 +
 ..._1meta__schedule_1_1Mutator__inherit__graph.svg |   65 +
 ...stvm_1_1meta__schedule_1_1Postproc-members.html |  108 +
 .../classtvm_1_1meta__schedule_1_1Postproc.html    |  483 +
 ..._1_1meta__schedule_1_1PostprocNode-members.html |  116 +
 ...classtvm_1_1meta__schedule_1_1PostprocNode.html |  388 +
 ...meta__schedule_1_1PostprocNode__coll__graph.svg |   84 +
 ...a__schedule_1_1PostprocNode__inherit__graph.svg |  105 +
 ..._1_1meta__schedule_1_1Postproc__coll__graph.svg |   99 +
 ...1meta__schedule_1_1Postproc__inherit__graph.svg |   69 +
 ...1meta__schedule_1_1PyCostModelNode-members.html |  129 +
 ...sstvm_1_1meta__schedule_1_1PyCostModelNode.html |  703 ++
 ...a__schedule_1_1PyCostModelNode__coll__graph.svg |  200 +
 ...schedule_1_1PyCostModelNode__inherit__graph.svg |  110 +
 ..._1meta__schedule_1_1PyDatabaseNode-members.html |   55 +-
 ...asstvm_1_1meta__schedule_1_1PyDatabaseNode.html |   89 +-
 ...ta__schedule_1_1PyDatabaseNode__coll__graph.svg |  251 +-
 ..._schedule_1_1PyDatabaseNode__inherit__graph.svg |  141 +-
 ...schedule_1_1PyFeatureExtractorNode-members.html |  120 +
 ..._1meta__schedule_1_1PyFeatureExtractorNode.html |  433 +
 ...dule_1_1PyFeatureExtractorNode__coll__graph.svg |  150 +
 ...e_1_1PyFeatureExtractorNode__inherit__graph.svg |  101 +
 ..._schedule_1_1PyMeasureCallbackNode-members.html |  120 +
 ...1_1meta__schedule_1_1PyMeasureCallbackNode.html |  456 +
 ...edule_1_1PyMeasureCallbackNode__coll__graph.svg |  152 +
 ...le_1_1PyMeasureCallbackNode__inherit__graph.svg |  101 +
 ...1_1meta__schedule_1_1PyMutatorNode-members.html |  123 +
 ...lasstvm_1_1meta__schedule_1_1PyMutatorNode.html |  516 ++
 ...eta__schedule_1_1PyMutatorNode__coll__graph.svg |  174 +
 ...__schedule_1_1PyMutatorNode__inherit__graph.svg |  105 +
 ..._1meta__schedule_1_1PyPostprocNode-members.html |  123 +
 ...asstvm_1_1meta__schedule_1_1PyPostprocNode.html |  505 ++
 ...ta__schedule_1_1PyPostprocNode__coll__graph.svg |  171 +
 ..._schedule_1_1PyPostprocNode__inherit__graph.svg |  105 +
 ...ta__schedule_1_1PyScheduleRuleNode-members.html |  123 +
 ...vm_1_1meta__schedule_1_1PyScheduleRuleNode.html |  517 ++
 ...schedule_1_1PyScheduleRuleNode__coll__graph.svg |  173 +
 ...edule_1_1PyScheduleRuleNode__inherit__graph.svg |  105 +
 ...__schedule_1_1PySearchStrategyNode-members.html |    4 +-
 ..._1_1meta__schedule_1_1PySearchStrategyNode.html |   58 +-
 ...hedule_1_1PySearchStrategyNode__coll__graph.svg |   31 +-
 ...__schedule_1_1PySpaceGeneratorNode-members.html |    2 +-
 ..._1_1meta__schedule_1_1PySpaceGeneratorNode.html |   18 +-
 ...a__schedule_1_1PyTaskSchedulerNode-members.html |   50 +-
 ...m_1_1meta__schedule_1_1PyTaskSchedulerNode.html |   12 +-
 ...chedule_1_1PyTaskSchedulerNode__coll__graph.svg |  446 +-
 ...dule_1_1PyTaskSchedulerNode__inherit__graph.svg |  104 +-
 ...meta__schedule_1_1RunnerFuture__coll__graph.svg |    4 +-
 ...a__schedule_1_1RunnerInputNode__coll__graph.svg |    4 +-
 ...1meta__schedule_1_1RunnerInput__coll__graph.svg |    4 +-
 ...__schedule_1_1RunnerResultNode__coll__graph.svg |   12 +-
 ...meta__schedule_1_1RunnerResult__coll__graph.svg |    4 +-
 ...vm_1_1meta__schedule_1_1Runner__coll__graph.svg |    4 +-
 ..._1_1meta__schedule_1_1ScheduleRule-members.html |  107 +
 ...classtvm_1_1meta__schedule_1_1ScheduleRule.html |  616 ++
 ...meta__schedule_1_1ScheduleRuleNode-members.html |  116 +
 ...stvm_1_1meta__schedule_1_1ScheduleRuleNode.html |  399 +
 ...__schedule_1_1ScheduleRuleNode__coll__graph.svg |   84 +
 ...chedule_1_1ScheduleRuleNode__inherit__graph.svg |  105 +
 ...meta__schedule_1_1ScheduleRule__coll__graph.svg |   97 +
 ...a__schedule_1_1ScheduleRule__inherit__graph.svg |   67 +
 ..._1meta__schedule_1_1SearchStrategy-members.html |   24 +-
 ...asstvm_1_1meta__schedule_1_1SearchStrategy.html |  153 +-
 ...ta__schedule_1_1SearchStrategyNode-members.html |    4 +-
 ...vm_1_1meta__schedule_1_1SearchStrategyNode.html |   46 +-
 ...ta__schedule_1_1SearchStrategy__coll__graph.svg |  110 +-
 ..._schedule_1_1SearchStrategy__inherit__graph.svg |   78 +-
 ..._1meta__schedule_1_1SpaceGenerator-members.html |   15 +-
 ...asstvm_1_1meta__schedule_1_1SpaceGenerator.html |   53 +-
 ...ta__schedule_1_1SpaceGeneratorNode-members.html |    2 +-
 ...vm_1_1meta__schedule_1_1SpaceGeneratorNode.html |   16 +-
 ...ta__schedule_1_1SpaceGenerator__coll__graph.svg |  107 +-
 ..._schedule_1_1SpaceGenerator__inherit__graph.svg |   77 +-
 ..._1meta__schedule_1_1TaskExtraction-members.html |    2 +-
 ...asstvm_1_1meta__schedule_1_1TaskExtraction.html |    6 +-
 ...ta__schedule_1_1TaskExtractionNode-members.html |    2 +-
 ...vm_1_1meta__schedule_1_1TaskExtractionNode.html |   19 +-
 ...schedule_1_1TaskExtractionNode__coll__graph.svg |    4 +-
 ...ta__schedule_1_1TaskExtraction__coll__graph.svg |    4 +-
 ...1_1meta__schedule_1_1TaskScheduler-members.html |    4 +-
 ...lasstvm_1_1meta__schedule_1_1TaskScheduler.html |   68 +-
 ...eta__schedule_1_1TaskSchedulerNode-members.html |   26 +-
 ...tvm_1_1meta__schedule_1_1TaskSchedulerNode.html |   46 +-
 ..._schedule_1_1TaskSchedulerNode__coll__graph.svg |  284 +-
 ...hedule_1_1TaskSchedulerNode__inherit__graph.svg |  104 +-
 ...eta__schedule_1_1TaskScheduler__coll__graph.svg |    4 +-
 ...ta__schedule_1_1TensorInfoNode__coll__graph.svg |    4 +-
 ..._1meta__schedule_1_1TensorInfo__coll__graph.svg |    4 +-
 ...m_1_1meta__schedule_1_1TuneContext-members.html |    2 +-
 .../classtvm_1_1meta__schedule_1_1TuneContext.html |   31 +-
 ...1meta__schedule_1_1TuneContextNode-members.html |   40 +-
 ...sstvm_1_1meta__schedule_1_1TuneContextNode.html |  127 +-
 ...a__schedule_1_1TuneContextNode__coll__graph.svg |  919 +-
 ...schedule_1_1TuneContextNode__inherit__graph.svg |  124 +-
 ...1meta__schedule_1_1TuneContext__coll__graph.svg |    4 +-
 ...__schedule_1_1TuningRecordNode__coll__graph.svg |    4 +-
 ...meta__schedule_1_1TuningRecord__coll__graph.svg |    4 +-
 ...meta__schedule_1_1WorkloadNode__coll__graph.svg |    4 +-
 ..._1_1meta__schedule_1_1Workload__coll__graph.svg |    4 +-
 ...tvm_1_1parser_1_1SourceMapNode__coll__graph.svg |    4 +-
 ...lasstvm_1_1parser_1_1SourceMap__coll__graph.svg |    4 +-
 ...asstvm_1_1parser_1_1SourceNode__coll__graph.svg |    4 +-
 .../classtvm_1_1parser_1_1Source__coll__graph.svg  |    4 +-
 ...tvm_1_1relay_1_1AltPatternNode__coll__graph.svg |    4 +-
 ...lasstvm_1_1relay_1_1AltPattern__coll__graph.svg |    4 +-
 ...vm_1_1relay_1_1AttrPatternNode__coll__graph.svg |    4 +-
 ...asstvm_1_1relay_1_1AttrPattern__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1CallNode-members.html     |    2 +-
 .../api/doxygen/classtvm_1_1relay_1_1CallNode.html |    6 +-
 .../classtvm_1_1relay_1_1CallNode__coll__graph.svg |    4 +-
 ...vm_1_1relay_1_1CallPatternNode__coll__graph.svg |    4 +-
 ...asstvm_1_1relay_1_1CallPattern__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1Call__coll__graph.svg     |    4 +-
 ...lasstvm_1_1relay_1_1ClauseNode__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1Clause__coll__graph.svg   |    4 +-
 .../classtvm_1_1relay_1_1ConstantNode-members.html |    2 +-
 .../doxygen/classtvm_1_1relay_1_1ConstantNode.html |    6 +-
 ...sstvm_1_1relay_1_1ConstantNode__coll__graph.svg |    4 +-
 ...vm_1_1relay_1_1ConstantPattern__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1Constant__coll__graph.svg |    4 +-
 ...m_1_1relay_1_1ConstructorValue__coll__graph.svg |    4 +-
 ...classtvm_1_1relay_1_1DFPatternCallbackNode.html |    2 +-
 ...relay_1_1DFPatternCallbackNode__coll__graph.svg |  220 +-
 ..._1_1relay_1_1DFPatternCallback__coll__graph.svg |    4 +-
 ...classtvm_1_1relay_1_1DFPattern__coll__graph.svg |    4 +-
 ..._1relay_1_1DataTypePatternNode__coll__graph.svg |    4 +-
 ...vm_1_1relay_1_1DataTypePattern__coll__graph.svg |    4 +-
 ...1relay_1_1DominatorPatternNode__coll__graph.svg |    4 +-
 ...m_1_1relay_1_1DominatorPattern__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1Executor-members.html     |   33 +-
 .../api/doxygen/classtvm_1_1relay_1_1Executor.html |   46 +-
 .../classtvm_1_1relay_1_1ExecutorNode-members.html |    4 +-
 .../doxygen/classtvm_1_1relay_1_1ExecutorNode.html |   52 +-
 ...sstvm_1_1relay_1_1ExecutorNode__coll__graph.svg |  282 +-
 ...vm_1_1relay_1_1ExecutorNode__inherit__graph.svg |  102 +-
 .../classtvm_1_1relay_1_1Executor__coll__graph.svg |  111 +-
 ...asstvm_1_1relay_1_1Executor__inherit__graph.svg |   71 +-
 ...vm_1_1relay_1_1ExprPatternNode__coll__graph.svg |    4 +-
 ...asstvm_1_1relay_1_1ExprPattern__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1FunctionNode-members.html |    2 +-
 .../doxygen/classtvm_1_1relay_1_1FunctionNode.html |    6 +-
 ...sstvm_1_1relay_1_1FunctionNode__coll__graph.svg |    4 +-
 ..._1relay_1_1FunctionPatternNode__coll__graph.svg |    4 +-
 ...vm_1_1relay_1_1FunctionPattern__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1Function__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1IdNode__coll__graph.svg   |    4 +-
 .../classtvm_1_1relay_1_1Id__coll__graph.svg       |    4 +-
 .../classtvm_1_1relay_1_1IfNode-members.html       |    2 +-
 .../api/doxygen/classtvm_1_1relay_1_1IfNode.html   |    6 +-
 .../classtvm_1_1relay_1_1IfNode__coll__graph.svg   |    4 +-
 ...stvm_1_1relay_1_1IfPatternNode__coll__graph.svg |    4 +-
 ...classtvm_1_1relay_1_1IfPattern__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1If__coll__graph.svg       |    4 +-
 ...relay_1_1InterpreterClosureObj__coll__graph.svg |    4 +-
 ...1_1relay_1_1InterpreterClosure__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1LetNode-members.html      |    2 +-
 .../api/doxygen/classtvm_1_1relay_1_1LetNode.html  |    6 +-
 .../classtvm_1_1relay_1_1LetNode__coll__graph.svg  |    4 +-
 ...tvm_1_1relay_1_1LetPatternNode__coll__graph.svg |    4 +-
 ...lasstvm_1_1relay_1_1LetPattern__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1Let__coll__graph.svg      |    4 +-
 .../classtvm_1_1relay_1_1MatchNode-members.html    |    2 +-
 .../doxygen/classtvm_1_1relay_1_1MatchNode.html    |    6 +-
 ...classtvm_1_1relay_1_1MatchNode__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1Match__coll__graph.svg    |    4 +-
 ...1relay_1_1OpImplementationNode__coll__graph.svg |    4 +-
 ...m_1_1relay_1_1OpImplementation__coll__graph.svg |    4 +-
 ...1relay_1_1OpSpecializationNode__coll__graph.svg |    4 +-
 ...m_1_1relay_1_1OpSpecialization__coll__graph.svg |    4 +-
 ...tvm_1_1relay_1_1OpStrategyNode__coll__graph.svg |    4 +-
 ...lasstvm_1_1relay_1_1OpStrategy__coll__graph.svg |    4 +-
 ...elay_1_1PatternConstructorNode__coll__graph.svg |    4 +-
 ...1_1relay_1_1PatternConstructor__coll__graph.svg |    4 +-
 ...asstvm_1_1relay_1_1PatternNode__coll__graph.svg |    4 +-
 ...m_1_1relay_1_1PatternTupleNode__coll__graph.svg |    4 +-
 ...sstvm_1_1relay_1_1PatternTuple__coll__graph.svg |    4 +-
 ...tvm_1_1relay_1_1PatternVarNode__coll__graph.svg |    4 +-
 ...lasstvm_1_1relay_1_1PatternVar__coll__graph.svg |    4 +-
 ..._1relay_1_1PatternWildcardNode__coll__graph.svg |    4 +-
 ...vm_1_1relay_1_1PatternWildcard__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1Pattern__coll__graph.svg  |    4 +-
 ...stvm_1_1relay_1_1RecClosureObj__coll__graph.svg |    4 +-
 ...lasstvm_1_1relay_1_1RecClosure__coll__graph.svg |    4 +-
 ...classtvm_1_1relay_1_1RefCreateNode-members.html |    2 +-
 .../classtvm_1_1relay_1_1RefCreateNode.html        |    6 +-
 ...stvm_1_1relay_1_1RefCreateNode__coll__graph.svg |    4 +-
 ...classtvm_1_1relay_1_1RefCreate__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1RefReadNode-members.html  |    2 +-
 .../doxygen/classtvm_1_1relay_1_1RefReadNode.html  |    6 +-
 ...asstvm_1_1relay_1_1RefReadNode__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1RefRead__coll__graph.svg  |    4 +-
 .../classtvm_1_1relay_1_1RefValue__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1RefWriteNode-members.html |    2 +-
 .../doxygen/classtvm_1_1relay_1_1RefWriteNode.html |    6 +-
 ...sstvm_1_1relay_1_1RefWriteNode__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1RefWrite__coll__graph.svg |    4 +-
 ...classtvm_1_1relay_1_1RelayNode__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1RuntimeNode-members.html  |    4 +-
 .../doxygen/classtvm_1_1relay_1_1RuntimeNode.html  |   52 +-
 ...asstvm_1_1relay_1_1RuntimeNode__coll__graph.svg |  282 +-
 ...tvm_1_1relay_1_1RuntimeNode__inherit__graph.svg |  102 +-
 .../classtvm_1_1relay_1_1Runtime__coll__graph.svg  |    4 +-
 ...m_1_1relay_1_1ShapePatternNode__coll__graph.svg |    4 +-
 ...sstvm_1_1relay_1_1ShapePattern__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1TempExprNode-members.html |    2 +-
 .../doxygen/classtvm_1_1relay_1_1TempExprNode.html |    6 +-
 ...sstvm_1_1relay_1_1TempExprNode__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1TempExpr__coll__graph.svg |    4 +-
 ...sstvm_1_1relay_1_1TupleGetItemNode-members.html |    2 +-
 .../classtvm_1_1relay_1_1TupleGetItemNode.html     |    6 +-
 ...m_1_1relay_1_1TupleGetItemNode__coll__graph.svg |    4 +-
 ...lay_1_1TupleGetItemPatternNode__coll__graph.svg |    4 +-
 ..._1relay_1_1TupleGetItemPattern__coll__graph.svg |    4 +-
 ...sstvm_1_1relay_1_1TupleGetItem__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1TupleNode-members.html    |    2 +-
 .../doxygen/classtvm_1_1relay_1_1TupleNode.html    |    6 +-
 ...classtvm_1_1relay_1_1TupleNode__coll__graph.svg |    4 +-
 ...m_1_1relay_1_1TuplePatternNode__coll__graph.svg |    4 +-
 ...sstvm_1_1relay_1_1TuplePattern__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1Tuple__coll__graph.svg    |    4 +-
 ...vm_1_1relay_1_1TypePatternNode__coll__graph.svg |    4 +-
 ...asstvm_1_1relay_1_1TypePattern__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1VarNode-members.html      |    2 +-
 .../api/doxygen/classtvm_1_1relay_1_1VarNode.html  |    6 +-
 .../classtvm_1_1relay_1_1VarNode__coll__graph.svg  |    4 +-
 ...tvm_1_1relay_1_1VarPatternNode__coll__graph.svg |    4 +-
 ...lasstvm_1_1relay_1_1VarPattern__coll__graph.svg |    4 +-
 .../classtvm_1_1relay_1_1Var__coll__graph.svg      |    4 +-
 ...vm_1_1relay_1_1WildcardPattern__coll__graph.svg |    4 +-
 .../classtvm_1_1runtime_1_1ADT__coll__graph.svg    |    4 +-
 .../classtvm_1_1runtime_1_1Array__coll__graph.svg  |    4 +-
 ...classtvm_1_1runtime_1_1Closure__coll__graph.svg |    4 +-
 .../classtvm_1_1runtime_1_1Map__coll__graph.svg    |    4 +-
 .../classtvm_1_1runtime_1_1ModuleNode-members.html |   67 +-
 .../doxygen/classtvm_1_1runtime_1_1ModuleNode.html |   35 +-
 ...sstvm_1_1runtime_1_1ModuleNode__coll__graph.svg |  111 +-
 ...vm_1_1runtime_1_1ModuleNode__inherit__graph.svg |  119 +-
 .../classtvm_1_1runtime_1_1Module__coll__graph.svg |    4 +-
 ...me_1_1NDArray_1_1ContainerBase__coll__graph.svg |    4 +-
 ...untime_1_1NDArray_1_1Container__coll__graph.svg |    4 +-
 ...classtvm_1_1runtime_1_1NDArray__coll__graph.svg |    4 +-
 .../api/doxygen/classtvm_1_1runtime_1_1Object.html |    2 +-
 .../classtvm_1_1runtime_1_1ObjectPtr-members.html  |   37 +-
 .../doxygen/classtvm_1_1runtime_1_1ObjectPtr.html  |   33 +
 ...asstvm_1_1runtime_1_1ObjectPtr__coll__graph.svg |    2 +-
 .../doxygen/classtvm_1_1runtime_1_1ObjectRef.html  |    2 +-
 ...asstvm_1_1runtime_1_1ObjectRef__coll__graph.svg |   16 +-
 .../classtvm_1_1runtime_1_1Object__coll__graph.svg |    8 +-
 .../classtvm_1_1runtime_1_1Optional-members.html   |    2 +-
 .../doxygen/classtvm_1_1runtime_1_1Optional.html   |   31 +
 ...lasstvm_1_1runtime_1_1Optional__coll__graph.svg |    6 +-
 ...stvm_1_1runtime_1_1Optional__inherit__graph.svg |    2 +-
 .../classtvm_1_1runtime_1_1PackedFunc-members.html |   33 +-
 .../doxygen/classtvm_1_1runtime_1_1PackedFunc.html |  246 +-
 ...asstvm_1_1runtime_1_1PackedFuncObj-members.html |  117 +
 .../classtvm_1_1runtime_1_1PackedFuncObj.html      |  456 +
 ...vm_1_1runtime_1_1PackedFuncObj__coll__graph.svg |   84 +
 ...1_1runtime_1_1PackedFuncObj__inherit__graph.svg |   98 +
 ...tvm_1_1runtime_1_1PackedFuncSubObj-members.html |  120 +
 .../classtvm_1_1runtime_1_1PackedFuncSubObj.html   |  318 +
 ...1_1runtime_1_1PackedFuncSubObj__coll__graph.svg |  104 +
 ...runtime_1_1PackedFuncSubObj__inherit__graph.svg |   98 +
 ...sstvm_1_1runtime_1_1PackedFunc__coll__graph.svg |   99 +-
 ...vm_1_1runtime_1_1PackedFunc__inherit__graph.svg |   65 +
 .../classtvm_1_1runtime_1_1Registry-members.html   |    2 +-
 .../doxygen/classtvm_1_1runtime_1_1Registry.html   |   17 +-
 ...lasstvm_1_1runtime_1_1Registry__coll__graph.svg |  133 +-
 ...sstvm_1_1runtime_1_1ShapeTuple__coll__graph.svg |    4 +-
 .../classtvm_1_1runtime_1_1String__coll__graph.svg |    4 +-
 ...classtvm_1_1runtime_1_1TVMArgValue-members.html |    2 +-
 .../classtvm_1_1runtime_1_1TVMArgValue.html        |   29 +-
 ...stvm_1_1runtime_1_1TVMArgValue__coll__graph.svg |   36 +-
 ...m_1_1runtime_1_1TVMArgValue__inherit__graph.svg |   32 +-
 ...asstvm_1_1runtime_1_1TVMArgsSetter-members.html |   13 +-
 .../classtvm_1_1runtime_1_1TVMArgsSetter.html      |   72 +-
 ...vm_1_1runtime_1_1TVMArgsSetter__coll__graph.svg |    2 +-
 ...1_1TVMMovableArgValueWithContext__-members.html |    2 +-
 ...runtime_1_1TVMMovableArgValueWithContext__.html |   21 +-
 ...1_1runtime_1_1TVMMovableArgValue__-members.html |    2 +-
 ...lasstvm_1_1runtime_1_1TVMMovableArgValue__.html |   29 +-
 ...untime_1_1TVMMovableArgValue____coll__graph.svg |   38 +-
 ...ime_1_1TVMMovableArgValue____inherit__graph.svg |   34 +-
 ...asstvm_1_1runtime_1_1TVMPODValue__-members.html |   23 +-
 .../classtvm_1_1runtime_1_1TVMPODValue__.html      |   31 +-
 ...vm_1_1runtime_1_1TVMPODValue____coll__graph.svg |   65 +-
 ...1_1runtime_1_1TVMPODValue____inherit__graph.svg |  113 +-
 ...classtvm_1_1runtime_1_1TVMRetValue-members.html |    2 +-
 .../classtvm_1_1runtime_1_1TVMRetValue.html        |   33 +-
 ...stvm_1_1runtime_1_1TVMRetValue__coll__graph.svg |   77 +-
 ...m_1_1runtime_1_1TVMRetValue__inherit__graph.svg |   51 +-
 .../classtvm_1_1runtime_1_1Timer__coll__graph.svg  |    4 +-
 ...ntime_1_1metadata_1_1ArrayAccessor-members.html |   88 +
 ...vm_1_1runtime_1_1metadata_1_1ArrayAccessor.html |  324 +
 ...1_1_1tvm_1_1runtime_1_1String_01_4-members.html |   88 +
 ...1_5_00_01_1_1tvm_1_1runtime_1_1String_01_4.html |  305 +
 ...1tvm_1_1runtime_1_1String_01_4__coll__graph.svg |   30 +
 ...e_1_1metadata_1_1ArrayAccessor__coll__graph.svg |   28 +
 ...ntime_1_1metadata_1_1ArrayIterator-members.html |   85 +
 ...vm_1_1runtime_1_1metadata_1_1ArrayIterator.html |  263 +
 ...e_1_1metadata_1_1ArrayIterator__coll__graph.svg |   28 +
 ...ntime_1_1metadata_1_1MetadataArray-members.html |  102 +
 ...vm_1_1runtime_1_1metadata_1_1MetadataArray.html |  245 +
 ...e_1_1metadata_1_1MetadataArrayNode-members.html |  117 +
 ..._1runtime_1_1metadata_1_1MetadataArrayNode.html |  353 +
 ...1metadata_1_1MetadataArrayNode__coll__graph.svg |  199 +
 ...tadata_1_1MetadataArrayNode__inherit__graph.svg |   98 +
 ...e_1_1metadata_1_1MetadataArray__coll__graph.svg |  112 +
 ..._1metadata_1_1MetadataArray__inherit__graph.svg |   82 +
 ...untime_1_1metadata_1_1MetadataBase-members.html |  100 +
 ...tvm_1_1runtime_1_1metadata_1_1MetadataBase.html |  205 +
 ...me_1_1metadata_1_1MetadataBaseNode-members.html |  112 +
 ...1_1runtime_1_1metadata_1_1MetadataBaseNode.html |  250 +
 ..._1metadata_1_1MetadataBaseNode__coll__graph.svg |   80 +
 ...etadata_1_1MetadataBaseNode__inherit__graph.svg |   98 +
 ...me_1_1metadata_1_1MetadataBase__coll__graph.svg |   90 +
 ...1_1metadata_1_1MetadataBase__inherit__graph.svg |   82 +
 ..._1_1profiling_1_1DeviceWrapper__coll__graph.svg |    4 +-
 ..._1profiling_1_1MetricCollector__coll__graph.svg |    4 +-
 ...ime_1_1profiling_1_1ReportNode__coll__graph.svg |    4 +-
 ...runtime_1_1profiling_1_1Report__coll__graph.svg |    4 +-
 ...tvm_1_1runtime_1_1vm_1_1Executable-members.html |   26 +-
 .../classtvm_1_1runtime_1_1vm_1_1Executable.html   |   37 +-
 ...1_1runtime_1_1vm_1_1Executable__coll__graph.svg |  117 +-
 ...runtime_1_1vm_1_1Executable__inherit__graph.svg |  113 +-
 ...vm_1_1runtime_1_1vm_1_1Storage__coll__graph.svg |    4 +-
 ..._1_1runtime_1_1vm_1_1VMClosure__coll__graph.svg |    4 +-
 ...1_1runtime_1_1vm_1_1VirtualMachine-members.html |   84 +-
 ...lasstvm_1_1runtime_1_1vm_1_1VirtualMachine.html |   86 +-
 ...untime_1_1vm_1_1VirtualMachine__coll__graph.svg |  422 +-
 ...ime_1_1vm_1_1VirtualMachine__inherit__graph.svg |  113 +-
 ...upport_1_1LinearCongruentialEngine-members.html |   23 +-
 ...tvm_1_1support_1_1LinearCongruentialEngine.html |   33 +-
 ...rt_1_1LinearCongruentialEngine__coll__graph.svg |   37 +-
 .../classtvm_1_1support_1_1Span-members.html       |   92 +
 .../api/doxygen/classtvm_1_1support_1_1Span.html   |  443 +
 ...1support_1_1Span_1_1iterator__base-members.html |   86 +
 ...sstvm_1_1support_1_1Span_1_1iterator__base.html |  305 +
 ...port_1_1Span_1_1iterator__base__coll__graph.svg |   47 +
 ...t_1_1Span_1_1iterator__base__inherit__graph.svg |   47 +
 .../classtvm_1_1support_1_1Span__coll__graph.svg   |   30 +
 ...lasstvm_1_1te_1_1BaseComputeOpNode-members.html |   35 +-
 .../classtvm_1_1te_1_1BaseComputeOpNode.html       |    7 +-
 ...tvm_1_1te_1_1BaseComputeOpNode__coll__graph.svg |  257 +-
 ..._1_1te_1_1BaseComputeOpNode__inherit__graph.svg |   97 +-
 .../classtvm_1_1te_1_1ComputeOpNode-members.html   |   39 +-
 .../doxygen/classtvm_1_1te_1_1ComputeOpNode.html   |    7 +-
 ...lasstvm_1_1te_1_1ComputeOpNode__coll__graph.svg |  341 +-
 ...stvm_1_1te_1_1ComputeOpNode__inherit__graph.svg |   97 +-
 .../classtvm_1_1te_1_1ComputeOp__coll__graph.svg   |    4 +-
 .../classtvm_1_1te_1_1ExternOpNode-members.html    |   35 +-
 .../doxygen/classtvm_1_1te_1_1ExternOpNode.html    |    7 +-
 ...classtvm_1_1te_1_1ExternOpNode__coll__graph.svg |  427 +-
 ...sstvm_1_1te_1_1ExternOpNode__inherit__graph.svg |   97 +-
 .../classtvm_1_1te_1_1ExternOp__coll__graph.svg    |    4 +-
 .../classtvm_1_1te_1_1FuseNode__coll__graph.svg    |    4 +-
 .../classtvm_1_1te_1_1Fuse__coll__graph.svg        |    4 +-
 .../classtvm_1_1te_1_1HybridOpNode-members.html    |   25 +-
 .../doxygen/classtvm_1_1te_1_1HybridOpNode.html    |   19 +-
 ...classtvm_1_1te_1_1HybridOpNode__coll__graph.svg |  427 +-
 ...sstvm_1_1te_1_1HybridOpNode__inherit__graph.svg |   99 +-
 .../classtvm_1_1te_1_1HybridOp__coll__graph.svg    |    4 +-
 ...sstvm_1_1te_1_1IterVarAttrNode__coll__graph.svg |    4 +-
 .../classtvm_1_1te_1_1IterVarAttr__coll__graph.svg |    4 +-
 ...sstvm_1_1te_1_1IterVarRelation__coll__graph.svg |    4 +-
 .../classtvm_1_1te_1_1OperationNode-members.html   |   31 +-
 .../doxygen/classtvm_1_1te_1_1OperationNode.html   |   23 +-
 ...lasstvm_1_1te_1_1OperationNode__coll__graph.svg |  179 +-
 ...stvm_1_1te_1_1OperationNode__inherit__graph.svg |  115 +-
 .../classtvm_1_1te_1_1Operation__coll__graph.svg   |    4 +-
 ...lasstvm_1_1te_1_1PlaceholderOpNode-members.html |   37 +-
 .../classtvm_1_1te_1_1PlaceholderOpNode.html       |    7 +-
 ...tvm_1_1te_1_1PlaceholderOpNode__coll__graph.svg |  335 +-
 ..._1_1te_1_1PlaceholderOpNode__inherit__graph.svg |   97 +-
 ...lasstvm_1_1te_1_1PlaceholderOp__coll__graph.svg |    4 +-
 .../classtvm_1_1te_1_1RebaseNode__coll__graph.svg  |    4 +-
 .../classtvm_1_1te_1_1Rebase__coll__graph.svg      |    4 +-
 .../classtvm_1_1te_1_1ScanOpNode-members.html      |   45 +-
 .../api/doxygen/classtvm_1_1te_1_1ScanOpNode.html  |    7 +-
 .../classtvm_1_1te_1_1ScanOpNode__coll__graph.svg  |  439 +-
 ...lasstvm_1_1te_1_1ScanOpNode__inherit__graph.svg |   97 +-
 .../classtvm_1_1te_1_1ScanOp__coll__graph.svg      |    4 +-
 ...classtvm_1_1te_1_1ScheduleNode__coll__graph.svg |    4 +-
 .../classtvm_1_1te_1_1Schedule__coll__graph.svg    |    4 +-
 ...lasstvm_1_1te_1_1SingletonNode__coll__graph.svg |    4 +-
 .../classtvm_1_1te_1_1Singleton__coll__graph.svg   |    4 +-
 ...te_1_1SpecializedConditionNode__coll__graph.svg |    4 +-
 ..._1_1te_1_1SpecializedCondition__coll__graph.svg |    4 +-
 .../classtvm_1_1te_1_1SplitNode__coll__graph.svg   |    4 +-
 .../classtvm_1_1te_1_1Split__coll__graph.svg       |    4 +-
 .../classtvm_1_1te_1_1StageNode__coll__graph.svg   |    4 +-
 .../classtvm_1_1te_1_1Stage__coll__graph.svg       |    4 +-
 .../doxygen/classtvm_1_1te_1_1Tensor-members.html  |   41 +-
 .../api/doxygen/classtvm_1_1te_1_1Tensor.html      |  105 +-
 ...sstvm_1_1te_1_1TensorComputeOpNode-members.html |   45 +-
 .../classtvm_1_1te_1_1TensorComputeOpNode.html     |    7 +-
 ...m_1_1te_1_1TensorComputeOpNode__coll__graph.svg |  549 +-
 ..._1te_1_1TensorComputeOpNode__inherit__graph.svg |   97 +-
 ...sstvm_1_1te_1_1TensorComputeOp__coll__graph.svg |    4 +-
 ..._1_1te_1_1TensorIntrinCallNode__coll__graph.svg |    4 +-
 ...stvm_1_1te_1_1TensorIntrinCall__coll__graph.svg |    4 +-
 ...stvm_1_1te_1_1TensorIntrinNode__coll__graph.svg |    4 +-
 ...classtvm_1_1te_1_1TensorIntrin__coll__graph.svg |    4 +-
 .../classtvm_1_1te_1_1TensorNode__coll__graph.svg  |    4 +-
 .../classtvm_1_1te_1_1Tensor__coll__graph.svg      |  141 +-
 .../classtvm_1_1te_1_1Tensor__inherit__graph.svg   |  101 +-
 .../classtvm_1_1tir_1_1AddNode__coll__graph.svg    |    4 +-
 .../classtvm_1_1tir_1_1Add__coll__graph.svg        |    4 +-
 .../classtvm_1_1tir_1_1AllocateConst-members.html  |  102 +
 .../doxygen/classtvm_1_1tir_1_1AllocateConst.html  |  264 +
 ...asstvm_1_1tir_1_1AllocateConstNode-members.html |  128 +
 .../classtvm_1_1tir_1_1AllocateConstNode.html      |  622 ++
 ...vm_1_1tir_1_1AllocateConstNode__coll__graph.svg |  491 +
 ...1_1tir_1_1AllocateConstNode__inherit__graph.svg |  116 +
 ...asstvm_1_1tir_1_1AllocateConst__coll__graph.svg |  110 +
 ...tvm_1_1tir_1_1AllocateConst__inherit__graph.svg |   80 +
 .../classtvm_1_1tir_1_1AllocateNode-members.html   |    8 +-
 .../doxygen/classtvm_1_1tir_1_1AllocateNode.html   |   76 +-
 ...lasstvm_1_1tir_1_1AllocateNode__coll__graph.svg |  480 +-
 ...stvm_1_1tir_1_1AllocateNode__inherit__graph.svg |  146 +-
 .../classtvm_1_1tir_1_1Allocate__coll__graph.svg   |    4 +-
 .../classtvm_1_1tir_1_1AndNode__coll__graph.svg    |    4 +-
 .../classtvm_1_1tir_1_1And__coll__graph.svg        |    4 +-
 .../classtvm_1_1tir_1_1AnyNode__coll__graph.svg    |    4 +-
 .../classtvm_1_1tir_1_1Any__coll__graph.svg        |    4 +-
 ...sstvm_1_1tir_1_1AssertStmtNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1AssertStmt__coll__graph.svg |    4 +-
 ...lasstvm_1_1tir_1_1AttrStmtNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1AttrStmt__coll__graph.svg   |    4 +-
 ...stvm_1_1tir_1_1BijectiveLayoutNode-members.html |   14 +-
 .../classtvm_1_1tir_1_1BijectiveLayoutNode.html    |   76 +-
 ..._1_1tir_1_1BijectiveLayoutNode__coll__graph.svg |  254 +-
 ...1tir_1_1BijectiveLayoutNode__inherit__graph.svg |   94 +-
 ...stvm_1_1tir_1_1BijectiveLayout__coll__graph.svg |    4 +-
 ...lasstvm_1_1tir_1_1BinaryOpNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1BlockNode__coll__graph.svg  |    8 +-
 .../classtvm_1_1tir_1_1BlockRV__coll__graph.svg    |    4 +-
 ...tvm_1_1tir_1_1BlockRealizeNode__coll__graph.svg |    4 +-
 ...lasstvm_1_1tir_1_1BlockRealize__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1BlockScope__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1Block__coll__graph.svg      |    4 +-
 ...asstvm_1_1tir_1_1BroadcastNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1Broadcast__coll__graph.svg  |    4 +-
 ...sstvm_1_1tir_1_1BufferLoadNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1BufferLoad__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1BufferNode__coll__graph.svg |    4 +-
 ...vm_1_1tir_1_1BufferRealizeNode__coll__graph.svg |    4 +-
 ...asstvm_1_1tir_1_1BufferRealize__coll__graph.svg |    4 +-
 ...tvm_1_1tir_1_1BufferRegionNode__coll__graph.svg |    4 +-
 ...lasstvm_1_1tir_1_1BufferRegion__coll__graph.svg |    4 +-
 ...stvm_1_1tir_1_1BufferStoreNode__coll__graph.svg |    4 +-
 ...classtvm_1_1tir_1_1BufferStore__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1Buffer__coll__graph.svg     |    4 +-
 .../classtvm_1_1tir_1_1CallNode__coll__graph.svg   |    4 +-
 .../classtvm_1_1tir_1_1Call__coll__graph.svg       |    4 +-
 .../classtvm_1_1tir_1_1CastNode__coll__graph.svg   |    4 +-
 .../classtvm_1_1tir_1_1Cast__coll__graph.svg       |    4 +-
 .../classtvm_1_1tir_1_1CmpOpNode__coll__graph.svg  |    4 +-
 ...stvm_1_1tir_1_1CommReducerNode__coll__graph.svg |    4 +-
 ...classtvm_1_1tir_1_1CommReducer__coll__graph.svg |    4 +-
 .../doxygen/classtvm_1_1tir_1_1DataProducer.html   |    2 +-
 ...lasstvm_1_1tir_1_1DataProducer__coll__graph.svg |    4 +-
 ...stvm_1_1tir_1_1DataProducer__inherit__graph.svg |  101 +-
 ...sstvm_1_1tir_1_1DependencyNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1Dependency__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1DivNode__coll__graph.svg    |    4 +-
 .../classtvm_1_1tir_1_1Div__coll__graph.svg        |    4 +-
 .../classtvm_1_1tir_1_1EQNode__coll__graph.svg     |    4 +-
 .../doxygen/classtvm_1_1tir_1_1EQ__coll__graph.svg |    4 +-
 ...lasstvm_1_1tir_1_1EvaluateNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1Evaluate__coll__graph.svg   |    4 +-
 ...lasstvm_1_1tir_1_1FloorDivNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1FloorDiv__coll__graph.svg   |    4 +-
 ...lasstvm_1_1tir_1_1FloorModNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1FloorMod__coll__graph.svg   |    4 +-
 .../classtvm_1_1tir_1_1ForNode__coll__graph.svg    |    8 +-
 .../classtvm_1_1tir_1_1For__coll__graph.svg        |    4 +-
 .../classtvm_1_1tir_1_1GENode__coll__graph.svg     |    4 +-
 .../doxygen/classtvm_1_1tir_1_1GE__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1GTNode__coll__graph.svg     |    4 +-
 .../doxygen/classtvm_1_1tir_1_1GT__coll__graph.svg |    4 +-
 ...sstvm_1_1tir_1_1IfThenElseNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1IfThenElse__coll__graph.svg |    4 +-
 ...stvm_1_1tir_1_1InstructionKindNode-members.html |   35 +-
 .../classtvm_1_1tir_1_1InstructionKindNode.html    |   26 +-
 ..._1_1tir_1_1InstructionKindNode__coll__graph.svg |  307 +-
 ...1tir_1_1InstructionKindNode__inherit__graph.svg |  105 +-
 ...stvm_1_1tir_1_1InstructionKind__coll__graph.svg |    4 +-
 ...stvm_1_1tir_1_1InstructionNode__coll__graph.svg |    4 +-
 ...classtvm_1_1tir_1_1Instruction__coll__graph.svg |    4 +-
 ...classtvm_1_1tir_1_1IterVarNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1IterVar__coll__graph.svg    |    4 +-
 .../doxygen/classtvm_1_1tir_1_1LE__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1LTNode__coll__graph.svg     |    4 +-
 .../doxygen/classtvm_1_1tir_1_1LT__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1LayoutNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1Layout__coll__graph.svg     |    4 +-
 .../classtvm_1_1tir_1_1LetNode__coll__graph.svg    |    4 +-
 ...classtvm_1_1tir_1_1LetStmtNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1LetStmt__coll__graph.svg    |    4 +-
 .../classtvm_1_1tir_1_1Let__coll__graph.svg        |    4 +-
 .../classtvm_1_1tir_1_1LinkedParam-members.html    |  102 -
 .../doxygen/classtvm_1_1tir_1_1LinkedParam.html    |  256 -
 ...classtvm_1_1tir_1_1LinkedParamNode-members.html |  115 -
 .../classtvm_1_1tir_1_1LinkedParamNode.html        |  320 -
 ...stvm_1_1tir_1_1LinkedParamNode__coll__graph.svg |  183 -
 ...m_1_1tir_1_1LinkedParamNode__inherit__graph.svg |   76 -
 ...classtvm_1_1tir_1_1LinkedParam__coll__graph.svg |   92 -
 ...sstvm_1_1tir_1_1LinkedParam__inherit__graph.svg |   62 -
 .../classtvm_1_1tir_1_1LoadNode__coll__graph.svg   |    4 +-
 .../classtvm_1_1tir_1_1Load__coll__graph.svg       |    4 +-
 .../classtvm_1_1tir_1_1LoopRV__coll__graph.svg     |    4 +-
 ..._1tir_1_1MatchBufferRegionNode__coll__graph.svg |    4 +-
 ...vm_1_1tir_1_1MatchBufferRegion__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1MaxNode__coll__graph.svg    |    4 +-
 .../classtvm_1_1tir_1_1Max__coll__graph.svg        |    4 +-
 .../classtvm_1_1tir_1_1MinNode__coll__graph.svg    |    4 +-
 .../classtvm_1_1tir_1_1Min__coll__graph.svg        |    4 +-
 .../classtvm_1_1tir_1_1ModNode__coll__graph.svg    |    4 +-
 .../classtvm_1_1tir_1_1Mod__coll__graph.svg        |    4 +-
 .../classtvm_1_1tir_1_1MulNode__coll__graph.svg    |    4 +-
 .../classtvm_1_1tir_1_1Mul__coll__graph.svg        |    4 +-
 .../classtvm_1_1tir_1_1NENode__coll__graph.svg     |    4 +-
 .../doxygen/classtvm_1_1tir_1_1NE__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1NotNode__coll__graph.svg    |    4 +-
 .../classtvm_1_1tir_1_1Not__coll__graph.svg        |    4 +-
 .../classtvm_1_1tir_1_1OrNode__coll__graph.svg     |    4 +-
 .../doxygen/classtvm_1_1tir_1_1Or__coll__graph.svg |    4 +-
 ...lasstvm_1_1tir_1_1PrefetchNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1Prefetch__coll__graph.svg   |    4 +-
 .../classtvm_1_1tir_1_1PrimFuncNode-members.html   |    2 +-
 .../doxygen/classtvm_1_1tir_1_1PrimFuncNode.html   |    6 +-
 ...lasstvm_1_1tir_1_1PrimFuncNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1PrimFunc__coll__graph.svg   |    4 +-
 ...tvm_1_1tir_1_1ProducerLoadNode__coll__graph.svg |    4 +-
 ...lasstvm_1_1tir_1_1ProducerLoad__coll__graph.svg |    4 +-
 ..._1_1tir_1_1ProducerRealizeNode__coll__graph.svg |    4 +-
 ...stvm_1_1tir_1_1ProducerRealize__coll__graph.svg |    4 +-
 ...vm_1_1tir_1_1ProducerStoreNode__coll__graph.svg |    4 +-
 ...asstvm_1_1tir_1_1ProducerStore__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1RampNode__coll__graph.svg   |    4 +-
 .../classtvm_1_1tir_1_1Ramp__coll__graph.svg       |    4 +-
 .../classtvm_1_1tir_1_1ReduceNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1Reduce__coll__graph.svg     |    4 +-
 .../classtvm_1_1tir_1_1ScheduleNode-members.html   |   72 +-
 .../doxygen/classtvm_1_1tir_1_1ScheduleNode.html   |  496 +-
 ...lasstvm_1_1tir_1_1ScheduleNode__coll__graph.svg |    2 +-
 ...stvm_1_1tir_1_1ScheduleNode__inherit__graph.svg |    2 +-
 ...vm_1_1tir_1_1ScheduleStateNode__coll__graph.svg |    4 +-
 ...asstvm_1_1tir_1_1ScheduleState__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1Schedule__coll__graph.svg   |    4 +-
 .../classtvm_1_1tir_1_1SelectNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1Select__coll__graph.svg     |    4 +-
 ...classtvm_1_1tir_1_1SeqStmtNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1SeqStmt__coll__graph.svg    |    4 +-
 ...classtvm_1_1tir_1_1ShuffleNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1Shuffle__coll__graph.svg    |    4 +-
 ...classtvm_1_1tir_1_1SizeVarNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1SizeVar__coll__graph.svg    |    4 +-
 .../api/doxygen/classtvm_1_1tir_1_1Stmt.html       |    2 +-
 ...classtvm_1_1tir_1_1StmtExprMutator-members.html |   23 +-
 .../classtvm_1_1tir_1_1StmtExprMutator.html        |    2 +
 ...stvm_1_1tir_1_1StmtExprMutator__coll__graph.svg |    2 +-
 ...m_1_1tir_1_1StmtExprMutator__inherit__graph.svg |    2 +-
 ...classtvm_1_1tir_1_1StmtExprVisitor-members.html |   23 +-
 .../classtvm_1_1tir_1_1StmtExprVisitor.html        |    2 +
 ...stvm_1_1tir_1_1StmtExprVisitor__coll__graph.svg |    2 +-
 ...m_1_1tir_1_1StmtExprVisitor__inherit__graph.svg |    2 +-
 ..._01_6n_00_01Args_8_8_8_01args_08_4-members.html |   27 +-
 ...t_01Stmt_01_6n_00_01Args_8_8_8_01args_08_4.html |   74 +-
 ...6n_00_01Args_8_8_8_01args_08_4__coll__graph.svg |    2 +-
 .../classtvm_1_1tir_1_1StmtMutator-members.html    |   23 +-
 .../doxygen/classtvm_1_1tir_1_1StmtMutator.html    |   62 +-
 ...classtvm_1_1tir_1_1StmtMutator__coll__graph.svg |    2 +-
 ...sstvm_1_1tir_1_1StmtMutator__inherit__graph.svg |    2 +-
 .../api/doxygen/classtvm_1_1tir_1_1StmtNode.html   |    2 +-
 .../classtvm_1_1tir_1_1StmtNode__coll__graph.svg   |   44 +-
 ...classtvm_1_1tir_1_1StmtNode__inherit__graph.svg |  687 +-
 ...lasstvm_1_1tir_1_1StmtSRefNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1StmtSRef__coll__graph.svg   |    4 +-
 .../classtvm_1_1tir_1_1StmtVisitor-members.html    |   23 +-
 .../doxygen/classtvm_1_1tir_1_1StmtVisitor.html    |   62 +-
 ...classtvm_1_1tir_1_1StmtVisitor__coll__graph.svg |    2 +-
 ...sstvm_1_1tir_1_1StmtVisitor__inherit__graph.svg |    2 +-
 .../classtvm_1_1tir_1_1Stmt__coll__graph.svg       |   24 +-
 .../classtvm_1_1tir_1_1Stmt__inherit__graph.svg    |  393 +-
 .../classtvm_1_1tir_1_1StoreNode__coll__graph.svg  |    4 +-
 .../classtvm_1_1tir_1_1Store__coll__graph.svg      |    4 +-
 ...asstvm_1_1tir_1_1StringImmNode__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1StringImm__coll__graph.svg  |    4 +-
 .../classtvm_1_1tir_1_1SubNode__coll__graph.svg    |    4 +-
 .../classtvm_1_1tir_1_1Sub__coll__graph.svg        |    4 +-
 .../classtvm_1_1tir_1_1TensorIntrin-members.html   |  102 +
 .../doxygen/classtvm_1_1tir_1_1TensorIntrin.html   |  320 +
 ...lasstvm_1_1tir_1_1TensorIntrinNode-members.html |  115 +
 .../classtvm_1_1tir_1_1TensorIntrinNode.html       |  319 +
 ...tvm_1_1tir_1_1TensorIntrinNode__coll__graph.svg |  230 +
 ..._1_1tir_1_1TensorIntrinNode__inherit__graph.svg |   76 +
 ...lasstvm_1_1tir_1_1TensorIntrin__coll__graph.svg |   90 +
 ...stvm_1_1tir_1_1TensorIntrin__inherit__graph.svg |   60 +
 .../classtvm_1_1tir_1_1TraceNode__coll__graph.svg  |    4 +-
 .../classtvm_1_1tir_1_1Trace__coll__graph.svg      |    4 +-
 .../api/doxygen/classtvm_1_1tir_1_1VarNode.html    |    2 +-
 .../classtvm_1_1tir_1_1VarNode__coll__graph.svg    |    4 +-
 .../classtvm_1_1tir_1_1Var__coll__graph.svg        |    4 +-
 .../classtvm_1_1tir_1_1WhileNode__coll__graph.svg  |    4 +-
 .../classtvm_1_1tir_1_1While__coll__graph.svg      |    4 +-
 ..._1tir_1_1usmp_1_1AllocatedPoolInfo-members.html |    2 +-
 ...asstvm_1_1tir_1_1usmp_1_1AllocatedPoolInfo.html |   14 +-
 ...r_1_1usmp_1_1AllocatedPoolInfo__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1usmp_1_1BufferInfo.html     |    4 +-
 ..._1_1usmp_1_1BufferInfoAnalysis__coll__graph.svg |    4 +-
 ...m_1_1tir_1_1usmp_1_1BufferInfo__coll__graph.svg |    4 +-
 .../classtvm_1_1tir_1_1usmp_1_1PoolAllocation.html |    4 +-
 ...1tir_1_1usmp_1_1PoolAllocation__coll__graph.svg |    4 +-
 ...lasstvm_1_1tir_1_1usmp_1_1PoolInfo-members.html |  101 -
 .../classtvm_1_1tir_1_1usmp_1_1PoolInfo.html       |  237 -
 ...tvm_1_1tir_1_1usmp_1_1PoolInfo__coll__graph.svg |   90 -
 ..._1_1tir_1_1usmp_1_1PoolInfo__inherit__graph.svg |   60 -
 ...1tir_1_1usmp_1_1algo_1_1GreedyBase-members.html |   86 +
 ...sstvm_1_1tir_1_1usmp_1_1algo_1_1GreedyBase.html |  324 +
 ..._1_1usmp_1_1algo_1_1GreedyBase__coll__graph.svg |   29 +
 ..._1transform_1_1PassContextNode__coll__graph.svg |    8 +-
 ...vm_1_1transform_1_1PassContext__coll__graph.svg |    4 +-
 ...m_1_1transform_1_1PassInfoNode__coll__graph.svg |    4 +-
 ...sstvm_1_1transform_1_1PassInfo__coll__graph.svg |    4 +-
 .../doxygen/classtvm_1_1transform_1_1PassNode.html |    6 +-
 ...sstvm_1_1transform_1_1PassNode__coll__graph.svg |   16 +-
 ...vm_1_1transform_1_1PassNode__inherit__graph.svg |  133 +-
 .../classtvm_1_1transform_1_1Pass__coll__graph.svg |    4 +-
 ...lasstvm_1_1transform_1_1Sequential-members.html |    2 +-
 .../classtvm_1_1transform_1_1Sequential.html       |   14 +-
 ...tvm_1_1transform_1_1SequentialNode-members.html |  121 +
 .../classtvm_1_1transform_1_1SequentialNode.html   |  444 +
 ...1_1transform_1_1SequentialNode__coll__graph.svg |  231 +
 ...transform_1_1SequentialNode__inherit__graph.svg |  103 +
 ...tvm_1_1transform_1_1Sequential__coll__graph.svg |    4 +-
 docs/reference/api/doxygen/closure_8h_source.html  |    8 +-
 docs/reference/api/doxygen/codegen_8h.html         |    2 +-
 docs/reference/api/doxygen/codegen_8h__incl.svg    | 1358 +--
 docs/reference/api/doxygen/codegen_8h_source.html  |    6 +-
 .../api/doxygen/compilation__config_8h.html        |    6 +-
 .../api/doxygen/compilation__config_8h__incl.svg   | 1445 +--
 .../api/doxygen/compilation__config_8h_source.html |   32 +-
 .../api/doxygen/compute__dag_8h__dep__incl.svg     |    2 +-
 .../api/doxygen/compute__dag_8h__incl.svg          |  124 +-
 .../api/doxygen/compute__dag_8h_source.html        |    8 +-
 .../api/doxygen/constant__utils_8h__incl.svg       |  150 +-
 .../api/doxygen/constant__utils_8h_source.html     |    4 +-
 docs/reference/api/doxygen/cost__model_8h.html     |  128 -
 .../reference/api/doxygen/cost__model_8h__incl.svg | 1434 ---
 .../api/doxygen/cost__model_8h_source.html         |  110 -
 docs/reference/api/doxygen/cublas_8h__incl.svg     |  118 +-
 .../api/doxygen/cuda_2dense_8h_source.html         |   10 +-
 .../api/doxygen/cuda_2injective_8h_source.html     |   10 +-
 .../api/doxygen/cuda_2pooling_8h_source.html       |   10 +-
 .../api/doxygen/cuda_2reduction_8h_source.html     |   14 +-
 .../api/doxygen/cuda_2softmax_8h_source.html       |   10 +-
 docs/reference/api/doxygen/data__layout_8h.html    |    2 +-
 .../api/doxygen/data__layout_8h__incl.svg          | 1402 +--
 .../api/doxygen/data__layout_8h_source.html        |   26 +-
 docs/reference/api/doxygen/data__type_8h.html      |    2 +-
 .../api/doxygen/data__type_8h__dep__incl.svg       | 1665 ++--
 docs/reference/api/doxygen/database_8h.html        |    2 +-
 docs/reference/api/doxygen/database_8h__incl.svg   | 1598 ++--
 docs/reference/api/doxygen/database_8h_source.html |   40 +-
 .../api/doxygen/dataflow__matcher_8h.html          |    5 +-
 .../api/doxygen/dataflow__matcher_8h__incl.svg     | 1453 +--
 .../api/doxygen/dataflow__matcher_8h_source.html   |   15 +-
 .../api/doxygen/dataflow__pattern_8h.html          |    2 +-
 .../api/doxygen/dataflow__pattern_8h__incl.svg     | 1469 +--
 .../api/doxygen/dataflow__pattern_8h_source.html   |   16 +-
 .../api/doxygen/dataflow__pattern__functor_8h.html |    2 +-
 .../dataflow__pattern__functor_8h__incl.svg        | 1451 +--
 .../dataflow__pattern__functor_8h_source.html      |    8 +-
 docs/reference/api/doxygen/debug_8h.html           |  112 -
 docs/reference/api/doxygen/debug_8h__incl.svg      | 1394 ---
 docs/reference/api/doxygen/debug_8h_source.html    |   86 -
 .../api/doxygen/detail_2broadcast_8h__incl.svg     |  134 +-
 .../api/doxygen/detail_2broadcast_8h_source.html   |    6 +-
 docs/reference/api/doxygen/detail_2extern_8h.html  |    2 +-
 .../api/doxygen/detail_2extern_8h__incl.svg        | 1190 +--
 .../api/doxygen/detail_2extern_8h_source.html      |    8 +-
 docs/reference/api/doxygen/device__api_8h.html     |    2 +-
 .../api/doxygen/device__api_8h__dep__incl.svg      |  112 +-
 .../api/doxygen/device__api_8h_source.html         |    8 +-
 docs/reference/api/doxygen/device__copy_8h.html    |    4 +-
 .../api/doxygen/device__copy_8h__incl.svg          | 1637 ++--
 .../api/doxygen/device__copy_8h_source.html        |   12 +-
 docs/reference/api/doxygen/diagnostic_8h.html      |    4 +-
 .../api/doxygen/diagnostic_8h__dep__incl.svg       | 1397 +--
 docs/reference/api/doxygen/diagnostic_8h__incl.svg | 1466 +--
 .../api/doxygen/diagnostic_8h_source.html          |   12 +-
 docs/reference/api/doxygen/dilate_8h__incl.svg     |  118 +-
 docs/reference/api/doxygen/dilate_8h_source.html   |    2 +-
 docs/reference/api/doxygen/dir_000002_000006.html  |   73 -
 docs/reference/api/doxygen/dir_000002_000007.html  |   73 +
 ...r_000002_000010.html => dir_000002_000011.html} |    0
 ...r_000002_000022.html => dir_000002_000013.html} |    0
 docs/reference/api/doxygen/dir_000003_000007.html  |   73 -
 docs/reference/api/doxygen/dir_000003_000008.html  |   73 +
 docs/reference/api/doxygen/dir_000003_000015.html  |   73 -
 docs/reference/api/doxygen/dir_000003_000017.html  |   73 +
 docs/reference/api/doxygen/dir_000003_000023.html  |   73 -
 docs/reference/api/doxygen/dir_000003_000024.html  |    4 +-
 ...r_000003_000024.html => dir_000003_000025.html} |    0
 docs/reference/api/doxygen/dir_000004_000006.html  |   73 -
 docs/reference/api/doxygen/dir_000004_000007.html  |    6 +-
 ...r_000014_000007.html => dir_000004_000008.html} |    0
 docs/reference/api/doxygen/dir_000004_000011.html  |   73 +
 ...r_000014_000022.html => dir_000004_000013.html} |    0
 ...r_000014_000015.html => dir_000004_000017.html} |    0
 docs/reference/api/doxygen/dir_000004_000023.html  |   73 -
 docs/reference/api/doxygen/dir_000004_000024.html  |    6 +-
 docs/reference/api/doxygen/dir_000005_000006.html  |   73 -
 docs/reference/api/doxygen/dir_000005_000007.html  |    6 +-
 ...r_000004_000007.html => dir_000005_000008.html} |    0
 ...r_000004_000010.html => dir_000005_000011.html} |    0
 ...r_000004_000012.html => dir_000005_000014.html} |    0
 ...r_000004_000015.html => dir_000005_000017.html} |    0
 docs/reference/api/doxygen/dir_000005_000024.html  |    6 +-
 ...r_000004_000024.html => dir_000005_000025.html} |    0
 docs/reference/api/doxygen/dir_000006_000007.html  |    6 +-
 ...r_000005_000007.html => dir_000006_000008.html} |    0
 ...r_000005_000010.html => dir_000006_000011.html} |    0
 ...r_000005_000022.html => dir_000006_000013.html} |    0
 docs/reference/api/doxygen/dir_000006_000015.html  |   73 -
 ...r_000005_000023.html => dir_000006_000024.html} |    0
 ...r_000005_000024.html => dir_000006_000025.html} |    0
 ...r_000006_000004.html => dir_000007_000005.html} |    0
 docs/reference/api/doxygen/dir_000007_000008.html  |   73 +
 docs/reference/api/doxygen/dir_000007_000009.html  |   73 +
 ...r_000006_000022.html => dir_000007_000013.html} |    0
 docs/reference/api/doxygen/dir_000007_000017.html  |   73 +
 ...r_000006_000016.html => dir_000007_000018.html} |    0
 docs/reference/api/doxygen/dir_000007_000024.html  |   73 +
 docs/reference/api/doxygen/dir_000008_000007.html  |   73 +
 docs/reference/api/doxygen/dir_000008_000013.html  |   73 +
 docs/reference/api/doxygen/dir_000009_000006.html  |   73 -
 docs/reference/api/doxygen/dir_000010_000006.html  |   73 -
 docs/reference/api/doxygen/dir_000010_000007.html  |    6 +-
 ...r_000009_000007.html => dir_000010_000008.html} |    0
 docs/reference/api/doxygen/dir_000011_000002.html  |   73 +
 docs/reference/api/doxygen/dir_000011_000007.html  |   73 +
 docs/reference/api/doxygen/dir_000011_000008.html  |   73 +
 ...r_000010_000022.html => dir_000011_000013.html} |    0
 ...r_000010_000015.html => dir_000011_000017.html} |    0
 ...r_000010_000023.html => dir_000011_000024.html} |    0
 docs/reference/api/doxygen/dir_000012_000006.html  |   73 -
 docs/reference/api/doxygen/dir_000012_000023.html  |   73 -
 docs/reference/api/doxygen/dir_000013_000006.html  |   73 -
 ...r_000022_000007.html => dir_000013_000008.html} |    0
 docs/reference/api/doxygen/dir_000014_000006.html  |   73 -
 docs/reference/api/doxygen/dir_000014_000007.html  |    6 +-
 docs/reference/api/doxygen/dir_000014_000010.html  |   73 -
 docs/reference/api/doxygen/dir_000014_000023.html  |   73 -
 docs/reference/api/doxygen/dir_000014_000024.html  |   73 +
 docs/reference/api/doxygen/dir_000015_000002.html  |   73 +
 docs/reference/api/doxygen/dir_000015_000007.html  |    6 +-
 docs/reference/api/doxygen/dir_000015_000008.html  |   73 +
 ...r_000026_000023.html => dir_000015_000024.html} |    0
 ...r_000013_000002.html => dir_000016_000002.html} |    0
 docs/reference/api/doxygen/dir_000016_000006.html  |   73 -
 docs/reference/api/doxygen/dir_000016_000007.html  |    6 +-
 ...r_000013_000007.html => dir_000016_000008.html} |    0
 ...r_000013_000010.html => dir_000016_000011.html} |    0
 ...r_000013_000023.html => dir_000016_000024.html} |    0
 ...r_000013_000024.html => dir_000016_000025.html} |    0
 docs/reference/api/doxygen/dir_000017_000008.html  |    6 +-
 docs/reference/api/doxygen/dir_000018_000007.html  |   73 +
 docs/reference/api/doxygen/dir_000018_000008.html  |    6 +-
 ...r_000017_000008.html => dir_000019_000009.html} |    0
 ...r_000018_000008.html => dir_000020_000009.html} |    0
 docs/reference/api/doxygen/dir_000023_000006.html  |   73 -
 docs/reference/api/doxygen/dir_000024_000007.html  |    6 +-
 ...r_000023_000007.html => dir_000024_000008.html} |    0
 ...r_000023_000010.html => dir_000024_000011.html} |    0
 ...r_000023_000022.html => dir_000024_000013.html} |    0
 ...r_000023_000015.html => dir_000024_000017.html} |    0
 ...r_000024_000002.html => dir_000025_000002.html} |    0
 ...r_000024_000007.html => dir_000025_000008.html} |    0
 ...r_000024_000010.html => dir_000025_000011.html} |    0
 ...r_000024_000022.html => dir_000025_000013.html} |    0
 docs/reference/api/doxygen/dir_000026_000006.html  |   73 -
 ...r_000025_000006.html => dir_000026_000007.html} |    0
 ...r_000025_000022.html => dir_000026_000013.html} |    0
 ...r_000025_000015.html => dir_000026_000017.html} |    0
 docs/reference/api/doxygen/dir_000027_000002.html  |    6 +-
 docs/reference/api/doxygen/dir_000027_000008.html  |   73 +
 ...r_000027_000002.html => dir_000028_000002.html} |    0
 ...r_000027_000010.html => dir_000028_000011.html} |    0
 ...r_000027_000024.html => dir_000028_000025.html} |    0
 docs/reference/api/doxygen/dir_000028_000027.html  |   73 -
 docs/reference/api/doxygen/dir_000029_000023.html  |   73 -
 ...r_000028_000024.html => dir_000029_000025.html} |    0
 docs/reference/api/doxygen/dir_000029_000028.html  |    6 +-
 docs/reference/api/doxygen/dir_000030_000024.html  |    6 +-
 ...r_000029_000024.html => dir_000030_000025.html} |    0
 docs/reference/api/doxygen/dir_000030_000027.html  |   73 -
 ...r_000029_000027.html => dir_000030_000028.html} |    0
 ...r_000029_000028.html => dir_000030_000029.html} |    0
 ...r_000029_000030.html => dir_000030_000031.html} |    0
 ...r_000029_000032.html => dir_000030_000033.html} |    0
 ...r_000030_000002.html => dir_000031_000002.html} |    0
 docs/reference/api/doxygen/dir_000031_000023.html  |   73 -
 ...r_000030_000024.html => dir_000031_000025.html} |    0
 docs/reference/api/doxygen/dir_000031_000028.html  |    6 +-
 docs/reference/api/doxygen/dir_000032_000023.html  |   73 -
 docs/reference/api/doxygen/dir_000032_000024.html  |    6 +-
 ...r_000031_000024.html => dir_000032_000025.html} |    0
 ...r_000031_000027.html => dir_000032_000028.html} |    0
 ...r_000031_000028.html => dir_000032_000029.html} |    0
 ...r_000031_000029.html => dir_000032_000030.html} |    0
 ...r_000031_000030.html => dir_000032_000031.html} |    0
 ...r_000031_000032.html => dir_000032_000033.html} |    0
 docs/reference/api/doxygen/dir_000033_000023.html  |   73 -
 docs/reference/api/doxygen/dir_000033_000024.html  |    6 +-
 ...r_000032_000024.html => dir_000033_000025.html} |    0
 ...r_000032_000027.html => dir_000033_000028.html} |    0
 docs/reference/api/doxygen/dir_000034_000024.html  |    6 +-
 ...r_000033_000024.html => dir_000034_000025.html} |    0
 ...r_000033_000027.html => dir_000034_000028.html} |    0
 ...r_000034_000024.html => dir_000035_000025.html} |    0
 ...r_000034_000027.html => dir_000035_000028.html} |    0
 .../dir_006b1f4ac353a18abb55f74cc4796db6_dep.svg   |   10 +-
 .../dir_02be2c9d68e402f80df60bd528724ee5.html      |    2 +-
 .../dir_02be2c9d68e402f80df60bd528724ee5_dep.svg   |  242 +-
 .../dir_05ffda4d144d7985f926507abde48dbb.html      |   16 +-
 .../dir_05ffda4d144d7985f926507abde48dbb_dep.svg   |  168 +-
 .../dir_194ecda214f05a38134392ac6a69b970_dep.svg   |   16 +-
 .../dir_1f1b12d204a071c9e67e47fcbb552b86_dep.svg   |   44 +-
 .../dir_2b0ef9f1c86b565a92e96353e1195b2c_dep.svg   |    8 +-
 .../dir_3a038e7bfa2370c6aee2a5aecd5d3ef1_dep.svg   |   12 +-
 .../dir_404558507ed35459f0d7a6d81d8c508d.html      |   11 +-
 .../dir_404558507ed35459f0d7a6d81d8c508d_dep.svg   |  104 +-
 .../dir_4378f18824ae7d4ad48f8d7785cd7ac8.html      |   14 +-
 .../dir_4378f18824ae7d4ad48f8d7785cd7ac8_dep.svg   |  256 +-
 .../dir_519be2d4a83a987dbf989f1de527b870.html      |    4 +-
 .../dir_519be2d4a83a987dbf989f1de527b870_dep.svg   |   32 +-
 .../dir_536029070df27a3ee03a4230630922c5_dep.svg   |    2 +-
 .../dir_54983dd6d74c59f67ee9e8e5a50aafc4_dep.svg   |   42 +-
 .../dir_5baffeed82c1190bfdf7a4f918ab5ac6_dep.svg   |    2 +-
 .../dir_5da96592f3a7c442b838b075c58254c2.html      |    8 +-
 .../dir_5da96592f3a7c442b838b075c58254c2_dep.svg   |  192 +-
 .../dir_63946bee875c6d52bce55e72a67a86ad.html      |    2 +-
 .../dir_63946bee875c6d52bce55e72a67a86ad_dep.svg   |  262 +-
 .../dir_6cd4295f6ad5aa17e5b568d0e5b190e5_dep.svg   |    4 +-
 .../dir_72c2f11201cd7636dc7624de0754daa5.html      |    2 +-
 .../dir_72c2f11201cd7636dc7624de0754daa5_dep.svg   |  323 +-
 .../dir_8395ded0a3205c0748976a0d4487d38d_dep.svg   |    8 +-
 .../dir_8e4e25e66b8623d88c5b5dd2040bca97.html      |    2 +-
 .../dir_8e4e25e66b8623d88c5b5dd2040bca97_dep.svg   |  492 +-
 .../dir_a98464176f1216e334ac3bbacd433085.html      |    4 +-
 .../dir_a98464176f1216e334ac3bbacd433085_dep.svg   |   18 +-
 .../dir_ac57496531ccbad72f774fa62e6de987_dep.svg   |   28 +-
 .../dir_b4c7d8e826c599ba55146c099a14beb5.html      |    2 +-
 .../dir_b4c7d8e826c599ba55146c099a14beb5_dep.svg   |  578 +-
 .../dir_d331277d4303e21ded95616eb56c1a9e_dep.svg   |    6 +-
 .../dir_d3953cf7eb33eca56fc6850c0e98447d_dep.svg   |    6 +-
 .../dir_d4a54fa981698f72ef4cd62f8b9e1a8f.html      |   90 +
 .../dir_d4a54fa981698f72ef4cd62f8b9e1a8f_dep.svg   |   68 +
 .../dir_d523279167051dc3aad9a40981221f4d.html      |    2 +-
 .../dir_d523279167051dc3aad9a40981221f4d_dep.svg   |   62 +-
 .../dir_dc867ff9a37cad1764f1670dc7eba6c1.html      |    9 +-
 .../dir_dc867ff9a37cad1764f1670dc7eba6c1_dep.svg   |  251 +-
 .../dir_f97d855a3173728370e632aa77170e34_dep.svg   |   58 +-
 .../dir_fafc18f54a755f417c55c769623cbfef.html      |    2 +-
 .../dir_fafc18f54a755f417c55c769623cbfef_dep.svg   |   64 +-
 .../dir_fb1b1bc11a768ab8cf63a96a73170118.html      |    3 +
 .../dir_fb1b1bc11a768ab8cf63a96a73170118_dep.svg   |   20 +-
 docs/reference/api/doxygen/driver__api_8h.html     |    2 +-
 .../reference/api/doxygen/driver__api_8h__incl.svg | 1500 ++--
 docs/reference/api/doxygen/einsum_8h__incl.svg     |   98 +-
 docs/reference/api/doxygen/einsum_8h_source.html   |    4 +-
 docs/reference/api/doxygen/elemwise_8h.html        |    2 +-
 docs/reference/api/doxygen/elemwise_8h__incl.svg   | 1148 +--
 docs/reference/api/doxygen/elemwise_8h_source.html |    6 +-
 docs/reference/api/doxygen/env__func_8h.html       |    4 +-
 .../api/doxygen/env__func_8h__dep__incl.svg        | 1006 +--
 docs/reference/api/doxygen/env__func_8h__incl.svg  | 1042 +--
 .../reference/api/doxygen/env__func_8h_source.html |   12 +-
 docs/reference/api/doxygen/error_8h.html           |    6 +-
 docs/reference/api/doxygen/error_8h__dep__incl.svg | 1380 +--
 docs/reference/api/doxygen/error_8h__incl.svg      | 1508 ++--
 docs/reference/api/doxygen/error_8h_source.html    |   14 +-
 .../api/doxygen/executable_8h_source.html          |   28 +-
 docs/reference/api/doxygen/executor_8h.html        |    6 +-
 docs/reference/api/doxygen/executor_8h__incl.svg   | 1540 ++--
 docs/reference/api/doxygen/executor_8h_source.html |   23 +-
 .../api/doxygen/feature__extractor_8h.html         |  110 +
 .../api/doxygen/feature__extractor_8h__incl.svg    | 1507 ++++
 .../api/doxygen/feature__extractor_8h_source.html  |   99 +
 docs/reference/api/doxygen/files.html              |   86 +-
 docs/reference/api/doxygen/flatten_8h__incl.svg    |  134 +-
 docs/reference/api/doxygen/functions_0x7e.html     |   16 +
 docs/reference/api/doxygen/functions__.html        |   32 +-
 docs/reference/api/doxygen/functions_a.html        |   47 +-
 docs/reference/api/doxygen/functions_b.html        |   24 +-
 docs/reference/api/doxygen/functions_c.html        |   48 +-
 docs/reference/api/doxygen/functions_d.html        |   29 +-
 docs/reference/api/doxygen/functions_e.html        |   28 +-
 docs/reference/api/doxygen/functions_eval.html     |    3 +
 docs/reference/api/doxygen/functions_f.html        |  100 +-
 .../reference/api/doxygen/functions_func_0x7e.html |   16 +
 docs/reference/api/doxygen/functions_func_a.html   |   40 +-
 docs/reference/api/doxygen/functions_func_b.html   |   15 +-
 docs/reference/api/doxygen/functions_func_c.html   |   28 +-
 docs/reference/api/doxygen/functions_func_d.html   |   14 +-
 docs/reference/api/doxygen/functions_func_e.html   |   18 +-
 docs/reference/api/doxygen/functions_func_f.html   |   16 +-
 docs/reference/api/doxygen/functions_func_g.html   |   20 +-
 docs/reference/api/doxygen/functions_func_h.html   |   13 +
 docs/reference/api/doxygen/functions_func_i.html   |   42 +-
 docs/reference/api/doxygen/functions_func_j.html   |    2 +-
 docs/reference/api/doxygen/functions_func_k.html   |   76 +
 docs/reference/api/doxygen/functions_func_l.html   |   10 +-
 docs/reference/api/doxygen/functions_func_m.html   |   23 +-
 docs/reference/api/doxygen/functions_func_n.html   |    4 +-
 docs/reference/api/doxygen/functions_func_o.html   |   44 +-
 docs/reference/api/doxygen/functions_func_p.html   |   55 +-
 docs/reference/api/doxygen/functions_func_q.html   |    8 +-
 docs/reference/api/doxygen/functions_func_r.html   |   43 +-
 docs/reference/api/doxygen/functions_func_s.html   |   47 +-
 docs/reference/api/doxygen/functions_func_t.html   |   61 +-
 docs/reference/api/doxygen/functions_func_u.html   |   12 +-
 docs/reference/api/doxygen/functions_func_v.html   |   62 +-
 docs/reference/api/doxygen/functions_func_w.html   |    3 +
 docs/reference/api/doxygen/functions_g.html        |   24 +-
 docs/reference/api/doxygen/functions_h.html        |   21 +-
 docs/reference/api/doxygen/functions_i.html        |   59 +-
 docs/reference/api/doxygen/functions_j.html        |    2 +-
 docs/reference/api/doxygen/functions_k.html        |    8 +-
 docs/reference/api/doxygen/functions_l.html        |   14 +-
 docs/reference/api/doxygen/functions_m.html        |   36 +-
 docs/reference/api/doxygen/functions_n.html        |   10 +-
 docs/reference/api/doxygen/functions_o.html        |   41 +-
 docs/reference/api/doxygen/functions_p.html        |   81 +-
 docs/reference/api/doxygen/functions_q.html        |    8 +-
 docs/reference/api/doxygen/functions_r.html        |   45 +-
 docs/reference/api/doxygen/functions_rela.html     |   18 +-
 docs/reference/api/doxygen/functions_s.html        |   76 +-
 docs/reference/api/doxygen/functions_t.html        |   82 +-
 docs/reference/api/doxygen/functions_type.html     |   60 +-
 docs/reference/api/doxygen/functions_u.html        |   10 +-
 docs/reference/api/doxygen/functions_v.html        |   79 +-
 docs/reference/api/doxygen/functions_vars.html     |   32 +-
 docs/reference/api/doxygen/functions_vars_a.html   |    7 +-
 docs/reference/api/doxygen/functions_vars_b.html   |   13 +-
 docs/reference/api/doxygen/functions_vars_c.html   |   12 +
 docs/reference/api/doxygen/functions_vars_d.html   |   19 +-
 docs/reference/api/doxygen/functions_vars_e.html   |    8 +-
 docs/reference/api/doxygen/functions_vars_f.html   |   43 +-
 docs/reference/api/doxygen/functions_vars_h.html   |    6 +-
 docs/reference/api/doxygen/functions_vars_i.html   |   18 +-
 docs/reference/api/doxygen/functions_vars_k.html   |    2 +-
 docs/reference/api/doxygen/functions_vars_m.html   |   11 +-
 docs/reference/api/doxygen/functions_vars_n.html   |    8 +-
 docs/reference/api/doxygen/functions_vars_o.html   |    5 +-
 docs/reference/api/doxygen/functions_vars_p.html   |   28 +-
 docs/reference/api/doxygen/functions_vars_r.html   |    6 +
 docs/reference/api/doxygen/functions_vars_s.html   |   31 +-
 docs/reference/api/doxygen/functions_vars_t.html   |   14 +-
 docs/reference/api/doxygen/functions_vars_v.html   |   10 +-
 docs/reference/api/doxygen/functions_vars_w.html   |    9 +
 docs/reference/api/doxygen/functions_w.html        |   12 +
 docs/reference/api/doxygen/functor_8h.html         |    2 +-
 .../api/doxygen/functor_8h__dep__incl.svg          | 1537 ++--
 docs/reference/api/doxygen/functor_8h_source.html  |    6 +-
 docs/reference/api/doxygen/fuse_8h__incl.svg       |  118 +-
 .../api/doxygen/generic_2default_8h_source.html    |    2 +-
 .../api/doxygen/generic_2extern_8h_source.html     |    2 +-
 .../api/doxygen/generic_2injective_8h_source.html  |    6 +-
 docs/reference/api/doxygen/generic__func_8h.html   |    2 +-
 .../api/doxygen/generic__func_8h__incl.svg         | 1208 +--
 .../api/doxygen/generic__func_8h_source.html       |   35 +-
 docs/reference/api/doxygen/globals_defs.html       |    3 +
 docs/reference/api/doxygen/globals_t.html          |    3 +
 docs/reference/api/doxygen/greedy_8h.html          |  120 +
 docs/reference/api/doxygen/greedy_8h__incl.svg     | 1519 ++++
 docs/reference/api/doxygen/greedy_8h_source.html   |   95 +
 docs/reference/api/doxygen/hierarchy.html          | 2456 ++---
 docs/reference/api/doxygen/image_8h.html           |    2 +-
 docs/reference/api/doxygen/image_8h__incl.svg      | 1489 ++--
 docs/reference/api/doxygen/image_8h_source.html    |    5 +-
 docs/reference/api/doxygen/inherit_graph_10.svg    |   16 +-
 docs/reference/api/doxygen/inherit_graph_100.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_101.svg   |   14 +-
 docs/reference/api/doxygen/inherit_graph_102.svg   |   29 +-
 docs/reference/api/doxygen/inherit_graph_103.svg   | 9005 +------------------
 docs/reference/api/doxygen/inherit_graph_104.svg   |   12 +-
 docs/reference/api/doxygen/inherit_graph_105.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_106.svg   |   30 +-
 docs/reference/api/doxygen/inherit_graph_107.svg   | 9353 +++++++++++++++++++-
 docs/reference/api/doxygen/inherit_graph_108.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_109.svg   |   12 +-
 docs/reference/api/doxygen/inherit_graph_110.svg   |   12 +-
 docs/reference/api/doxygen/inherit_graph_111.svg   | 5759 +-----------
 docs/reference/api/doxygen/inherit_graph_112.svg   |    6 +-
 docs/reference/api/doxygen/inherit_graph_113.svg   |   14 +-
 docs/reference/api/doxygen/inherit_graph_114.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_115.svg   |   12 +-
 docs/reference/api/doxygen/inherit_graph_116.svg   | 6100 ++++++++++++-
 docs/reference/api/doxygen/inherit_graph_117.svg   |   14 +-
 docs/reference/api/doxygen/inherit_graph_118.svg   |   14 +-
 docs/reference/api/doxygen/inherit_graph_119.svg   |   14 +-
 docs/reference/api/doxygen/inherit_graph_120.svg   |   12 +-
 docs/reference/api/doxygen/inherit_graph_121.svg   |   14 +-
 docs/reference/api/doxygen/inherit_graph_122.svg   |   14 +-
 docs/reference/api/doxygen/inherit_graph_123.svg   |   14 +-
 docs/reference/api/doxygen/inherit_graph_124.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_125.svg   |   14 +-
 docs/reference/api/doxygen/inherit_graph_126.svg   |   16 +-
 docs/reference/api/doxygen/inherit_graph_127.svg   |   14 +-
 docs/reference/api/doxygen/inherit_graph_128.svg   |   14 +-
 docs/reference/api/doxygen/inherit_graph_129.svg   |   12 +-
 docs/reference/api/doxygen/inherit_graph_130.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_131.svg   |   14 +-
 docs/reference/api/doxygen/inherit_graph_132.svg   |   62 +-
 docs/reference/api/doxygen/inherit_graph_133.svg   |   17 +-
 docs/reference/api/doxygen/inherit_graph_134.svg   |   20 +-
 docs/reference/api/doxygen/inherit_graph_135.svg   |   18 +-
 docs/reference/api/doxygen/inherit_graph_136.svg   |   16 +-
 docs/reference/api/doxygen/inherit_graph_137.svg   |   17 +-
 docs/reference/api/doxygen/inherit_graph_138.svg   |   61 +-
 docs/reference/api/doxygen/inherit_graph_139.svg   |   17 +-
 docs/reference/api/doxygen/inherit_graph_140.svg   |   20 +-
 docs/reference/api/doxygen/inherit_graph_141.svg   |   19 +-
 docs/reference/api/doxygen/inherit_graph_142.svg   |   17 +-
 docs/reference/api/doxygen/inherit_graph_143.svg   |   19 +-
 docs/reference/api/doxygen/inherit_graph_144.svg   |   14 +-
 docs/reference/api/doxygen/inherit_graph_145.svg   |   19 +-
 docs/reference/api/doxygen/inherit_graph_146.svg   |    4 +-
 docs/reference/api/doxygen/inherit_graph_147.svg   |   21 +-
 docs/reference/api/doxygen/inherit_graph_148.svg   |   19 +-
 docs/reference/api/doxygen/inherit_graph_149.svg   |    4 +-
 docs/reference/api/doxygen/inherit_graph_150.svg   |   17 +-
 docs/reference/api/doxygen/inherit_graph_151.svg   |   17 +-
 docs/reference/api/doxygen/inherit_graph_152.svg   |   12 +-
 docs/reference/api/doxygen/inherit_graph_153.svg   |   17 +-
 docs/reference/api/doxygen/inherit_graph_154.svg   |   17 +-
 docs/reference/api/doxygen/inherit_graph_155.svg   |   19 +-
 docs/reference/api/doxygen/inherit_graph_156.svg   |   12 +-
 docs/reference/api/doxygen/inherit_graph_157.svg   |   12 +-
 docs/reference/api/doxygen/inherit_graph_158.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_159.svg   |   20 +-
 docs/reference/api/doxygen/inherit_graph_160.svg   |   18 +-
 docs/reference/api/doxygen/inherit_graph_161.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_162.svg   |   17 +-
 docs/reference/api/doxygen/inherit_graph_163.svg   |   20 +-
 docs/reference/api/doxygen/inherit_graph_164.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_165.svg   |   18 +-
 docs/reference/api/doxygen/inherit_graph_166.svg   |   17 +-
 docs/reference/api/doxygen/inherit_graph_167.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_168.svg   |   14 +-
 docs/reference/api/doxygen/inherit_graph_169.svg   |   14 +-
 docs/reference/api/doxygen/inherit_graph_170.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_171.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_172.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_173.svg   |   12 +-
 docs/reference/api/doxygen/inherit_graph_174.svg   |   12 +-
 docs/reference/api/doxygen/inherit_graph_175.svg   |   12 +-
 docs/reference/api/doxygen/inherit_graph_176.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_177.svg   |   17 +-
 docs/reference/api/doxygen/inherit_graph_178.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_179.svg   |   12 +-
 docs/reference/api/doxygen/inherit_graph_180.svg   |   14 +-
 docs/reference/api/doxygen/inherit_graph_181.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_182.svg   |   17 +-
 docs/reference/api/doxygen/inherit_graph_183.svg   |   79 +-
 docs/reference/api/doxygen/inherit_graph_184.svg   |   79 +-
 docs/reference/api/doxygen/inherit_graph_185.svg   |   33 +-
 docs/reference/api/doxygen/inherit_graph_186.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_187.svg   |   12 +-
 docs/reference/api/doxygen/inherit_graph_188.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_189.svg   |   30 +-
 docs/reference/api/doxygen/inherit_graph_190.svg   |   30 +-
 docs/reference/api/doxygen/inherit_graph_191.svg   |   12 +-
 docs/reference/api/doxygen/inherit_graph_192.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_193.svg   |   16 +-
 docs/reference/api/doxygen/inherit_graph_194.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_195.svg   |   12 +-
 docs/reference/api/doxygen/inherit_graph_196.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_197.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_198.svg   |   16 +-
 docs/reference/api/doxygen/inherit_graph_199.svg   |   78 +-
 docs/reference/api/doxygen/inherit_graph_200.svg   |   78 +-
 docs/reference/api/doxygen/inherit_graph_201.svg   |   15 +-
 docs/reference/api/doxygen/inherit_graph_202.svg   |   18 +-
 ...inherit_graph_186.svg => inherit_graph_203.svg} |    0
 ...inherit_graph_187.svg => inherit_graph_204.svg} |    0
 ...inherit_graph_188.svg => inherit_graph_205.svg} |    0
 ...inherit_graph_189.svg => inherit_graph_206.svg} |    0
 ...inherit_graph_190.svg => inherit_graph_207.svg} |    0
 docs/reference/api/doxygen/inherit_graph_208.svg   |   22 +
 ...inherit_graph_191.svg => inherit_graph_209.svg} |    0
 ...inherit_graph_192.svg => inherit_graph_210.svg} |    0
 ...inherit_graph_193.svg => inherit_graph_211.svg} |    0
 ...inherit_graph_194.svg => inherit_graph_212.svg} |    0
 ...inherit_graph_195.svg => inherit_graph_213.svg} |    0
 ...inherit_graph_196.svg => inherit_graph_214.svg} |    0
 docs/reference/api/doxygen/inherit_graph_215.svg   |   22 +
 ...inherit_graph_197.svg => inherit_graph_216.svg} |    0
 ...inherit_graph_198.svg => inherit_graph_217.svg} |    0
 ...inherit_graph_199.svg => inherit_graph_218.svg} |    0
 ...inherit_graph_200.svg => inherit_graph_219.svg} |    0
 ...inherit_graph_201.svg => inherit_graph_220.svg} |    0
 docs/reference/api/doxygen/inherit_graph_221.svg   |   22 +
 ...inherit_graph_202.svg => inherit_graph_222.svg} |    0
 docs/reference/api/doxygen/inherit_graph_39.svg    |   16 +-
 docs/reference/api/doxygen/inherit_graph_42.svg    |    8 +-
 docs/reference/api/doxygen/inherit_graph_43.svg    |    8 +-
 docs/reference/api/doxygen/inherit_graph_64.svg    |   12 +-
 docs/reference/api/doxygen/inherit_graph_65.svg    |   16 +-
 docs/reference/api/doxygen/inherit_graph_66.svg    |   16 +-
 docs/reference/api/doxygen/inherit_graph_67.svg    |   12 +-
 docs/reference/api/doxygen/inherit_graph_68.svg    |   15 +-
 docs/reference/api/doxygen/inherit_graph_69.svg    |   14 +-
 docs/reference/api/doxygen/inherit_graph_70.svg    |   12 +-
 docs/reference/api/doxygen/inherit_graph_71.svg    |   27 +-
 docs/reference/api/doxygen/inherit_graph_72.svg    |   30 +-
 docs/reference/api/doxygen/inherit_graph_73.svg    |   45 +-
 docs/reference/api/doxygen/inherit_graph_74.svg    |   40 +-
 docs/reference/api/doxygen/inherit_graph_75.svg    |   12 +-
 docs/reference/api/doxygen/inherit_graph_76.svg    |   42 +-
 docs/reference/api/doxygen/inherit_graph_77.svg    |   45 +-
 docs/reference/api/doxygen/inherit_graph_78.svg    |   12 +-
 docs/reference/api/doxygen/inherit_graph_79.svg    |   15 +-
 docs/reference/api/doxygen/inherit_graph_80.svg    |   27 +-
 docs/reference/api/doxygen/inherit_graph_81.svg    |   27 +-
 docs/reference/api/doxygen/inherit_graph_82.svg    |   27 +-
 docs/reference/api/doxygen/inherit_graph_83.svg    |   30 +-
 docs/reference/api/doxygen/inherit_graph_84.svg    |   12 +-
 docs/reference/api/doxygen/inherit_graph_85.svg    |   12 +-
 docs/reference/api/doxygen/inherit_graph_86.svg    |   15 +-
 docs/reference/api/doxygen/inherit_graph_87.svg    |   15 +-
 docs/reference/api/doxygen/inherit_graph_88.svg    |   12 +-
 docs/reference/api/doxygen/inherit_graph_89.svg    |   16 +-
 docs/reference/api/doxygen/inherit_graph_90.svg    |   17 +-
 docs/reference/api/doxygen/inherit_graph_91.svg    |   17 +-
 docs/reference/api/doxygen/inherit_graph_92.svg    |   17 +-
 docs/reference/api/doxygen/inherit_graph_93.svg    |   14 +-
 docs/reference/api/doxygen/inherit_graph_94.svg    |   14 +-
 docs/reference/api/doxygen/inherit_graph_95.svg    |   18 +-
 docs/reference/api/doxygen/inherit_graph_96.svg    |   14 +-
 docs/reference/api/doxygen/inherit_graph_97.svg    |   12 +-
 docs/reference/api/doxygen/inherit_graph_98.svg    |    4 +-
 docs/reference/api/doxygen/inherit_graph_99.svg    |   12 +-
 docs/reference/api/doxygen/inherits.html           |  310 +-
 docs/reference/api/doxygen/instruction_8h.html     |    8 +-
 .../api/doxygen/instruction_8h__dep__incl.svg      |  246 +-
 .../reference/api/doxygen/instruction_8h__incl.svg | 1030 +--
 .../api/doxygen/instruction_8h_source.html         |   39 +-
 docs/reference/api/doxygen/instrument_8h.html      |    4 +-
 .../api/doxygen/instrument_8h__dep__incl.svg       | 1346 +--
 docs/reference/api/doxygen/instrument_8h__incl.svg | 1058 +--
 .../api/doxygen/instrument_8h_source.html          |   10 +-
 docs/reference/api/doxygen/int__set_8h.html        |    4 +-
 .../api/doxygen/int__set_8h__dep__incl.svg         |  804 +-
 docs/reference/api/doxygen/int__set_8h__incl.svg   | 1444 +--
 docs/reference/api/doxygen/int__set_8h_source.html |   12 +-
 .../reference/api/doxygen/int__solver_8h__incl.svg |  134 +-
 .../api/doxygen/int__solver_8h_source.html         |   10 +-
 docs/reference/api/doxygen/integration_8h.html     |    3 +-
 .../reference/api/doxygen/integration_8h__incl.svg | 2047 ++---
 .../api/doxygen/integration_8h_source.html         |   47 +-
 docs/reference/api/doxygen/interpreter_8h.html     |    8 +-
 .../reference/api/doxygen/interpreter_8h__incl.svg | 1263 +--
 .../api/doxygen/interpreter_8h_source.html         |   20 +-
 docs/reference/api/doxygen/ir_2adt_8h.html         |    4 +-
 .../api/doxygen/ir_2adt_8h__dep__incl.svg          | 1628 ++--
 docs/reference/api/doxygen/ir_2adt_8h__incl.svg    | 1316 +--
 docs/reference/api/doxygen/ir_2adt_8h_source.html  |    8 +-
 docs/reference/api/doxygen/ir_2attrs_8h.html       |    4 +-
 .../api/doxygen/ir_2attrs_8h__dep__incl.svg        | 1258 +--
 docs/reference/api/doxygen/ir_2attrs_8h__incl.svg  | 1316 +--
 .../reference/api/doxygen/ir_2attrs_8h_source.html |   42 +-
 docs/reference/api/doxygen/ir_2expr_8h.html        |   12 +-
 .../api/doxygen/ir_2expr_8h__dep__incl.svg         | 1298 +--
 docs/reference/api/doxygen/ir_2expr_8h__incl.svg   | 1236 +--
 docs/reference/api/doxygen/ir_2expr_8h_source.html |  131 +-
 docs/reference/api/doxygen/ir_2function_8h.html    |    8 +-
 .../api/doxygen/ir_2function_8h__dep__incl.svg     | 1660 ++--
 .../api/doxygen/ir_2function_8h__incl.svg          | 1362 +--
 .../api/doxygen/ir_2function_8h_source.html        |   10 +-
 docs/reference/api/doxygen/ir_2module_8h.html      |   15 +-
 .../api/doxygen/ir_2module_8h__dep__incl.svg       | 1606 ++--
 docs/reference/api/doxygen/ir_2module_8h__incl.svg | 1480 ++--
 .../api/doxygen/ir_2module_8h_source.html          |   94 +-
 docs/reference/api/doxygen/ir_2op_8h.html          |    6 +-
 .../reference/api/doxygen/ir_2op_8h__dep__incl.svg |  924 +-
 docs/reference/api/doxygen/ir_2op_8h__incl.svg     | 1504 ++--
 docs/reference/api/doxygen/ir_2op_8h_source.html   |   14 +-
 docs/reference/api/doxygen/ir_2span_8h.html        |  123 +
 .../api/doxygen/ir_2span_8h__dep__incl.svg         | 1245 +++
 docs/reference/api/doxygen/ir_2span_8h__incl.svg   | 1156 +++
 docs/reference/api/doxygen/ir_2span_8h_source.html |  107 +
 docs/reference/api/doxygen/ir_2transform_8h.html   |    9 +-
 .../api/doxygen/ir_2transform_8h__dep__incl.svg    | 1364 +--
 .../api/doxygen/ir_2transform_8h__incl.svg         | 1532 ++--
 .../api/doxygen/ir_2transform_8h_source.html       |   27 +-
 docs/reference/api/doxygen/ir_2type_8h.html        |    6 +-
 .../api/doxygen/ir_2type_8h__dep__incl.svg         | 1627 ++--
 docs/reference/api/doxygen/ir_2type_8h__incl.svg   | 1168 +--
 docs/reference/api/doxygen/ir_2type_8h_source.html |   20 +-
 .../api/doxygen/iter__affine__map_8h.html          |   18 +-
 .../api/doxygen/iter__affine__map_8h__incl.svg     | 1882 ++--
 .../api/doxygen/iter__affine__map_8h_source.html   |   75 +-
 .../api/doxygen/local__response__norm_8h__incl.svg |  118 +-
 .../doxygen/local__response__norm_8h_source.html   |    2 +-
 docs/reference/api/doxygen/loop__state_8h.html     |    2 +-
 .../api/doxygen/loop__state_8h__dep__incl.svg      |    2 +-
 .../reference/api/doxygen/loop__state_8h__incl.svg | 1470 +--
 .../api/doxygen/loop__state_8h_source.html         |   12 +-
 docs/reference/api/doxygen/map_8h.html             |    2 +-
 docs/reference/api/doxygen/map_8h__dep__incl.svg   | 1430 +--
 docs/reference/api/doxygen/map_8h_source.html      |   12 +-
 docs/reference/api/doxygen/mapping_8h__incl.svg    |  118 +-
 docs/reference/api/doxygen/measure_8h.html         |    2 +-
 .../api/doxygen/measure_8h__dep__incl.svg          |    2 +-
 docs/reference/api/doxygen/measure_8h__incl.svg    | 1506 ++--
 docs/reference/api/doxygen/measure_8h_source.html  |   69 +-
 .../api/doxygen/measure__callback_8h.html          |  119 +
 .../doxygen/measure__callback_8h__dep__incl.svg    |   36 +
 .../api/doxygen/measure__callback_8h__incl.svg     | 1466 +++
 .../api/doxygen/measure__callback_8h_source.html   |  102 +
 docs/reference/api/doxygen/measure__record_8h.html |    2 +-
 .../api/doxygen/measure__record_8h__incl.svg       | 1496 ++--
 .../api/doxygen/measure__record_8h_source.html     |    6 +-
 .../api/doxygen/memory__manager_8h_source.html     |   12 +-
 docs/reference/api/doxygen/memory__pools_8h.html   |  120 +
 .../api/doxygen/memory__pools_8h__dep__incl.svg    |  100 +
 .../api/doxygen/memory__pools_8h__incl.svg         | 1595 ++++
 .../api/doxygen/memory__pools_8h_source.html       |  115 +
 docs/reference/api/doxygen/menudata.js             |    3 +
 .../doxygen/meta__schedule_2cost__model_8h.html    |  117 +
 .../meta__schedule_2cost__model_8h__dep__incl.svg  |   36 +
 .../meta__schedule_2cost__model_8h__incl.svg       | 1513 ++++
 .../meta__schedule_2cost__model_8h_source.html     |  110 +
 docs/reference/api/doxygen/metadata_8h.html        |  137 +
 docs/reference/api/doxygen/metadata_8h__incl.svg   |  147 +
 docs/reference/api/doxygen/metadata_8h_source.html |   99 +
 docs/reference/api/doxygen/metadata__base_8h.html  |  153 +
 .../api/doxygen/metadata__base_8h__incl.svg        | 1310 +++
 .../api/doxygen/metadata__base_8h_source.html      |  123 +
 docs/reference/api/doxygen/mutator_8h.html         |  116 +
 .../api/doxygen/mutator_8h__dep__incl.svg          |   74 +
 docs/reference/api/doxygen/mutator_8h__incl.svg    | 1552 ++++
 docs/reference/api/doxygen/mutator_8h_source.html  |  104 +
 docs/reference/api/doxygen/namespacemembers.html   |   15 +
 docs/reference/api/doxygen/namespacemembers_b.html |   13 +-
 docs/reference/api/doxygen/namespacemembers_c.html |   16 +-
 docs/reference/api/doxygen/namespacemembers_d.html |    2 +-
 docs/reference/api/doxygen/namespacemembers_e.html |   10 +-
 .../api/doxygen/namespacemembers_enum.html         |    3 +
 .../api/doxygen/namespacemembers_eval.html         |   18 +
 docs/reference/api/doxygen/namespacemembers_f.html |    5 +-
 .../api/doxygen/namespacemembers_func.html         |   15 +
 .../api/doxygen/namespacemembers_func_b.html       |   11 +-
 .../api/doxygen/namespacemembers_func_c.html       |   18 +-
 .../api/doxygen/namespacemembers_func_d.html       |    2 +-
 .../api/doxygen/namespacemembers_func_e.html       |   12 +-
 .../api/doxygen/namespacemembers_func_g.html       |   10 +-
 .../api/doxygen/namespacemembers_func_h.html       |    3 +
 .../api/doxygen/namespacemembers_func_i.html       |    9 +-
 .../api/doxygen/namespacemembers_func_m.html       |   18 +-
 .../api/doxygen/namespacemembers_func_n.html       |    5 +-
 .../api/doxygen/namespacemembers_func_o.html       |   22 +-
 .../api/doxygen/namespacemembers_func_p.html       |   12 +-
 .../api/doxygen/namespacemembers_func_r.html       |    8 +-
 .../api/doxygen/namespacemembers_func_s.html       |   13 +-
 .../api/doxygen/namespacemembers_func_u.html       |    5 +-
 .../api/doxygen/namespacemembers_func_w.html       |    2 +-
 docs/reference/api/doxygen/namespacemembers_g.html |   14 +-
 docs/reference/api/doxygen/namespacemembers_h.html |    3 +
 docs/reference/api/doxygen/namespacemembers_i.html |    9 +-
 docs/reference/api/doxygen/namespacemembers_k.html |   39 +-
 docs/reference/api/doxygen/namespacemembers_m.html |   44 +-
 docs/reference/api/doxygen/namespacemembers_n.html |    5 +-
 docs/reference/api/doxygen/namespacemembers_o.html |   26 +-
 docs/reference/api/doxygen/namespacemembers_p.html |   21 +-
 docs/reference/api/doxygen/namespacemembers_r.html |    8 +-
 docs/reference/api/doxygen/namespacemembers_s.html |   19 +-
 docs/reference/api/doxygen/namespacemembers_t.html |    3 -
 .../api/doxygen/namespacemembers_type.html         |    4 +
 docs/reference/api/doxygen/namespacemembers_u.html |    5 +-
 .../api/doxygen/namespacemembers_vars.html         |   67 +-
 docs/reference/api/doxygen/namespacemembers_w.html |    2 +-
 docs/reference/api/doxygen/namespaces.html         |   45 +-
 docs/reference/api/doxygen/namespacetvm.html       |  823 +-
 .../api/doxygen/namespacetvm_1_1arith.html         |   74 +-
 .../api/doxygen/namespacetvm_1_1attr.html          |   79 +-
 .../doxygen/namespacetvm_1_1meta__schedule.html    |   54 +
 .../api/doxygen/namespacetvm_1_1relay.html         |  237 +-
 .../namespacetvm_1_1relay_1_1transform.html        |   72 +-
 .../api/doxygen/namespacetvm_1_1runtime.html       |  199 +
 .../namespacetvm_1_1runtime_1_1metadata.html       |  146 +
 .../namespacetvm_1_1runtime_1_1profiling.html      |   70 +
 .../doxygen/namespacetvm_1_1runtime_1_1symbol.html |   19 -
 .../api/doxygen/namespacetvm_1_1runtime_1_1vm.html |    5 +-
 .../api/doxygen/namespacetvm_1_1support.html       |    3 +
 .../reference/api/doxygen/namespacetvm_1_1tir.html |   31 +-
 .../api/doxygen/namespacetvm_1_1tir_1_1attr.html   |  253 +-
 .../doxygen/namespacetvm_1_1tir_1_1builtin.html    |   45 +
 .../doxygen/namespacetvm_1_1tir_1_1transform.html  |  153 +
 .../api/doxygen/namespacetvm_1_1tir_1_1usmp.html   |  131 +-
 .../namespacetvm_1_1tir_1_1usmp_1_1algo.html       |  196 +
 .../namespacetvm_1_1tir_1_1usmp_1_1transform.html  |  164 +
 .../api/doxygen/namespacetvm_1_1topi.html          |  635 +-
 .../api/doxygen/namespacetvm_1_1transform.html     |    3 +
 docs/reference/api/doxygen/ndarray_8h.html         |    2 +-
 .../api/doxygen/ndarray_8h__dep__incl.svg          | 1532 ++--
 docs/reference/api/doxygen/ndarray_8h_source.html  |   28 +-
 docs/reference/api/doxygen/nn_2bnn_8h__incl.svg    |  110 +-
 docs/reference/api/doxygen/nn_2bnn_8h_source.html  |    8 +-
 docs/reference/api/doxygen/nn_2dense_8h__incl.svg  |  118 +-
 .../reference/api/doxygen/nn_2dense_8h_source.html |    6 +-
 .../reference/api/doxygen/nn_2pooling_8h__incl.svg |   78 +-
 .../api/doxygen/nn_2pooling_8h_source.html         |   14 +-
 .../reference/api/doxygen/nn_2softmax_8h__incl.svg |   82 +-
 .../api/doxygen/nn_2softmax_8h_source.html         |    6 +-
 docs/reference/api/doxygen/node_8h.html            |    2 +-
 docs/reference/api/doxygen/node_8h__dep__incl.svg  | 1447 ++-
 docs/reference/api/doxygen/node_8h__incl.svg       | 1064 +--
 docs/reference/api/doxygen/node_8h_source.html     |    2 +-
 docs/reference/api/doxygen/object_8h.html          |   12 +-
 .../reference/api/doxygen/object_8h__dep__incl.svg | 1735 ++--
 docs/reference/api/doxygen/object_8h_source.html   |  143 +-
 docs/reference/api/doxygen/on__device_8h.html      |    4 +-
 docs/reference/api/doxygen/on__device_8h__incl.svg | 1637 ++--
 .../api/doxygen/on__device_8h_source.html          |   20 +-
 docs/reference/api/doxygen/op__strategy_8h.html    |    2 +-
 .../api/doxygen/op__strategy_8h__incl.svg          | 1541 ++--
 .../api/doxygen/op__strategy_8h_source.html        |    8 +-
 docs/reference/api/doxygen/operation_8h__incl.svg  |  134 +-
 .../reference/api/doxygen/operation_8h_source.html |  117 +-
 docs/reference/api/doxygen/optional_8h.html        |    2 +-
 .../api/doxygen/optional_8h__dep__incl.svg         | 1598 ++--
 docs/reference/api/doxygen/optional_8h_source.html |   26 +-
 docs/reference/api/doxygen/packed__func_8h.html    |   31 +-
 .../api/doxygen/packed__func_8h__dep__incl.svg     | 1352 ++-
 .../api/doxygen/packed__func_8h_source.html        |  262 +-
 docs/reference/api/doxygen/pad__utils_8h__incl.svg |  134 +-
 docs/reference/api/doxygen/papi_8h.html            |    2 +-
 docs/reference/api/doxygen/papi_8h__incl.svg       |  666 +-
 docs/reference/api/doxygen/parser_8h.html          |    2 +-
 docs/reference/api/doxygen/parser_8h__incl.svg     | 1294 +--
 docs/reference/api/doxygen/parser_8h_source.html   |    2 +-
 docs/reference/api/doxygen/pattern_8h.html         |    2 +-
 docs/reference/api/doxygen/pattern_8h__incl.svg    | 1426 +--
 .../reference/api/doxygen/pattern__functor_8h.html |    2 +-
 .../api/doxygen/pattern__functor_8h__incl.svg      | 1375 +--
 .../api/doxygen/pattern__functor_8h_source.html    |   10 +-
 docs/reference/api/doxygen/postproc_8h.html        |  116 +
 .../api/doxygen/postproc_8h__dep__incl.svg         |   74 +
 docs/reference/api/doxygen/postproc_8h__incl.svg   | 1552 ++++
 docs/reference/api/doxygen/postproc_8h_source.html |  103 +
 docs/reference/api/doxygen/profiling_8h.html       |    5 +-
 docs/reference/api/doxygen/profiling_8h__incl.svg  |  640 +-
 .../reference/api/doxygen/profiling_8h_source.html |   20 +-
 docs/reference/api/doxygen/random_8h.html          |    2 +-
 docs/reference/api/doxygen/random_8h__incl.svg     | 1326 +--
 docs/reference/api/doxygen/random__engine_8h.html  |    5 +-
 .../api/doxygen/random__engine_8h__dep__incl.svg   |  266 +-
 .../api/doxygen/random__engine_8h__incl.svg        |   32 +-
 .../api/doxygen/random__engine_8h_source.html      |   25 +-
 .../api/doxygen/ravel__unravel_8h__incl.svg        |  118 +-
 .../api/doxygen/ravel__unravel_8h_source.html      |    2 +-
 docs/reference/api/doxygen/reduce_8h.html          |    2 +-
 docs/reference/api/doxygen/reduce_8h__incl.svg     | 1336 +--
 docs/reference/api/doxygen/reduction_8h__incl.svg  |   88 +-
 .../reference/api/doxygen/reduction_8h_source.html |    8 +-
 docs/reference/api/doxygen/reflection_8h.html      |    8 +-
 .../api/doxygen/reflection_8h__dep__incl.svg       | 1390 +--
 docs/reference/api/doxygen/reflection_8h__incl.svg | 1020 +--
 .../api/doxygen/reflection_8h_source.html          |   14 +-
 docs/reference/api/doxygen/registry_8h.html        |    5 +-
 .../api/doxygen/registry_8h__dep__incl.svg         | 1569 ++--
 docs/reference/api/doxygen/registry_8h__incl.svg   |  570 +-
 docs/reference/api/doxygen/registry_8h_source.html |   25 +-
 docs/reference/api/doxygen/relay_2adt_8h.html      |    2 +-
 docs/reference/api/doxygen/relay_2adt_8h__incl.svg | 1690 ++--
 .../api/doxygen/relay_2adt_8h_source.html          |   28 +-
 docs/reference/api/doxygen/relay_2analysis_8h.html |    2 +-
 .../api/doxygen/relay_2analysis_8h__incl.svg       | 1383 +--
 .../api/doxygen/relay_2attrs_2debug_8h.html        |  112 +
 .../api/doxygen/relay_2attrs_2debug_8h__incl.svg   | 1400 +++
 .../api/doxygen/relay_2attrs_2debug_8h_source.html |   86 +
 .../api/doxygen/relay_2attrs_2memory_8h.html       |    4 +-
 .../api/doxygen/relay_2attrs_2memory_8h__incl.svg  | 1733 ++--
 .../doxygen/relay_2attrs_2memory_8h_source.html    |   12 +-
 .../reference/api/doxygen/relay_2attrs_2nn_8h.html |    2 +-
 .../api/doxygen/relay_2attrs_2nn_8h__incl.svg      | 1487 ++--
 .../api/doxygen/relay_2attrs_2nn_8h_source.html    |   10 +-
 .../api/doxygen/relay_2attrs_2transform_8h.html    |    5 +-
 .../doxygen/relay_2attrs_2transform_8h__incl.svg   | 1683 ++--
 .../doxygen/relay_2attrs_2transform_8h_source.html |  301 +-
 .../reference/api/doxygen/relay_2attrs_2vm_8h.html |    2 +-
 .../api/doxygen/relay_2attrs_2vm_8h__incl.svg      | 1324 +--
 docs/reference/api/doxygen/relay_2base_8h.html     |    4 +-
 .../reference/api/doxygen/relay_2base_8h__incl.svg | 1438 +--
 .../api/doxygen/relay_2base_8h_source.html         |   20 +-
 docs/reference/api/doxygen/relay_2expr_8h.html     |   58 +-
 .../reference/api/doxygen/relay_2expr_8h__incl.svg | 1703 ++--
 .../api/doxygen/relay_2expr_8h_source.html         |  177 +-
 .../api/doxygen/relay_2expr__functor_8h.html       |    2 +-
 .../api/doxygen/relay_2expr__functor_8h__incl.svg  | 1375 +--
 .../doxygen/relay_2expr__functor_8h_source.html    |   37 +-
 docs/reference/api/doxygen/relay_2feature_8h.html  |    2 +-
 .../api/doxygen/relay_2feature_8h__incl.svg        | 1241 +--
 .../api/doxygen/relay_2feature_8h_source.html      |    6 +-
 docs/reference/api/doxygen/relay_2function_8h.html |    8 +-
 .../api/doxygen/relay_2function_8h__incl.svg       | 1361 +--
 .../api/doxygen/relay_2function_8h_source.html     |   41 +-
 docs/reference/api/doxygen/relay_2op_8h.html       |    2 +-
 docs/reference/api/doxygen/relay_2op_8h__incl.svg  | 1451 +--
 .../api/doxygen/relay_2op__attr__types_8h.html     |    2 +-
 .../doxygen/relay_2op__attr__types_8h__incl.svg    | 1465 +--
 .../doxygen/relay_2op__attr__types_8h_source.html  |    6 +-
 .../api/doxygen/relay_2qnn_2attrs_8h.html          |    2 +-
 .../api/doxygen/relay_2qnn_2attrs_8h__incl.svg     | 1336 +--
 .../api/doxygen/relay_2qnn_2attrs_8h_source.html   |   27 +-
 .../api/doxygen/relay_2qnn_2transform_8h__incl.svg |  377 +-
 .../reference/api/doxygen/relay_2transform_8h.html |   21 +-
 .../api/doxygen/relay_2transform_8h__incl.svg      |  565 +-
 .../api/doxygen/relay_2transform_8h_source.html    |   34 +-
 docs/reference/api/doxygen/relay_2type_8h.html     |    2 +-
 .../reference/api/doxygen/relay_2type_8h__incl.svg | 1652 ++--
 docs/reference/api/doxygen/reorg_8h__incl.svg      |   88 +-
 docs/reference/api/doxygen/reorg_8h_source.html    |    2 +-
 docs/reference/api/doxygen/repr__printer_8h.html   |    2 +-
 .../api/doxygen/repr__printer_8h__dep__incl.svg    | 1432 ++-
 .../api/doxygen/repr__printer_8h_source.html       |    4 +-
 docs/reference/api/doxygen/rocblas_8h__incl.svg    |  118 +-
 .../api/doxygen/rocm_2dense_8h_source.html         |    2 +-
 docs/reference/api/doxygen/runner_8h.html          |    4 +-
 .../reference/api/doxygen/runner_8h__dep__incl.svg |  138 +-
 docs/reference/api/doxygen/runner_8h__incl.svg     | 1498 ++--
 docs/reference/api/doxygen/runner_8h_source.html   |   10 +-
 .../api/doxygen/runtime_2container_2adt_8h.html    |    2 +-
 .../runtime_2container_2adt_8h__dep__incl.svg      | 1584 ++--
 .../doxygen/runtime_2container_2adt_8h_source.html |    8 +-
 .../api/doxygen/runtime_2container_2base_8h.html   |    2 +-
 .../runtime_2container_2base_8h__dep__incl.svg     | 1702 ++--
 .../runtime_2container_2base_8h_source.html        |   12 +-
 docs/reference/api/doxygen/runtime_2debug_8h.html  |  118 +
 .../api/doxygen/runtime_2debug_8h__incl.svg        |  646 ++
 .../api/doxygen/runtime_2debug_8h_source.html      |   84 +
 .../api/doxygen/runtime_2memory_8h__dep__incl.svg  |  642 +-
 .../api/doxygen/runtime_2memory_8h_source.html     |    8 +-
 docs/reference/api/doxygen/runtime_2module_8h.html |    5 +-
 .../api/doxygen/runtime_2module_8h__dep__incl.svg  | 1274 ++-
 .../api/doxygen/runtime_2module_8h_source.html     |   43 +-
 docs/reference/api/doxygen/runtime_2vm_2vm_8h.html |    2 +-
 .../api/doxygen/runtime_2vm_2vm_8h__incl.svg       |  740 +-
 .../api/doxygen/runtime_2vm_2vm_8h_source.html     |   64 +-
 docs/reference/api/doxygen/runtime_8h.html         |    6 +-
 docs/reference/api/doxygen/runtime_8h__incl.svg    | 1540 ++--
 docs/reference/api/doxygen/runtime_8h_source.html  |   20 +-
 docs/reference/api/doxygen/schedule__pass_8h.html  |    2 +-
 .../api/doxygen/schedule__pass_8h__incl.svg        | 1546 ++--
 docs/reference/api/doxygen/schedule__rule_8h.html  |  116 +
 .../api/doxygen/schedule__rule_8h__dep__incl.svg   |   74 +
 .../api/doxygen/schedule__rule_8h__incl.svg        | 1552 ++++
 .../api/doxygen/schedule__rule_8h_source.html      |  107 +
 docs/reference/api/doxygen/se__scope_8h.html       |  129 -
 .../api/doxygen/se__scope_8h__dep__incl.svg        |  482 -
 docs/reference/api/doxygen/se__scope_8h__incl.svg  | 1595 ----
 .../reference/api/doxygen/se__scope_8h_source.html |  112 -
 docs/reference/api/doxygen/search/all_1.js         |    8 +-
 docs/reference/api/doxygen/search/all_10.js        |   27 +-
 docs/reference/api/doxygen/search/all_11.js        |   61 +-
 docs/reference/api/doxygen/search/all_12.js        |    4 +-
 docs/reference/api/doxygen/search/all_13.js        |   30 +-
 docs/reference/api/doxygen/search/all_14.js        |   61 +-
 docs/reference/api/doxygen/search/all_15.js        |   61 +-
 docs/reference/api/doxygen/search/all_16.js        |    7 +-
 docs/reference/api/doxygen/search/all_17.js        |   21 +-
 docs/reference/api/doxygen/search/all_18.js        |    7 +-
 docs/reference/api/doxygen/search/all_1b.js        |    7 +-
 docs/reference/api/doxygen/search/all_2.js         |   35 +-
 docs/reference/api/doxygen/search/all_3.js         |   17 +-
 docs/reference/api/doxygen/search/all_4.js         |   29 +-
 docs/reference/api/doxygen/search/all_5.js         |   24 +-
 docs/reference/api/doxygen/search/all_6.js         |   19 +-
 docs/reference/api/doxygen/search/all_7.js         |   47 +-
 docs/reference/api/doxygen/search/all_8.js         |    9 +-
 docs/reference/api/doxygen/search/all_9.js         |    9 +-
 docs/reference/api/doxygen/search/all_a.js         |   29 +-
 docs/reference/api/doxygen/search/all_b.js         |    2 +-
 docs/reference/api/doxygen/search/all_c.js         |   18 +-
 docs/reference/api/doxygen/search/all_d.js         |   14 +-
 docs/reference/api/doxygen/search/all_e.js         |   54 +-
 docs/reference/api/doxygen/search/all_f.js         |   11 +-
 docs/reference/api/doxygen/search/classes_0.js     |   14 +-
 docs/reference/api/doxygen/search/classes_10.js    |   14 +-
 docs/reference/api/doxygen/search/classes_11.js    |   19 +-
 docs/reference/api/doxygen/search/classes_13.js    |    5 +-
 docs/reference/api/doxygen/search/classes_14.js    |    2 +
 docs/reference/api/doxygen/search/classes_2.js     |    4 +-
 docs/reference/api/doxygen/search/classes_4.js     |    3 +-
 docs/reference/api/doxygen/search/classes_5.js     |    2 +
 docs/reference/api/doxygen/search/classes_6.js     |    1 +
 docs/reference/api/doxygen/search/classes_7.js     |    2 +-
 docs/reference/api/doxygen/search/classes_8.js     |    1 +
 docs/reference/api/doxygen/search/classes_9.js     |    6 +-
 docs/reference/api/doxygen/search/classes_a.js     |   14 +-
 docs/reference/api/doxygen/search/classes_b.js     |    1 +
 docs/reference/api/doxygen/search/classes_c.js     |    6 +-
 docs/reference/api/doxygen/search/classes_d.js     |   14 +-
 docs/reference/api/doxygen/search/classes_f.js     |    2 +-
 docs/reference/api/doxygen/search/defines_8.js     |    1 +
 docs/reference/api/doxygen/search/enums_8.js       |    3 +-
 docs/reference/api/doxygen/search/enumvalues_5.js  |    9 +-
 docs/reference/api/doxygen/search/files_0.js       |    3 +-
 docs/reference/api/doxygen/search/files_11.js      |    1 +
 docs/reference/api/doxygen/search/files_2.js       |    2 +-
 docs/reference/api/doxygen/search/files_3.js       |    2 +-
 docs/reference/api/doxygen/search/files_5.js       |    1 +
 docs/reference/api/doxygen/search/files_6.js       |    3 +-
 docs/reference/api/doxygen/search/files_9.js       |    7 +-
 docs/reference/api/doxygen/search/files_c.js       |    1 +
 docs/reference/api/doxygen/search/files_e.js       |    4 +-
 docs/reference/api/doxygen/search/files_f.js       |    2 +-
 docs/reference/api/doxygen/search/functions_1.js   |   15 +-
 docs/reference/api/doxygen/search/functions_10.js  |   31 +-
 docs/reference/api/doxygen/search/functions_11.js  |    4 +-
 docs/reference/api/doxygen/search/functions_12.js  |   24 +-
 docs/reference/api/doxygen/search/functions_13.js  |   24 +-
 docs/reference/api/doxygen/search/functions_14.js  |   24 +-
 docs/reference/api/doxygen/search/functions_15.js  |    7 +-
 docs/reference/api/doxygen/search/functions_16.js  |   11 +-
 docs/reference/api/doxygen/search/functions_17.js  |    3 +-
 docs/reference/api/doxygen/search/functions_19.js  |    7 +-
 docs/reference/api/doxygen/search/functions_2.js   |    9 +-
 docs/reference/api/doxygen/search/functions_3.js   |   15 +-
 docs/reference/api/doxygen/search/functions_4.js   |    8 +-
 docs/reference/api/doxygen/search/functions_5.js   |   12 +-
 docs/reference/api/doxygen/search/functions_6.js   |   16 +-
 docs/reference/api/doxygen/search/functions_7.js   |    8 +-
 docs/reference/api/doxygen/search/functions_8.js   |    5 +
 docs/reference/api/doxygen/search/functions_9.js   |   18 +-
 docs/reference/api/doxygen/search/functions_a.js   |    2 +-
 docs/reference/api/doxygen/search/functions_b.js   |    1 +
 docs/reference/api/doxygen/search/functions_c.js   |    8 +-
 docs/reference/api/doxygen/search/functions_d.js   |   19 +-
 docs/reference/api/doxygen/search/functions_e.js   |    3 +-
 docs/reference/api/doxygen/search/functions_f.js   |   17 +-
 docs/reference/api/doxygen/search/namespaces_2.js  |    4 +-
 docs/reference/api/doxygen/search/related_c.js     |    2 -
 docs/reference/api/doxygen/search/related_e.js     |    7 +-
 docs/reference/api/doxygen/search/related_f.html   |   26 +
 .../doxygen/search/{related_e.js => related_f.js}  |    0
 docs/reference/api/doxygen/search/searchdata.js    |    2 +-
 docs/reference/api/doxygen/search/typedefs_2.js    |    4 +-
 docs/reference/api/doxygen/search/typedefs_5.js    |   16 +-
 docs/reference/api/doxygen/search/typedefs_7.js    |    2 +-
 docs/reference/api/doxygen/search/typedefs_b.js    |    2 +-
 docs/reference/api/doxygen/search/typedefs_e.js    |    2 +-
 docs/reference/api/doxygen/search/typedefs_f.js    |    2 +-
 docs/reference/api/doxygen/search/variables_0.js   |    8 +-
 docs/reference/api/doxygen/search/variables_1.js   |    5 +-
 docs/reference/api/doxygen/search/variables_10.js  |    2 +
 docs/reference/api/doxygen/search/variables_11.js  |   18 +-
 docs/reference/api/doxygen/search/variables_12.js  |    8 +-
 docs/reference/api/doxygen/search/variables_14.js  |    6 +-
 docs/reference/api/doxygen/search/variables_15.js  |    3 +
 docs/reference/api/doxygen/search/variables_2.js   |    7 +-
 docs/reference/api/doxygen/search/variables_3.js   |    4 +
 docs/reference/api/doxygen/search/variables_4.js   |   14 +-
 docs/reference/api/doxygen/search/variables_5.js   |    5 +-
 docs/reference/api/doxygen/search/variables_6.js   |   12 +-
 docs/reference/api/doxygen/search/variables_8.js   |    4 +-
 docs/reference/api/doxygen/search/variables_9.js   |    9 +-
 docs/reference/api/doxygen/search/variables_a.js   |   11 +-
 docs/reference/api/doxygen/search/variables_c.js   |   19 +-
 docs/reference/api/doxygen/search/variables_d.js   |    7 +-
 docs/reference/api/doxygen/search/variables_e.js   |    4 +-
 docs/reference/api/doxygen/search/variables_f.js   |   17 +-
 docs/reference/api/doxygen/search__policy_8h.html  |    2 +-
 .../api/doxygen/search__policy_8h__incl.svg        | 1462 +--
 .../api/doxygen/search__policy_8h_source.html      |   10 +-
 .../reference/api/doxygen/search__strategy_8h.html |    8 +-
 .../api/doxygen/search__strategy_8h__dep__incl.svg |  118 +
 .../api/doxygen/search__strategy_8h__incl.svg      | 1602 ++--
 .../api/doxygen/search__strategy_8h_source.html    |   54 +-
 .../api/doxygen/search__task_8h__dep__incl.svg     |    2 +-
 .../api/doxygen/search__task_8h__incl.svg          |  238 +-
 .../api/doxygen/search__task_8h_source.html        |    8 +-
 docs/reference/api/doxygen/serializer_8h.html      |    2 +-
 .../api/doxygen/serializer_8h__dep__incl.svg       | 1512 ++--
 .../api/doxygen/serializer_8h_source.html          |    2 +-
 docs/reference/api/doxygen/shape__tuple_8h.html    |    2 +-
 .../api/doxygen/shape__tuple_8h__dep__incl.svg     | 1475 ++-
 .../api/doxygen/shape__tuple_8h_source.html        |    8 +-
 docs/reference/api/doxygen/source__map_8h.html     |    6 +-
 .../api/doxygen/source__map_8h__dep__incl.svg      | 1614 ++--
 .../reference/api/doxygen/source__map_8h__incl.svg | 1204 +--
 .../api/doxygen/source__map_8h_source.html         |   10 +-
 .../reference/api/doxygen/space__generator_8h.html |    4 +-
 .../api/doxygen/space__generator_8h__dep__incl.svg |   78 +-
 .../api/doxygen/space__generator_8h__incl.svg      | 1458 +--
 .../api/doxygen/space__generator_8h_source.html    |   18 +-
 docs/reference/api/doxygen/span_8h.html            |  123 -
 docs/reference/api/doxygen/span_8h__dep__incl.svg  | 1257 ---
 docs/reference/api/doxygen/span_8h__incl.svg       | 1150 ---
 docs/reference/api/doxygen/span_8h_source.html     |  107 -
 docs/reference/api/doxygen/state_8h.html           |    4 +-
 docs/reference/api/doxygen/state_8h__dep__incl.svg |  212 +-
 docs/reference/api/doxygen/state_8h__incl.svg      | 1386 +--
 docs/reference/api/doxygen/state_8h_source.html    |   10 +-
 docs/reference/api/doxygen/stmt_8h.html            |   51 +-
 docs/reference/api/doxygen/stmt_8h__dep__incl.svg  | 1210 ++-
 docs/reference/api/doxygen/stmt_8h__incl.svg       | 1448 +--
 docs/reference/api/doxygen/stmt_8h_source.html     |  322 +-
 docs/reference/api/doxygen/stmt__functor_8h.html   |    8 +-
 .../api/doxygen/stmt__functor_8h__dep__incl.svg    |   36 +
 .../api/doxygen/stmt__functor_8h__incl.svg         | 1468 +--
 .../api/doxygen/stmt__functor_8h_source.html       |   78 +-
 .../api/doxygen/strided__slice_8h__incl.svg        |  138 +-
 .../api/doxygen/strided__slice_8h_source.html      |    4 +-
 docs/reference/api/doxygen/string_8h.html          |    2 +-
 .../reference/api/doxygen/string_8h__dep__incl.svg | 1660 ++--
 docs/reference/api/doxygen/string_8h_source.html   |   16 +-
 .../api/doxygen/structTVMMetadata-members.html     |   82 +
 docs/reference/api/doxygen/structTVMMetadata.html  |  211 +
 .../api/doxygen/structTVMMetadata__coll__graph.svg |   50 +
 .../api/doxygen/structTVMTensorInfo-members.html   |   80 +
 .../reference/api/doxygen/structTVMTensorInfo.html |  173 +
 .../doxygen/structTVMTensorInfo__coll__graph.svg   |   26 +
 ...structtvm_1_1NDArrayContainerTrait-members.html |   83 +
 .../structtvm_1_1NDArrayContainerTrait.html        |  207 +
 ...cttvm_1_1NDArrayContainerTrait__coll__graph.svg |   24 +
 .../doxygen/structtvm_1_1PoolInfoNode-members.html |  125 +
 .../api/doxygen/structtvm_1_1PoolInfoNode.html     |  537 ++
 .../structtvm_1_1PoolInfoNode__coll__graph.svg     |  362 +
 .../structtvm_1_1PoolInfoNode__inherit__graph.svg  |   88 +
 ...ucttvm_1_1WorkspaceMemoryPoolsNode-members.html |  116 +
 .../structtvm_1_1WorkspaceMemoryPoolsNode.html     |  358 +
 ...vm_1_1WorkspaceMemoryPoolsNode__coll__graph.svg |  178 +
 ...1_1WorkspaceMemoryPoolsNode__inherit__graph.svg |   77 +
 ..._1relay_1_1AdaptivePool1DAttrs__coll__graph.svg |    4 +-
 ..._1relay_1_1AdaptivePool2DAttrs__coll__graph.svg |    4 +-
 ..._1relay_1_1AdaptivePool3DAttrs__coll__graph.svg |    4 +-
 ...vm_1_1relay_1_1AffineGridAttrs__coll__graph.svg |    4 +-
 ...ttvm_1_1relay_1_1AllocStorageAttrs-members.html |   26 +-
 .../structtvm_1_1relay_1_1AllocStorageAttrs.html   |   10 +-
 ..._1_1relay_1_1AllocStorageAttrs__coll__graph.svg |   18 +-
 ...1relay_1_1AllocStorageAttrs__inherit__graph.svg |    2 +-
 ...m_1_1relay_1_1AllocTensorAttrs__coll__graph.svg |    4 +-
 ...ucttvm_1_1relay_1_1ArangeAttrs__coll__graph.svg |    4 +-
 ...tvm_1_1relay_1_1ArgReduceAttrs__coll__graph.svg |    4 +-
 ...tvm_1_1relay_1_1AvgPool1DAttrs__coll__graph.svg |    4 +-
 ...tvm_1_1relay_1_1AvgPool2DAttrs__coll__graph.svg |    4 +-
 ...tvm_1_1relay_1_1AvgPool3DAttrs__coll__graph.svg |    4 +-
 ...m_1_1relay_1_1BatchMatmulAttrs__coll__graph.svg |    4 +-
 ..._1relay_1_1BatchToSpaceNDAttrs__coll__graph.svg |    4 +-
 ..._1_1relay_1_1BinaryConv2DAttrs__coll__graph.svg |    4 +-
 ...m_1_1relay_1_1BinaryDenseAttrs__coll__graph.svg |    4 +-
 ...m_1_1relay_1_1CallLoweredAttrs__coll__graph.svg |    4 +-
 ..._1relay_1_1ConstructorValueObj__coll__graph.svg |    4 +-
 .../structtvm_1_1relay_1_1Conv1DAttrs-members.html |    6 +-
 .../doxygen/structtvm_1_1relay_1_1Conv1DAttrs.html |   32 +-
 ...ucttvm_1_1relay_1_1Conv1DAttrs__coll__graph.svg |  453 +-
 ...1relay_1_1Conv1DTransposeAttrs__coll__graph.svg |    4 +-
 ...ucttvm_1_1relay_1_1Conv2DAttrs__coll__graph.svg |    4 +-
 ...1relay_1_1Conv2DTransposeAttrs__coll__graph.svg |    4 +-
 ..._1relay_1_1Conv2DWinogradAttrs__coll__graph.svg |    4 +-
 ...ucttvm_1_1relay_1_1Conv3DAttrs__coll__graph.svg |    4 +-
 ...1relay_1_1Conv3DTransposeAttrs__coll__graph.svg |    4 +-
 ..._1relay_1_1Conv3DWinogradAttrs__coll__graph.svg |    4 +-
 ...m_1_1relay_1_1CorrelationAttrs__coll__graph.svg |    4 +-
 ...1_1relay_1_1CropAndResizeAttrs__coll__graph.svg |    4 +-
 .../doxygen/structtvm_1_1relay_1_1DebugAttrs.html  |    4 +-
 ...ructtvm_1_1relay_1_1DebugAttrs__coll__graph.svg |    4 +-
 ...relay_1_1DeformableConv2DAttrs__coll__graph.svg |    4 +-
 ...ructtvm_1_1relay_1_1DenseAttrs__coll__graph.svg |    4 +-
 ...tvm_1_1relay_1_1DensePackAttrs__coll__graph.svg |    4 +-
 ...ucttvm_1_1relay_1_1DeviceCopyAttrs-members.html |    4 +-
 .../structtvm_1_1relay_1_1DeviceCopyAttrs.html     |   20 +-
 ...vm_1_1relay_1_1DeviceCopyAttrs__coll__graph.svg |   14 +-
 ...1_1relay_1_1DeviceCopyAttrs__inherit__graph.svg |    4 +-
 ...ucttvm_1_1relay_1_1DilateAttrs__coll__graph.svg |    4 +-
 ...vm_1_1relay_1_1Dilation2DAttrs__coll__graph.svg |    4 +-
 ...ucttvm_1_1relay_1_1EinsumAttrs__coll__graph.svg |    4 +-
 ...ucttvm_1_1relay_1_1GatherAttrs__coll__graph.svg |    4 +-
 ...ttvm_1_1relay_1_1GatherNDAttrs__coll__graph.svg |    8 +-
 ..._1relay_1_1GetValidCountsAttrs__coll__graph.svg |    8 +-
 ..._1_1relay_1_1GlobalPool2DAttrs__coll__graph.svg |    4 +-
 ...ucttvm_1_1relay_1_1GridSampleAttrs-members.html |   39 +-
 .../structtvm_1_1relay_1_1GridSampleAttrs.html     |   20 +-
 ...vm_1_1relay_1_1GridSampleAttrs__coll__graph.svg |  259 +-
 ...1_1relay_1_1GridSampleAttrs__inherit__graph.svg |  157 +-
 ...ucttvm_1_1relay_1_1InitOpAttrs__coll__graph.svg |    8 +-
 ...m_1_1relay_1_1L2NormalizeAttrs__coll__graph.svg |    4 +-
 ...ucttvm_1_1relay_1_1MatmulAttrs__coll__graph.svg |    4 +-
 ...tvm_1_1relay_1_1MaxPool1DAttrs__coll__graph.svg |    4 +-
 ...tvm_1_1relay_1_1MaxPool2DAttrs__coll__graph.svg |    4 +-
 ...tvm_1_1relay_1_1MaxPool3DAttrs__coll__graph.svg |    4 +-
 ...tvm_1_1relay_1_1MirrorPadAttrs__coll__graph.svg |    4 +-
 ...1_1relay_1_1MultiBoxPriorAttrs__coll__graph.svg |    4 +-
 ...y_1_1MultiBoxTransformLocAttrs__coll__graph.svg |    4 +-
 ...ucttvm_1_1relay_1_1NormalAttrs__coll__graph.svg |    4 +-
 ...tructtvm_1_1relay_1_1OnDeviceAttrs-members.html |   26 +-
 .../structtvm_1_1relay_1_1OnDeviceAttrs.html       |   26 +-
 ...ttvm_1_1relay_1_1OnDeviceAttrs__coll__graph.svg |   12 +-
 ...m_1_1relay_1_1OnDeviceAttrs__inherit__graph.svg |    2 +-
 .../structtvm_1_1relay_1_1PadAttrs-members.html    |    2 +-
 .../doxygen/structtvm_1_1relay_1_1PadAttrs.html    |   12 +-
 ...structtvm_1_1relay_1_1PadAttrs__coll__graph.svg |  332 +-
 ...ttvm_1_1relay_1_1ProposalAttrs__coll__graph.svg |    4 +-
 ...ttvm_1_1relay_1_1ROIAlignAttrs__coll__graph.svg |    4 +-
 ...cttvm_1_1relay_1_1ROIPoolAttrs__coll__graph.svg |    4 +-
 ...ucttvm_1_1relay_1_1ReduceAttrs__coll__graph.svg |    4 +-
 ...ucttvm_1_1relay_1_1RefValueObj__coll__graph.svg |    4 +-
 ...ucttvm_1_1relay_1_1RepeatAttrs__coll__graph.svg |    4 +-
 ...cttvm_1_1relay_1_1ReshapeAttrs__coll__graph.svg |    4 +-
 ...m_1_1relay_1_1ReshapeLikeAttrs__coll__graph.svg |    4 +-
 ...1_1relay_1_1ReshapeTensorAttrs__coll__graph.svg |    4 +-
 ...ttvm_1_1relay_1_1Resize1DAttrs__coll__graph.svg |    4 +-
 ...ttvm_1_1relay_1_1Resize2DAttrs__coll__graph.svg |    4 +-
 ...ttvm_1_1relay_1_1Resize3DAttrs__coll__graph.svg |    4 +-
 ...cttvm_1_1relay_1_1ReverseAttrs__coll__graph.svg |    4 +-
 ...1relay_1_1ReverseSequenceAttrs__coll__graph.svg |    4 +-
 ...ucttvm_1_1relay_1_1ScanopAttrs__coll__graph.svg |    4 +-
 ...vm_1_1relay_1_1ScatterAddAttrs__coll__graph.svg |    4 +-
 ...cttvm_1_1relay_1_1ScatterAttrs__coll__graph.svg |    4 +-
 ...tvm_1_1relay_1_1ScatterNDAttrs__coll__graph.svg |    4 +-
 ...tvm_1_1relay_1_1ShapeFuncAttrs__coll__graph.svg |    4 +-
 ...tvm_1_1relay_1_1SliceLikeAttrs__coll__graph.svg |    4 +-
 ...tvm_1_1relay_1_1SlidingWindowAttrs-members.html |  127 +
 .../structtvm_1_1relay_1_1SlidingWindowAttrs.html  |  322 +
 ...1_1relay_1_1SlidingWindowAttrs__coll__graph.svg |  232 +
 ...relay_1_1SlidingWindowAttrs__inherit__graph.svg |  131 +
 ..._1relay_1_1SpaceToBatchNDAttrs__coll__graph.svg |    4 +-
 ..._1_1relay_1_1SparseConv2DAttrs__coll__graph.svg |    4 +-
 ...1_1relay_1_1SparseToDenseAttrs__coll__graph.svg |    4 +-
 ...ructtvm_1_1relay_1_1SplitAttrs__coll__graph.svg |    4 +-
 ...cttvm_1_1relay_1_1SqueezeAttrs__coll__graph.svg |    4 +-
 ...ructtvm_1_1relay_1_1StackAttrs__coll__graph.svg |    4 +-
 ...ttvm_1_1relay_1_1StridedSliceAttrs-members.html |    2 +-
 .../structtvm_1_1relay_1_1StridedSliceAttrs.html   |   12 +-
 ..._1_1relay_1_1StridedSliceAttrs__coll__graph.svg |  344 +-
 .../structtvm_1_1relay_1_1TakeAttrs-members.html   |    2 +-
 .../doxygen/structtvm_1_1relay_1_1TakeAttrs.html   |   12 +-
 ...tructtvm_1_1relay_1_1TakeAttrs__coll__graph.svg |  276 +-
 ...relay_1_1ThreefryGenerateAttrs__coll__graph.svg |    4 +-
 ...tructtvm_1_1relay_1_1TileAttrs__coll__graph.svg |    4 +-
 ...tructtvm_1_1relay_1_1TopKAttrs__coll__graph.svg |    8 +-
 ...tvm_1_1relay_1_1TransposeAttrs__coll__graph.svg |    4 +-
 ...cttvm_1_1relay_1_1UniformAttrs__coll__graph.svg |    4 +-
 ...vm_1_1relay_1_1UpSamplingAttrs__coll__graph.svg |    4 +-
 ...ttvm_1_1relay_1_1VarianceAttrs__coll__graph.svg |    4 +-
 ...tvm_1_1relay_1_1YoloReorgAttrs__coll__graph.svg |    4 +-
 ...1_1relay_1_1qnn_1_1RequantizeAttrs-members.html |   75 +-
 ...ructtvm_1_1relay_1_1qnn_1_1RequantizeAttrs.html |   20 +-
 ...elay_1_1qnn_1_1RequantizeAttrs__coll__graph.svg |  213 +-
 ...y_1_1qnn_1_1RequantizeAttrs__inherit__graph.svg |  159 +-
 .../structtvm_1_1relay_1_1v__info__coll__graph.svg |    4 +-
 ...time_1_1PackedFuncObj_1_1Extractor-members.html |   81 +
 ...m_1_1runtime_1_1PackedFuncObj_1_1Extractor.html |  161 +
 ..._1_1PackedFuncObj_1_1Extractor__coll__graph.svg |   24 +
 .../structtvm_1_1runtime_1_1SignaturePrinter.html  |   88 +
 ...1_1runtime_1_1SignaturePrinter__coll__graph.svg |   24 +
 .../structtvm_1_1runtime_1_1TypeIndex-members.html |    7 +-
 .../doxygen/structtvm_1_1runtime_1_1TypeIndex.html |    7 +-
 ...time_1_1profiling_1_1CallFrame__coll__graph.svg |    4 +-
 ...vm_1_1runtime_1_1vm_1_1Instruction-members.html |   73 +-
 .../structtvm_1_1runtime_1_1vm_1_1Instruction.html |   28 +
 ..._1runtime_1_1vm_1_1Instruction__coll__graph.svg |    2 +-
 ...vm_1_1runtime_1_1vm_1_1VMFrame__coll__graph.svg |    2 +-
 .../structtvm_1_1tir_1_1BlockInfo__coll__graph.svg |    4 +-
 .../structtvm_1_1tir_1_1LENode__coll__graph.svg    |    4 +-
 ...r_1_1usmp_1_1AllocatedPoolInfoNode-members.html |    2 +-
 ...vm_1_1tir_1_1usmp_1_1AllocatedPoolInfoNode.html |   28 +-
 ...1usmp_1_1AllocatedPoolInfoNode__coll__graph.svg |  376 +-
 ...mp_1_1AllocatedPoolInfoNode__inherit__graph.svg |    2 +-
 ...usmp_1_1BufferInfoAnalysisNode__coll__graph.svg |    4 +-
 ...structtvm_1_1tir_1_1usmp_1_1BufferInfoNode.html |    6 +-
 ...1tir_1_1usmp_1_1BufferInfoNode__coll__graph.svg |  404 +-
 ...cttvm_1_1tir_1_1usmp_1_1PoolAllocationNode.html |   10 +-
 ..._1_1usmp_1_1PoolAllocationNode__coll__graph.svg |  282 +-
 ...tvm_1_1tir_1_1usmp_1_1PoolInfoNode-members.html |  118 -
 .../structtvm_1_1tir_1_1usmp_1_1PoolInfoNode.html  |  404 -
 ...1_1tir_1_1usmp_1_1PoolInfoNode__coll__graph.svg |  317 -
 ...tir_1_1usmp_1_1PoolInfoNode__inherit__graph.svg |   79 -
 .../doxygen/structural__equal_8h__dep__incl.svg    |  622 +-
 .../api/doxygen/structural__equal_8h_source.html   |    4 +-
 .../reference/api/doxygen/structural__hash_8h.html |    5 +-
 .../api/doxygen/structural__hash_8h__dep__incl.svg |  650 +-
 .../api/doxygen/structural__hash_8h__incl.svg      |  568 +-
 .../api/doxygen/structural__hash_8h_source.html    |   45 +-
 docs/reference/api/doxygen/support_2span_8h.html   |  120 +
 .../api/doxygen/support_2span_8h__dep__incl.svg    |   36 +
 .../api/doxygen/support_2span_8h__incl.svg         |   68 +
 .../api/doxygen/support_2span_8h_source.html       |   96 +
 docs/reference/api/doxygen/tag_8h.html             |    4 +-
 docs/reference/api/doxygen/tag_8h__incl.svg        | 1232 +--
 docs/reference/api/doxygen/tag_8h_source.html      |    6 +-
 docs/reference/api/doxygen/target_8h.html          |    4 +-
 .../reference/api/doxygen/target_8h__dep__incl.svg | 1308 +--
 docs/reference/api/doxygen/target_8h__incl.svg     | 1528 ++--
 docs/reference/api/doxygen/target_8h_source.html   |    8 +-
 docs/reference/api/doxygen/target__info_8h.html    |    2 +-
 .../api/doxygen/target__info_8h__incl.svg          | 1254 +--
 .../api/doxygen/target__info_8h_source.html        |    6 +-
 docs/reference/api/doxygen/target__kind_8h.html    |    4 +-
 .../api/doxygen/target__kind_8h__dep__incl.svg     | 1320 +--
 .../api/doxygen/target__kind_8h__incl.svg          | 1420 +--
 .../api/doxygen/target__kind_8h_source.html        |   16 +-
 docs/reference/api/doxygen/task__scheduler_8h.html |    4 +-
 .../api/doxygen/task__scheduler_8h__incl.svg       | 1782 ++--
 .../api/doxygen/task__scheduler_8h_source.html     |   63 +-
 .../api/doxygen/te_2schedule_8h__dep__incl.svg     |    2 +-
 .../api/doxygen/te_2schedule_8h__incl.svg          |  130 +-
 .../api/doxygen/te_2schedule_8h_source.html        |   14 +-
 docs/reference/api/doxygen/tensor_8h.html          |    2 +-
 docs/reference/api/doxygen/tensor_8h__incl.svg     | 1116 +--
 docs/reference/api/doxygen/tensor_8h_source.html   |   43 +-
 docs/reference/api/doxygen/tensor__intrin_8h.html  |    2 +-
 .../api/doxygen/tensor__intrin_8h__dep__incl.svg   |    2 +-
 .../api/doxygen/tensor__intrin_8h__incl.svg        | 1126 +--
 .../api/doxygen/tensor__intrin_8h_source.html      |    6 +-
 docs/reference/api/doxygen/tensor__type_8h.html    |    2 +-
 .../api/doxygen/tensor__type_8h__incl.svg          | 1254 +--
 .../api/doxygen/tensor__type_8h_source.html        |    8 +-
 .../api/doxygen/tensor__utils_8h__incl.svg         |  118 +-
 docs/reference/api/doxygen/tir_2analysis_8h.html   |    2 +-
 .../api/doxygen/tir_2analysis_8h__incl.svg         | 1422 +--
 .../api/doxygen/tir_2analysis_8h_source.html       |   10 +-
 docs/reference/api/doxygen/tir_2expr_8h.html       |    2 +-
 .../api/doxygen/tir_2expr_8h__dep__incl.svg        |  314 +-
 docs/reference/api/doxygen/tir_2expr_8h__incl.svg  | 1378 +--
 .../reference/api/doxygen/tir_2expr_8h_source.html |   22 +-
 .../api/doxygen/tir_2expr__functor_8h.html         |    4 +-
 .../doxygen/tir_2expr__functor_8h__dep__incl.svg   |   40 +-
 .../api/doxygen/tir_2expr__functor_8h__incl.svg    | 1436 +--
 .../api/doxygen/tir_2expr__functor_8h_source.html  |   10 +-
 docs/reference/api/doxygen/tir_2function_8h.html   |   13 +-
 .../api/doxygen/tir_2function_8h__dep__incl.svg    | 1218 +--
 .../api/doxygen/tir_2function_8h__incl.svg         | 1506 ++--
 .../api/doxygen/tir_2function_8h_source.html       |   40 +-
 docs/reference/api/doxygen/tir_2op_8h.html         |   18 +-
 docs/reference/api/doxygen/tir_2op_8h__incl.svg    | 1232 +--
 docs/reference/api/doxygen/tir_2op_8h_source.html  |  140 +-
 .../api/doxygen/tir_2op__attr__types_8h.html       |    2 +-
 .../api/doxygen/tir_2op__attr__types_8h__incl.svg  | 1264 +--
 .../doxygen/tir_2op__attr__types_8h_source.html    |    4 +-
 .../api/doxygen/tir_2schedule_2schedule_8h.html    |    4 +-
 .../tir_2schedule_2schedule_8h__dep__incl.svg      |  232 +-
 .../doxygen/tir_2schedule_2schedule_8h__incl.svg   | 2366 +++--
 .../doxygen/tir_2schedule_2schedule_8h_source.html |   28 +-
 docs/reference/api/doxygen/tir_2transform_8h.html  |   20 +-
 .../api/doxygen/tir_2transform_8h__incl.svg        | 1492 ++--
 .../api/doxygen/tir_2transform_8h_source.html      |   10 +-
 .../api/doxygen/tir_2usmp_2analysis_8h.html        |  112 +
 .../api/doxygen/tir_2usmp_2analysis_8h__incl.svg   | 1662 ++++
 .../api/doxygen/tir_2usmp_2analysis_8h_source.html |   82 +
 .../api/doxygen/tir_2usmp_2transform_8h.html       |  122 +
 .../api/doxygen/tir_2usmp_2transform_8h__incl.svg  | 1475 +++
 .../doxygen/tir_2usmp_2transform_8h_source.html    |   85 +
 .../reference/api/doxygen/tir_2usmp_2utils_8h.html |   41 +-
 .../api/doxygen/tir_2usmp_2utils_8h__dep__incl.svg |   84 +
 .../api/doxygen/tir_2usmp_2utils_8h__incl.svg      | 2300 +++--
 .../api/doxygen/tir_2usmp_2utils_8h_source.html    |   99 +-
 docs/reference/api/doxygen/topi_2nn_8h__incl.svg   |   82 +-
 docs/reference/api/doxygen/topi_2nn_8h_source.html |   18 +-
 docs/reference/api/doxygen/topi_2transform_8h.html |    3 +
 .../api/doxygen/topi_2transform_8h__incl.svg       |   88 +-
 .../api/doxygen/topi_2transform_8h_source.html     |   93 +-
 docs/reference/api/doxygen/topi_2utils_8h.html     |    2 +-
 .../reference/api/doxygen/topi_2utils_8h__incl.svg | 1252 +--
 .../api/doxygen/topi_2utils_8h_source.html         |    6 +-
 docs/reference/api/doxygen/trace_8h.html           |    2 +-
 docs/reference/api/doxygen/trace_8h__dep__incl.svg |  236 +-
 docs/reference/api/doxygen/trace_8h__incl.svg      | 1038 +--
 docs/reference/api/doxygen/trace_8h_source.html    |   12 +-
 docs/reference/api/doxygen/transform__step_8h.html |    2 +-
 .../api/doxygen/transform__step_8h__dep__incl.svg  |    2 +-
 .../api/doxygen/transform__step_8h__incl.svg       | 1446 +--
 .../api/doxygen/transform__step_8h_source.html     |   12 +-
 docs/reference/api/doxygen/tune__context_8h.html   |   10 +-
 .../api/doxygen/tune__context_8h__dep__incl.svg    |   60 +-
 .../api/doxygen/tune__context_8h__incl.svg         | 2140 +++--
 .../api/doxygen/tune__context_8h_source.html       |   51 +-
 docs/reference/api/doxygen/type__functor_8h.html   |    2 +-
 .../api/doxygen/type__functor_8h__incl.svg         | 1339 +--
 .../api/doxygen/type__functor_8h_source.html       |    8 +-
 docs/reference/api/doxygen/type__relation_8h.html  |    4 +-
 .../api/doxygen/type__relation_8h__dep__incl.svg   | 1100 ++-
 .../api/doxygen/type__relation_8h__incl.svg        | 1530 ++--
 .../api/doxygen/type__relation_8h_source.html      |   12 +-
 docs/reference/api/doxygen/var_8h.html             |    2 +-
 docs/reference/api/doxygen/var_8h__dep__incl.svg   |  188 +-
 docs/reference/api/doxygen/var_8h__incl.svg        | 1264 +--
 docs/reference/api/doxygen/var_8h_source.html      |   20 +-
 docs/reference/api/doxygen/virtual__device_8h.html |  135 +
 .../api/doxygen/virtual__device_8h__dep__incl.svg  |  482 +
 .../api/doxygen/virtual__device_8h__incl.svg       | 1607 ++++
 .../api/doxygen/virtual__device_8h_source.html     |  113 +
 docs/reference/api/doxygen/vision_8h.html          |    2 +-
 docs/reference/api/doxygen/vision_8h__incl.svg     | 1489 ++--
 docs/reference/api/doxygen/vision_8h_source.html   |    2 +-
 docs/reference/api/doxygen/with_8h.html            |    2 +-
 docs/reference/api/doxygen/with_8h__dep__incl.svg  | 1192 +--
 docs/reference/api/doxygen/x86_2bnn_8h_source.html |    8 +-
 .../api/doxygen/x86_2default_8h_source.html        |    2 +-
 .../api/doxygen/x86_2injective_8h_source.html      |    2 +-
 docs/reference/api/javadoc/constant-values.html    |    2 +-
 docs/reference/api/javadoc/deprecated-list.html    |    2 +-
 docs/reference/api/javadoc/help-doc.html           |    2 +-
 docs/reference/api/javadoc/index-all.html          |    2 +-
 docs/reference/api/javadoc/org/apache/tvm/API.html |    2 +-
 .../api/javadoc/org/apache/tvm/APIInternal.html    |    2 +-
 .../api/javadoc/org/apache/tvm/ArgTypeCode.html    |    2 +-
 .../api/javadoc/org/apache/tvm/Device.html         |    2 +-
 .../javadoc/org/apache/tvm/Function.Callback.html  |    2 +-
 .../api/javadoc/org/apache/tvm/Function.html       |    2 +-
 .../api/javadoc/org/apache/tvm/Module.html         |    2 +-
 .../api/javadoc/org/apache/tvm/NDArray.html        |    2 +-
 .../api/javadoc/org/apache/tvm/NDArrayBase.html    |    2 +-
 .../api/javadoc/org/apache/tvm/TVMType.html        |    2 +-
 .../api/javadoc/org/apache/tvm/TVMValue.html       |    2 +-
 .../api/javadoc/org/apache/tvm/TVMValueBytes.html  |    2 +-
 .../api/javadoc/org/apache/tvm/TVMValueDouble.html |    2 +-
 .../api/javadoc/org/apache/tvm/TVMValueHandle.html |    2 +-
 .../api/javadoc/org/apache/tvm/TVMValueLong.html   |    2 +-
 .../api/javadoc/org/apache/tvm/TVMValueNull.html   |    2 +-
 .../api/javadoc/org/apache/tvm/TVMValueString.html |    2 +-
 .../api/javadoc/org/apache/tvm/class-use/API.html  |    2 +-
 .../org/apache/tvm/class-use/APIInternal.html      |    2 +-
 .../org/apache/tvm/class-use/ArgTypeCode.html      |    2 +-
 .../javadoc/org/apache/tvm/class-use/Device.html   |    2 +-
 .../apache/tvm/class-use/Function.Callback.html    |    2 +-
 .../javadoc/org/apache/tvm/class-use/Function.html |   14 +-
 .../javadoc/org/apache/tvm/class-use/Module.html   |   10 +-
 .../javadoc/org/apache/tvm/class-use/NDArray.html  |    2 +-
 .../org/apache/tvm/class-use/NDArrayBase.html      |    6 +-
 .../javadoc/org/apache/tvm/class-use/TVMType.html  |    2 +-
 .../javadoc/org/apache/tvm/class-use/TVMValue.html |    2 +-
 .../org/apache/tvm/class-use/TVMValueBytes.html    |    2 +-
 .../org/apache/tvm/class-use/TVMValueDouble.html   |    2 +-
 .../org/apache/tvm/class-use/TVMValueHandle.html   |    2 +-
 .../org/apache/tvm/class-use/TVMValueLong.html     |    2 +-
 .../org/apache/tvm/class-use/TVMValueNull.html     |    2 +-
 .../org/apache/tvm/class-use/TVMValueString.html   |    2 +-
 .../org/apache/tvm/contrib/GraphExecutor.html      |    2 +-
 .../org/apache/tvm/contrib/GraphModule.html        |    2 +-
 .../tvm/contrib/class-use/GraphExecutor.html       |    2 +-
 .../apache/tvm/contrib/class-use/GraphModule.html  |    2 +-
 .../org/apache/tvm/contrib/package-summary.html    |    2 +-
 .../org/apache/tvm/contrib/package-tree.html       |    2 +-
 .../org/apache/tvm/contrib/package-use.html        |    2 +-
 .../javadoc/org/apache/tvm/package-summary.html    |    2 +-
 .../api/javadoc/org/apache/tvm/package-tree.html   |    2 +-
 .../api/javadoc/org/apache/tvm/package-use.html    |    2 +-
 .../api/javadoc/org/apache/tvm/rpc/Client.html     |    2 +-
 .../tvm/rpc/ConnectProxyServerProcessor.html       |    2 +-
 .../tvm/rpc/ConnectTrackerServerProcessor.html     |    2 +-
 .../org/apache/tvm/rpc/NativeServerLoop.html       |    2 +-
 .../org/apache/tvm/rpc/RPC.TrackerCode.html        |    2 +-
 .../api/javadoc/org/apache/tvm/rpc/RPC.html        |    2 +-
 .../api/javadoc/org/apache/tvm/rpc/RPCSession.html |    2 +-
 .../javadoc/org/apache/tvm/rpc/RPCWatchdog.html    |    2 +-
 .../api/javadoc/org/apache/tvm/rpc/Server.html     |    2 +-
 .../org/apache/tvm/rpc/ServerProcessor.html        |    2 +-
 .../javadoc/org/apache/tvm/rpc/SocketChannel.html  |    2 +-
 .../apache/tvm/rpc/StandaloneServerProcessor.html  |    2 +-
 .../org/apache/tvm/rpc/TVMRemoteDevice.html        |    2 +-
 .../org/apache/tvm/rpc/class-use/Client.html       |    2 +-
 .../rpc/class-use/ConnectProxyServerProcessor.html |    2 +-
 .../class-use/ConnectTrackerServerProcessor.html   |    2 +-
 .../apache/tvm/rpc/class-use/NativeServerLoop.html |    2 +-
 .../apache/tvm/rpc/class-use/RPC.TrackerCode.html  |    2 +-
 .../javadoc/org/apache/tvm/rpc/class-use/RPC.html  |    2 +-
 .../org/apache/tvm/rpc/class-use/RPCSession.html   |    2 +-
 .../org/apache/tvm/rpc/class-use/RPCWatchdog.html  |    2 +-
 .../org/apache/tvm/rpc/class-use/Server.html       |    2 +-
 .../apache/tvm/rpc/class-use/ServerProcessor.html  |    2 +-
 .../apache/tvm/rpc/class-use/SocketChannel.html    |    2 +-
 .../rpc/class-use/StandaloneServerProcessor.html   |    2 +-
 .../apache/tvm/rpc/class-use/TVMRemoteDevice.html  |    2 +-
 .../org/apache/tvm/rpc/package-summary.html        |    2 +-
 .../javadoc/org/apache/tvm/rpc/package-tree.html   |    2 +-
 .../javadoc/org/apache/tvm/rpc/package-use.html    |    2 +-
 docs/reference/api/javadoc/overview-summary.html   |    2 +-
 docs/reference/api/javadoc/overview-tree.html      |    2 +-
 docs/reference/api/links.html                      |    4 +-
 docs/reference/api/python/auto_scheduler.html      |   19 +-
 docs/reference/api/python/autotvm.html             |    4 +-
 docs/reference/api/python/contrib.html             |  301 +-
 docs/reference/api/python/driver.html              |    4 +-
 docs/reference/api/python/error.html               |    4 +-
 docs/reference/api/python/graph_executor.html      |   28 +-
 docs/reference/api/python/index.html               |    5 +-
 docs/reference/api/python/ir.html                  |  110 +-
 docs/reference/api/python/micro.html               |    4 +-
 docs/reference/api/python/ndarray.html             |   10 +-
 docs/reference/api/python/relay/analysis.html      |   35 +-
 docs/reference/api/python/relay/backend.html       |    4 +-
 .../api/python/relay/dataflow_pattern.html         |    4 +-
 docs/reference/api/python/relay/frontend.html      |    4 +-
 docs/reference/api/python/relay/image.html         |   14 +-
 docs/reference/api/python/relay/index.html         |  129 +-
 docs/reference/api/python/relay/nn.html            |  118 +-
 docs/reference/api/python/relay/testing.html       |    4 +-
 docs/reference/api/python/relay/transform.html     |   84 +-
 docs/reference/api/python/relay/vision.html        |    4 +-
 docs/reference/api/python/rpc.html                 |    4 +-
 docs/reference/api/python/runtime.html             |   15 +-
 docs/reference/api/python/target.html              |   58 +-
 docs/reference/api/python/te.html                  |   48 +-
 docs/reference/api/python/tir.html                 |  668 +-
 docs/reference/api/python/topi.html                |  363 +-
 docs/reference/api/python/vta/index.html           |    4 +-
 docs/reference/api/typedoc/assets/js/search.json   |    2 +-
 .../api/typedoc/classes/bytestreamreader.html      |   12 +-
 .../api/typedoc/classes/cachedcallstack.html       |   34 +-
 docs/reference/api/typedoc/classes/dldatatype.html |   12 +-
 docs/reference/api/typedoc/classes/dldevice.html   |   10 +-
 .../reference/api/typedoc/classes/environment.html |   12 +-
 docs/reference/api/typedoc/classes/ffilibrary.html |   20 +-
 .../api/typedoc/classes/graphexecutor.html         |   16 +-
 docs/reference/api/typedoc/classes/instance.html   |   40 +-
 docs/reference/api/typedoc/classes/memory.html     |   34 +-
 docs/reference/api/typedoc/classes/module.html     |   10 +-
 docs/reference/api/typedoc/classes/ndarray.html    |   22 +-
 .../api/typedoc/classes/packedfunccell.html        |    6 +-
 docs/reference/api/typedoc/classes/rpcserver.html  |   14 +-
 docs/reference/api/typedoc/classes/scalar.html     |    6 +-
 .../api/typedoc/classes/webgpucontext.html         |   12 +-
 docs/reference/api/typedoc/enums/argtypecode.html  |   30 +-
 .../api/typedoc/enums/aynccallbackcode.html        |    4 +-
 .../api/typedoc/enums/dldatatypecode.html          |    8 +-
 .../api/typedoc/enums/rpcserverstate.html          |   12 +-
 docs/reference/api/typedoc/enums/sizeof.html       |   18 +-
 docs/reference/api/typedoc/index.html              |  124 +-
 .../api/typedoc/interfaces/disposable.html         |    2 +-
 .../api/typedoc/interfaces/functioninfo.html       |    6 +-
 .../api/typedoc/interfaces/libraryprovider.html    |    4 +-
 docs/reference/langref/hybrid_script.html          |    4 +-
 docs/reference/langref/index.html                  |    4 +-
 docs/reference/langref/relay_adt.html              |    4 +-
 docs/reference/langref/relay_expr.html             |    4 +-
 docs/reference/langref/relay_op.html               |   44 +-
 docs/reference/langref/relay_pattern.html          |    4 +-
 docs/reference/langref/relay_type.html             |    4 +-
 docs/reference/publications.html                   |    4 +-
 docs/search.html                                   |    4 +-
 docs/searchindex.js                                |    2 +-
 docs/topic/microtvm/index.html                     |    4 +-
 docs/topic/vta/dev/config.html                     |    4 +-
 docs/topic/vta/dev/hardware.html                   |    4 +-
 docs/topic/vta/dev/index.html                      |    4 +-
 docs/topic/vta/index.html                          |    4 +-
 docs/topic/vta/install.html                        |    4 +-
 .../vta/tutorials/autotvm/sg_execution_times.html  |   10 +-
 docs/topic/vta/tutorials/autotvm/tune_alu_vta.html |    4 +-
 .../vta/tutorials/autotvm/tune_relay_vta.html      |    6 +-
 .../tutorials/frontend/deploy_classification.html  |   18 +-
 .../vta/tutorials/frontend/deploy_detection.html   |   18 +-
 .../vta/tutorials/frontend/sg_execution_times.html |   10 +-
 docs/topic/vta/tutorials/index.html                |    4 +-
 docs/topic/vta/tutorials/matrix_multiply.html      |   26 +-
 .../vta/tutorials/optimize/convolution_opt.html    |  159 +-
 .../tutorials/optimize/matrix_multiply_opt.html    |   83 +-
 .../vta/tutorials/optimize/sg_execution_times.html |   10 +-
 docs/topic/vta/tutorials/sg_execution_times.html   |   10 +-
 docs/topic/vta/tutorials/vta_get_started.html      |   16 +-
 docs/tutorial/auto_scheduler_matmul_x86.html       |   27 +-
 docs/tutorial/autotvm_matmul_x86.html              |    5 +-
 docs/tutorial/autotvm_relay_x86.html               |  153 +-
 docs/tutorial/cross_compilation_and_rpc.html       |    7 +-
 docs/tutorial/index.html                           |   43 +-
 docs/tutorial/install.html                         |    5 +-
 docs/tutorial/intro_topi.html                      |  227 +-
 docs/tutorial/introduction.html                    |    5 +-
 docs/tutorial/relay_quick_start.html               |    7 +-
 docs/tutorial/sg_execution_times.html              |   29 +-
 docs/tutorial/tensor_expr_get_started.html         |  106 +-
 docs/tutorial/tensor_ir_blitz_course.html          |    5 +-
 docs/tutorial/tvmc_command_line_driver.html        |   11 +-
 docs/tutorial/tvmc_python.html                     |  632 ++
 docs/tutorials/get_started/tvmc_python.html        |   10 +
 2726 files changed, 232922 insertions(+), 165528 deletions(-)

diff --git a/docs/_downloads/10724e9ad9c29faa223c1d5eab6dbef9/tvmc_python.py b/docs/_downloads/10724e9ad9c29faa223c1d5eab6dbef9/tvmc_python.py
new file mode 100644
index 0000000..7ee3be0
--- /dev/null
+++ b/docs/_downloads/10724e9ad9c29faa223c1d5eab6dbef9/tvmc_python.py
@@ -0,0 +1,292 @@
+# 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.
+"""
+Getting Starting using TVMC Python: a high-level API for TVM
+=============================================================
+**Author**:
+`Jocelyn Shiue <https://github.com/CircleSpin>`_
+
+Hi! Here we explain the scripting tool designed for the complete TVM beginner. 🙂                                                                                                      
+
+Before we get started let's get an example model if you don't already have one.
+Follow the steps to download a resnet model via the terminal:
+
+ .. code-block:: python
+
+     mkdir myscripts
+     cd myscripts
+     wget https://github.com/onnx/models/raw/main/vision/classification/resnet/model/resnet50-v2-7.onnx
+     mv resnet50-v2-7.onnx my_model.onnx
+     touch tvmcpythonintro.py
+
+Let's start editing the python file in your favorite text editor.
+"""
+
+################################################################################
+# Step 0: Imports
+# ~~~~~~~~~~~~~~~
+#
+#  .. code-block:: python
+#
+#     from tvm.driver import tvmc
+#
+#
+
+################################################################################
+# Step 1: Load a model
+# ~~~~~~~~~~~~~~~~~~~~
+#
+# Let's import our model into tvmc. This step converts a machine learning model from
+# a supported framework into TVM's high level graph representation language called Relay.
+# This is to have a unified starting point for all models in tvm. The frameworks we currently
+# support are: Keras, ONNX, Tensorflow, TFLite, and PyTorch.
+#
+# .. code-block:: python
+#
+#   model = tvmc.load('my_model.onnx') #Step 1: Load
+#
+# If you'd like to see the Relay, you can run:
+# ``model.summary()``
+#
+# All frameworks support overwriting the input shapes with a shape_dict argument.
+# For most frameworks this is optional, but for Pytorch this is necessary as
+# TVM cannot automatically search for it.
+#
+# .. code-block:: python
+#
+#   #model = tvmc.load(my_model, shape_dict={'input1' : [1, 2, 3, 4], 'input2' : [1, 2, 3, 4]}) #Step 1: Load + shape_dict
+#
+# A suggested way to see the model's input/shape_dict is via `netron <https://netron.app/>`_. After opening the model,
+# click the first node to see the name(s) and shape(s) in the inputs section.
+
+
+################################################################################
+# Step 2: Compile
+# ~~~~~~~~~~~~~~~
+#
+# Now that our model is in Relay, our next step is to compile it to a desired
+# hardware to run on. We refer to this hardware as a target. This compilation process
+# translates the model from Relay into a lower-level language that the
+# target machine can understand.
+#
+# In order to compile a model a tvm.target string is required.
+# To learn more about tvm.targets and their options look at the `documentation <https://tvm.apache.org/docs/api/python/target.html>`_.
+# Some examples include:
+#
+#    1. cuda (Nvidia GPU)
+#    2. llvm (CPU)
+#    3. llvm -mcpu=cascadelake (Intel CPU)
+#
+# .. code-block:: python
+#
+#   package = tvmc.compile(model, target="llvm") #Step 2: Compile
+#
+#
+# The compilation step returns a package.
+#
+
+################################################################################
+# Step 3: Run
+# ~~~~~~~~~~~
+#
+# The compiled package can now be run on the hardware target. The device
+# input options are: CPU, Cuda, CL, Metal, and Vulkan.
+#
+# .. code-block:: python
+#
+#   result = tvmc.run(package, device="cpu") #Step 3: Run
+#
+# And you can print the results:
+# ``print(results)``
+#
+
+################################################################################
+# Step 1.5: Tune [Optional & Recommended]
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# Run speed can further be improved by tuning. This optional step uses
+# machine learning to look at each operation within a model (a function) and
+# tries to find a faster way to run it. We do this through a cost model, and
+# benchmarking possible schedules.
+#
+# The target is the same as compile.
+#
+# .. code-block:: python
+#
+#   tvmc.tune(model, target="llvm") #Step 1.5: Optional Tune
+#
+# The terminal output should look like:
+#
+# .. code-block:: python
+#
+#    [Task  1/13]  Current/Best:   82.00/ 106.29 GFLOPS | Progress: (48/769) | 18.56 s
+#    [Task  1/13]  Current/Best:   54.47/ 113.50 GFLOPS | Progress: (240/769) | 85.36 s
+#    .....
+#
+# There may be UserWarnings that can be ignored.
+# This should make the end result faster, but it can take hours to tune.
+#
+# See the section 'Saving the Tuning Results' below. Be sure to pass the tuning
+# results into compile if you want the results to apply.
+#
+# .. code-block:: python
+#
+#     #tvmc.compile(model, target="llvm", tuning_records = "records.log") #Step 2: Compile
+
+################################################################################
+# Save and then start the process in the terminal:
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# .. code-block:: python
+#
+#   python my_tvmc_script.py
+#
+# Note: Your fans may become very active
+#
+
+################################################################################
+# Example results:
+# ~~~~~~~~~~~~~~~~
+#
+# .. code-block:: python
+#
+#   Time elapsed for training: 18.99 s
+#   Execution time summary:
+#   mean (ms)   max (ms)   min (ms)   std (ms)
+#     25.24      26.12      24.89       0.38
+#
+#
+#   Output Names:
+#   ['output_0']
+#
+
+
+################################################################################
+# Additional TVMC Functionalities
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+
+################################################################################
+# Saving the model
+# ~~~~~~~~~~~~~~~~
+#
+# To make things faster for later, after loading the model (Step 1) save the Relay version.
+# The model will then appear where you saved it for later in the coverted syntax.
+#
+# .. code-block:: python
+#
+#   model = tvmc.load('my_model.onnx') #Step 1: Load
+#   model.save(desired_model_path)
+#
+#
+
+################################################################################
+# Saving the package
+# ~~~~~~~~~~~~~~~~~~
+#
+# After the model has been compiled (Step 2) the package also is also saveable.
+#
+# .. code-block:: python
+#
+#   tvmc.compile(model, target="llvm", package_path="whatever")
+#
+#   new_package = tvmc.TVMCPackage(package_path="whatever")
+#   result = tvmc.run(new_package) #Step 3: Run
+#
+#
+
+################################################################################
+# Using Autoscheduler
+# ~~~~~~~~~~~~~~~~~~~
+#
+# Use the next generation of tvm to enable potentially faster run speed results.
+# The search space of the schedules is automatically generated unlike
+# previously where they needed to be hand written. (Learn more:
+# `1 <https://tvm.apache.org/2021/03/03/intro-auto-scheduler>`_,
+# `2 <https://arxiv.org/abs/2006.06762>`_)
+#
+# .. code-block:: python
+#
+#   tvmc.tune(model, target="llvm", enable_autoscheduler = True)
+#
+#
+
+################################################################################
+# Saving the tuning results
+# ~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# The tuning results can be saved in a file for later reuse.
+#
+# Method 1:
+#    .. code-block:: python
+#
+#      log_file = "hello.json"
+#
+#      # Run tuning
+#      tvmc.tune(model, target="llvm",tuning_records=log_file)
+#
+#      ...
+#
+#      # Later run tuning and reuse tuning results
+#      tvmc.tune(model, target="llvm",tuning_records=log_file)
+#
+# Method 2:
+#    .. code-block:: python
+#
+#      # Run tuning
+#      tuning_records = tvmc.tune(model, target="llvm")
+#
+#      ...
+#
+#      # Later run tuning and reuse tuning results
+#      tvmc.tune(model, target="llvm",tuning_records=tuning_records)
+#
+
+################################################################################
+# Tuning a more complex model:
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# If you notice T's printing that look like ``.........T.T..T..T..T.T.T.T.T.T.``
+# increase the searching time frame:
+#
+#    .. code-block:: python
+#
+#      tvmc.tune(model,trials=10000,timeout=10,)
+#
+
+################################################################################
+# Compiling a model for a remote device:
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#
+# A remote procedural call (RPC) is useful when you would like to compile for hardware
+# that is not on your local machine. The tvmc methods support this.
+# To set up the RPC server take a look at the 'Set up RPC Server on Device'
+# section in this `document <https://tvm.apache.org/docs/tutorials/get_started/cross_compilation_and_rpc.html>`_.
+#
+# Within the TVMC Script include the following and adjust accordingly:
+#
+#    .. code-block:: python
+#
+#      tvmc.tune(
+#           model,
+#           target=target, # Compilation target as string // Device to compile for
+#           target_host=target_host, # Host processor
+#           hostname=host_ip_address, #The IP address of an RPC tracker, used when benchmarking remotely.
+#           port=port_number, # The port of the RPC tracker to connect to. Defaults to 9090.
+#           rpc_key=your_key, # The RPC tracker key of the target device. Required when rpc_tracker is provided
+#      )
+#
diff --git a/docs/_downloads/13ef71e33eaef0855c6e883d9ec5d632/convolution_opt.py b/docs/_downloads/13ef71e33eaef0855c6e883d9ec5d632/convolution_opt.py
index a9ef803..521a73a 100644
--- a/docs/_downloads/13ef71e33eaef0855c6e883d9ec5d632/convolution_opt.py
+++ b/docs/_downloads/13ef71e33eaef0855c6e883d9ec5d632/convolution_opt.py
@@ -369,9 +369,10 @@ print(vta.lower(s, [data, kernel, res], simple_mode=True))
 from tvm.topi.testing import conv2d_nchw_python
 
 # Compile the TVM module
-my_conv = vta.build(
-    s, [data, kernel, res], tvm.target.Target("ext_dev", host=env.target_host), name="my_conv"
-)
+with vta.build_config(disabled_pass={"tir.CommonSubexprElimTIR"}):
+    my_conv = vta.build(
+        s, [data, kernel, res], tvm.target.Target("ext_dev", host=env.target_host), name="my_conv"
+    )
 temp = utils.tempdir()
 my_conv.save(temp.relpath("conv2d.o"))
 remote.upload(temp.relpath("conv2d.o"))
diff --git a/docs/_downloads/233ceda3a682ae5df93b4ce0bcfbf870/tvmc_command_line_driver.py b/docs/_downloads/233ceda3a682ae5df93b4ce0bcfbf870/tvmc_command_line_driver.py
index d5e074f..48e3703 100644
--- a/docs/_downloads/233ceda3a682ae5df93b4ce0bcfbf870/tvmc_command_line_driver.py
+++ b/docs/_downloads/233ceda3a682ae5df93b4ce0bcfbf870/tvmc_command_line_driver.py
@@ -88,7 +88,7 @@ capabilities, and set the stage for understanding how TVM works.
 #
 # .. code-block:: bash
 #
-#   wget https://github.com/onnx/models/raw/master/vision/classification/resnet/model/resnet50-v2-7.onnx
+#   wget https://github.com/onnx/models/raw/main/vision/classification/resnet/model/resnet50-v2-7.onnx
 #
 
 ################################################################################
diff --git a/docs/_downloads/2f91b1346a0ba21b800081aa15fdaac2/autotvm_relay_x86.ipynb b/docs/_downloads/2f91b1346a0ba21b800081aa15fdaac2/autotvm_relay_x86.ipynb
index 1b108e0..a824b23 100644
--- a/docs/_downloads/2f91b1346a0ba21b800081aa15fdaac2/autotvm_relay_x86.ipynb
+++ b/docs/_downloads/2f91b1346a0ba21b800081aa15fdaac2/autotvm_relay_x86.ipynb
@@ -51,7 +51,7 @@
       },
       "outputs": [],
       "source": [
-        "model_url = \"\".join(\n    [\n        \"https://github.com/onnx/models/raw/\",\n        \"master/vision/classification/resnet/model/\",\n        \"resnet50-v2-7.onnx\",\n    ]\n)\n\nmodel_path = download_testdata(model_url, \"resnet50-v2-7.onnx\", module=\"onnx\")\nonnx_model = onnx.load(model_path)"
+        "model_url = (\n    \"https://github.com/onnx/models/raw/main/\"\n    \"vision/classification/resnet/model/\"\n    \"resnet50-v2-7.onnx\"\n)\n\nmodel_path = download_testdata(model_url, \"resnet50-v2-7.onnx\", module=\"onnx\")\nonnx_model = onnx.load(model_path)"
       ]
     },
     {
diff --git a/docs/_downloads/2fb9ae7bf124f72614a43137cf2919cb/micro_tflite.py b/docs/_downloads/2fb9ae7bf124f72614a43137cf2919cb/micro_tflite.py
index bd70fc5..3d871ba 100644
--- a/docs/_downloads/2fb9ae7bf124f72614a43137cf2919cb/micro_tflite.py
+++ b/docs/_downloads/2fb9ae7bf124f72614a43137cf2919cb/micro_tflite.py
@@ -123,12 +123,18 @@ model with Relay.
 # directory into a buffer
 
 import os
+import json
+import tarfile
+import pathlib
+import tempfile
 import numpy as np
 
 import tvm
-from tvm.contrib.download import download_testdata
 from tvm import relay
+import tvm.contrib.utils
+from tvm.contrib.download import download_testdata
 
+use_physical_hw = bool(os.getenv("TVM_MICRO_USE_HW"))
 model_url = "https://people.linaro.org/~tom.gall/sine_model.tflite"
 model_file = "sine_model.tflite"
 model_path = download_testdata(model_url, model_file, module="data")
@@ -181,7 +187,7 @@ mod, params = relay.frontend.from_tflite(
 #
 RUNTIME = tvm.relay.backend.Runtime("crt", {"system-lib": True})
 TARGET = tvm.target.target.micro("host")
-BOARD = "qemu_x86"
+
 #
 # Compiling for physical hardware
 #  When running on physical hardware, choose a TARGET and a BOARD that describe the hardware. The
@@ -190,8 +196,15 @@ BOARD = "qemu_x86"
 #  board but a couple of wirings and configs differ, it's necessary to select the "stm32f746g_disco"
 #  board to generated the right firmware image.
 #
-#  TARGET = tvm.target.target.micro("stm32f746xx")
-#  BOARD = "nucleo_f746zg" # or "stm32f746g_disco#"
+
+if use_physical_hw:
+    boards_file = pathlib.Path(tvm.micro.get_microtvm_template_projects("zephyr")) / "boards.json"
+    with open(boards_file) as f:
+        boards = json.load(f)
+
+    BOARD = os.getenv("TVM_MICRO_BOARD", default="nucleo_f746zg")
+    TARGET = tvm.target.target.micro(boards[BOARD]["model"])
+
 #
 #  For some boards, Zephyr runs them emulated by default, using QEMU. For example, below is the
 #  TARGET and BOARD used to build a microTVM firmware for the mps2-an521 board. Since that board
@@ -237,15 +250,12 @@ print("\n".join(first_few_lines))
 # (:doc:`Model Library Format` </dev/model_library_format>`). This is a tarball with a standard layout:
 
 # Get a temporary path where we can store the tarball (since this is running as a tutorial).
-import tempfile
 
 fd, model_library_format_tar_path = tempfile.mkstemp()
 os.close(fd)
 os.unlink(model_library_format_tar_path)
 tvm.micro.export_model_library_format(module, model_library_format_tar_path)
 
-import tarfile
-
 with tarfile.open(model_library_format_tar_path, "r:*") as tar_f:
     print("\n".join(f" - {m.name}" for m in tar_f.getmembers()))
 
@@ -264,9 +274,6 @@ os.unlink(model_library_format_tar_path)
 # this lives in a file ``microtvm_api_server.py`` in the root directory). Let's use the example ``host``
 # project in this tutorial, which simulates the device using a POSIX subprocess and pipes:
 
-import subprocess
-import pathlib
-
 template_project_path = pathlib.Path(tvm.micro.get_microtvm_template_projects("crt"))
 project_options = {}  # You can use options to provide platform-specific options through TVM.
 
@@ -275,11 +282,12 @@ project_options = {}  # You can use options to provide platform-specific options
 #  For physical hardware, you can try out the Zephyr platform by using a different template project
 #  and options:
 #
-#     template_project_path = pathlib.Path(tvm.micro.get_microtvm_template_projects("zephyr"))
-#     project_options = {"project_type": "host_driven", zephyr_board": "nucleo_f746zg"}}
+
+if use_physical_hw:
+    template_project_path = pathlib.Path(tvm.micro.get_microtvm_template_projects("zephyr"))
+    project_options = {"project_type": "host_driven", "zephyr_board": BOARD}
 
 # Create a temporary directory
-import tvm.contrib.utils
 
 temp_dir = tvm.contrib.utils.tempdir()
 generated_project_dir = temp_dir / "generated-project"
diff --git a/docs/_downloads/55a9eff88b1303e525d53269eeb16897/micro_ethosu.ipynb b/docs/_downloads/55a9eff88b1303e525d53269eeb16897/micro_ethosu.ipynb
index 3996db0..a6dd2bc 100644
--- a/docs/_downloads/55a9eff88b1303e525d53269eeb16897/micro_ethosu.ipynb
+++ b/docs/_downloads/55a9eff88b1303e525d53269eeb16897/micro_ethosu.ipynb
@@ -29,7 +29,7 @@
       "cell_type": "markdown",
       "metadata": {},
       "source": [
-        "Installing additional python dependencies\n-----------------------------------------\n\nIn order to run the demo, you will need some additional python packages.\nThese can be installed by using the requirements.txt file below:\n\n.. code-block:: text\n   :caption: requirements.txt\n   :name: requirements.txt\n\n    attrs==21.2.0\n    cloudpickle==2.0.0\n    decorator==5.1.0\n    ethos-u-vela==2.1.1\n    flatbuffers==1.12\n    lxml==4.6.3\n    nose==1.3.7\n    numpy==1.19.5\n     [...]
+        "Installing additional python dependencies\n-----------------------------------------\n\nIn order to run the demo, you will need some additional python packages.\nThese can be installed by using the requirements.txt file below:\n\n.. code-block:: text\n   :caption: requirements.txt\n   :name: requirements.txt\n\n    attrs==21.2.0\n    cloudpickle==2.0.0\n    decorator==5.1.0\n    ethos-u-vela==3.2.0\n    flatbuffers==1.12\n    lxml==4.6.3\n    nose==1.3.7\n    numpy==1.19.5\n     [...]
       ]
     },
     {
@@ -99,6 +99,13 @@
       "cell_type": "markdown",
       "metadata": {},
       "source": [
+        "<div class=\"alert alert-info\"><h4>Note</h4><p>If you'd like to use FreeRTOS for task scheduling and queues, a sample application can be found here\n  `demo_freertos.c <https://github.com/apache/tvm/blob/main/apps/microtvm/ethosu/src/demo_freertos.c>`</p></div>\n\n"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
         "Creating the linker script\n--------------------------\n\nWe need to create a linker script that will be used when we build our application\nin the following section. The linker script tells the linker where everything\nshould be placed in memory. The corstone300.ld linker script below should be\nplaced in your working directory.\n\nAn example linker script for the FVP can be found here\n`corstone300.ld <https://github.com/apache/tvm/blob/main/apps/microtvm/ethosu/corstone300.ld [...]
       ]
     },
@@ -127,6 +134,13 @@
       "cell_type": "markdown",
       "metadata": {},
       "source": [
+        "<div class=\"alert alert-info\"><h4>Note</h4><p>If you're using FreeRTOS, the Makefile builds it from the specified FREERTOS_PATH:\n    ``make FREERTOS_PATH=<FreeRTOS directory>``</p></div>\n\n\n"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
         "Running the demo application\n----------------------------\n\nFinally, we can run our demo appliction on the Fixed Virtual Platform (FVP),\nby using the following command:\n\n.. code-block:: bash\n\n    FVP_Corstone_SSE-300_Ethos-U55 -C cpu0.CFGDTCMSZ=15 \\\n    -C cpu0.CFGITCMSZ=15 -C mps3_board.uart0.out_file=\\\"-\\\" -C mps3_board.uart0.shutdown_tag=\\\"EXITTHESIM\\\" \\\n    -C mps3_board.visualisation.disable-visualisation=1 -C mps3_board.telnetterminal0.start_telnet=0 \\\ [...]
       ]
     }
diff --git a/docs/_downloads/57a45d9bef1af358191e7d50043e652c/autotvm_relay_x86.py b/docs/_downloads/57a45d9bef1af358191e7d50043e652c/autotvm_relay_x86.py
index 5ce517a..f74740d 100644
--- a/docs/_downloads/57a45d9bef1af358191e7d50043e652c/autotvm_relay_x86.py
+++ b/docs/_downloads/57a45d9bef1af358191e7d50043e652c/autotvm_relay_x86.py
@@ -85,12 +85,10 @@ from tvm.contrib import graph_executor
 #   :ref:`Compile Deep Learning Models <tutorial-frontend>` section of the TVM
 #   Documentation.
 
-model_url = "".join(
-    [
-        "https://github.com/onnx/models/raw/",
-        "master/vision/classification/resnet/model/",
-        "resnet50-v2-7.onnx",
-    ]
+model_url = (
+    "https://github.com/onnx/models/raw/main/"
+    "vision/classification/resnet/model/"
+    "resnet50-v2-7.onnx"
 )
 
 model_path = download_testdata(model_url, "resnet50-v2-7.onnx", module="onnx")
diff --git a/docs/_downloads/5b279d8a8718816263fa65b0eef1a5c0/micro_tflite.ipynb b/docs/_downloads/5b279d8a8718816263fa65b0eef1a5c0/micro_tflite.ipynb
index 84f1466..4e5d8f6 100644
--- a/docs/_downloads/5b279d8a8718816263fa65b0eef1a5c0/micro_tflite.ipynb
+++ b/docs/_downloads/5b279d8a8718816263fa65b0eef1a5c0/micro_tflite.ipynb
@@ -33,7 +33,7 @@
       },
       "outputs": [],
       "source": [
-        "import os\nimport numpy as np\n\nimport tvm\nfrom tvm.contrib.download import download_testdata\nfrom tvm import relay\n\nmodel_url = \"https://people.linaro.org/~tom.gall/sine_model.tflite\"\nmodel_file = \"sine_model.tflite\"\nmodel_path = download_testdata(model_url, model_file, module=\"data\")\n\ntflite_model_buf = open(model_path, \"rb\").read()"
+        "import os\nimport json\nimport tarfile\nimport pathlib\nimport tempfile\nimport numpy as np\n\nimport tvm\nfrom tvm import relay\nimport tvm.contrib.utils\nfrom tvm.contrib.download import download_testdata\n\nuse_physical_hw = bool(os.getenv(\"TVM_MICRO_USE_HW\"))\nmodel_url = \"https://people.linaro.org/~tom.gall/sine_model.tflite\"\nmodel_file = \"sine_model.tflite\"\nmodel_path = download_testdata(model_url, model_file, module=\"data\")\n\ntflite_model_buf = open(model_path, [...]
       ]
     },
     {
@@ -105,7 +105,7 @@
       },
       "outputs": [],
       "source": [
-        "RUNTIME = tvm.relay.backend.Runtime(\"crt\", {\"system-lib\": True})\nTARGET = tvm.target.target.micro(\"host\")\nBOARD = \"qemu_x86\"\n#\n# Compiling for physical hardware\n#  When running on physical hardware, choose a TARGET and a BOARD that describe the hardware. The\n#  STM32F746 Nucleo target and board is chosen in the example below. Another option would be to\n#  choose the STM32F746 Discovery board instead. Since that board has the same MCU as the Nucleo\n#  board but a  [...]
+        "RUNTIME = tvm.relay.backend.Runtime(\"crt\", {\"system-lib\": True})\nTARGET = tvm.target.target.micro(\"host\")\n\n#\n# Compiling for physical hardware\n#  When running on physical hardware, choose a TARGET and a BOARD that describe the hardware. The\n#  STM32F746 Nucleo target and board is chosen in the example below. Another option would be to\n#  choose the STM32F746 Discovery board instead. Since that board has the same MCU as the Nucleo\n#  board but a couple of wirings an [...]
       ]
     },
     {
@@ -123,7 +123,7 @@
       },
       "outputs": [],
       "source": [
-        "with tvm.transform.PassContext(\n    opt_level=3, config={\"tir.disable_vectorize\": True}, disabled_pass=[\"AlterOpLayout\"]\n):\n    module = relay.build(mod, target=TARGET, runtime=RUNTIME, params=params)\n\n\n# Inspecting the compilation output\n# ---------------------------------\n#\n# The compilation process has produced some C code implementing the operators in this graph. We\n# can inspect it by printing the CSourceModule contents (for the purposes of this tutorial, let' [...]
+        "with tvm.transform.PassContext(\n    opt_level=3, config={\"tir.disable_vectorize\": True}, disabled_pass=[\"AlterOpLayout\"]\n):\n    module = relay.build(mod, target=TARGET, runtime=RUNTIME, params=params)\n\n\n# Inspecting the compilation output\n# ---------------------------------\n#\n# The compilation process has produced some C code implementing the operators in this graph. We\n# can inspect it by printing the CSourceModule contents (for the purposes of this tutorial, let' [...]
       ]
     },
     {
diff --git a/docs/_downloads/65b9451c8de050d7cd9da2fe5a49acc6/deploy_detection.py b/docs/_downloads/65b9451c8de050d7cd9da2fe5a49acc6/deploy_detection.py
index 6b4d3e8..2d9ddb4 100644
--- a/docs/_downloads/65b9451c8de050d7cd9da2fe5a49acc6/deploy_detection.py
+++ b/docs/_downloads/65b9451c8de050d7cd9da2fe5a49acc6/deploy_detection.py
@@ -232,7 +232,7 @@ with autotvm.tophub.context(target):
         mod = mod["main"]
 
     # Compile Relay program with AlterOpLayout disabled
-    with vta.build_config(disabled_pass={"AlterOpLayout"}):
+    with vta.build_config(disabled_pass={"AlterOpLayout", "tir.CommonSubexprElimTIR"}):
         lib = relay.build(
             mod, target=tvm.target.Target(target, host=env.target_host), params=params
         )
diff --git a/docs/_downloads/66e1a42229aae7ed49ac268f520e6727/deploy_detection.ipynb b/docs/_downloads/66e1a42229aae7ed49ac268f520e6727/deploy_detection.ipynb
index eee7497..ce78996 100644
--- a/docs/_downloads/66e1a42229aae7ed49ac268f520e6727/deploy_detection.ipynb
+++ b/docs/_downloads/66e1a42229aae7ed49ac268f520e6727/deploy_detection.ipynb
@@ -123,7 +123,7 @@
       },
       "outputs": [],
       "source": [
-        "# Load pre-configured AutoTVM schedules\nwith autotvm.tophub.context(target):\n    net = __darknetffi__.dlopen(darknet_lib_path).load_network(\n        cfg_path.encode(\"utf-8\"), weights_path.encode(\"utf-8\"), 0\n    )\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 front end compilation\n    mod, params = relay.frontend.from_darknet(net, dtype=dtype, shape=dshape)\n\n    if [...]
+        "# Load pre-configured AutoTVM schedules\nwith autotvm.tophub.context(target):\n    net = __darknetffi__.dlopen(darknet_lib_path).load_network(\n        cfg_path.encode(\"utf-8\"), weights_path.encode(\"utf-8\"), 0\n    )\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 front end compilation\n    mod, params = relay.frontend.from_darknet(net, dtype=dtype, shape=dshape)\n\n    if [...]
       ]
     },
     {
diff --git a/docs/_downloads/6e511f5a8ddbf12f2fca2dfadc0cc4a9/micro_tvmc.ipynb b/docs/_downloads/6e511f5a8ddbf12f2fca2dfadc0cc4a9/micro_tvmc.ipynb
new file mode 100644
index 0000000..aacbff9
--- /dev/null
+++ b/docs/_downloads/6e511f5a8ddbf12f2fca2dfadc0cc4a9/micro_tvmc.ipynb
@@ -0,0 +1,92 @@
+{
+  "cells": [
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "%matplotlib inline"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "\n\nExecuting a Tiny Model with TVMC Micro\n======================================\n**Author**: `Mehrdad Hessar <https://github.com/mehrdadh>`_\n\nThis tutorial explains how to compile a tiny model for a micro device,\nbuild a program on Zephyr platform to execute this model, flash the program\nand run the model all using `tvmc micro` command.\n\n"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "<div class=\"alert alert-info\"><h4>Note</h4><p>This tutorial is explaining using TVMC Mirco on Zephyr platform. You need\n    to install Zephyr dependencies before processing with this tutorial. Alternatively,\n    you can run this tutorial in one of the following ways which has Zephyr depencencies already installed.\n\n    * Use `microTVM Reference Virtual Machines <https://tvm.apache.org/docs/how_to/work_with_microtvm/micro_reference_vm.html#sphx-glr-how-to-work-with-microtvm [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Using TVMC Micro\n###########################################################\n\n TVMC is a command-line tool which is installed as a part of TVM Python packages. Accessing this\n package varies based on your machine setup. In many cases, you can use the ``tvmc`` command directly.\n Alternatively, if you have TVM as a Python module on your ``$PYTHONPATH``, you can access this\n driver with ``python -m tvm.driver.tvmc`` command. This tutorial will use TVMC command as\n ``tvmc`` f [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Obtain a Tiny Model\n###########################################################\n\n For this tutorial, we will use Magic Wand model from tflite micro. Magic Wand is a\n Depthwise Convolution Layer model which recognizes gestures with an accelerometer.\n\n For this tutorial we will be using the model in tflite format.\n\n .. code-block:: bash\n\n     wget https://github.com/tensorflow/tflite-micro/raw/main/tensorflow/lite/micro/examples/magic_wand/magic_wand.tflite\n\n\n"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Compiling a TFLite model to a Model Library Format\n###########################################################\n\n Model Library Format (MLF) is an output format that TVM provides for micro targets. MLF is a tarball\n containing a file for each piece of the TVM compiler output which can be used on micro targets outside\n TVM environment. Read more about `Model Library Format <https://tvm.apache.org/docs//arch/model_library_format.html>`_.\n\n Here, we generate a MLF file for `` [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Create a Zephyr Project Using Model Library Format\n###########################################################\n\n To generate a Zephyr project we use TVM Micro subcommand ``create``. We pass the MLF format and the path\n for the project to ``create`` subcommand along with project options. Project options for each\n platform (Zephyr/Arduino) are defined in their Project API server file. To generate Zephyr project, run:\n\n .. code-block:: bash\n\n     tvmc micro create \\\n     [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Build and Flash Zephyr Project Using TVMC Micro\n###########################################################\n\n Next step is to build the Zephyr project which includes TVM generated code for running the tiny model, Zephyr\n template code to run a model in Host-Driven mode and TVM runtime source/header files. To build the project:\n\n .. code-block:: bash\n\n     tvmc micro build \\\n       project \\\n       zephyr \\\n       --project-option zephyr_board=qemu_x86\n\n This will [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Run Tiny Model on Micro Target\n###########################################################\n\n After flashing the device, the compiled model and TVM RPC server are programmed on the device.\n The Zephyr board is waiting for host to open a communication channel. MicroTVM devices typicall communicate\n using a serial communication (UART). To run the flashed model on the device using TVMC, we use ``tvmc run`` subcommand\n and pass ``--device micro`` to specify the device type. Thi [...]
+      ]
+    }
+  ],
+  "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.9"
+    }
+  },
+  "nbformat": 4,
+  "nbformat_minor": 0
+}
\ No newline at end of file
diff --git a/docs/_downloads/825671e45a9bdc4733400384984cd9dd/build_gcn.ipynb b/docs/_downloads/825671e45a9bdc4733400384984cd9dd/build_gcn.ipynb
index 9fafad9..716e12e 100644
--- a/docs/_downloads/825671e45a9bdc4733400384984cd9dd/build_gcn.ipynb
+++ b/docs/_downloads/825671e45a9bdc4733400384984cd9dd/build_gcn.ipynb
@@ -69,7 +69,7 @@
       },
       "outputs": [],
       "source": [
-        "\"\"\"\nParameters\n----------\ndataset: str\n    Name of dataset. You can choose from ['cora', 'citeseer', 'pubmed'].\n\nnum_layer: int\n    number of hidden layers\n\nnum_hidden: int\n    number of the hidden units in the hidden layer\n\ninfeat_dim: int\n    dimension of the input features\n\nnum_classes: int\n    dimension of model output (Number of classes)\n\"\"\"\ndataset = \"cora\"\n\ng, data = load_dataset(dataset)\n\nnum_layers = 1\nnum_hidden = 16\ninfeat_dim = data.fe [...]
+        "\"\"\"\nParameters\n----------\ndataset: str\n    Name of dataset. You can choose from ['cora', 'citeseer', 'pubmed'].\n\nnum_layer: int\n    number of hidden layers\n\nnum_hidden: int\n    number of the hidden units in the hidden layer\n\ninfeat_dim: int\n    dimension of the input features\n\nnum_classes: int\n    dimension of model output (Number of classes)\n\"\"\"\ndataset = \"cora\"\ng, data = load_dataset(dataset)\n\nnum_layers = 1\nnum_hidden = 16\ninfeat_dim = data.feat [...]
       ]
     },
     {
diff --git a/docs/_downloads/8d55b8f991fb704002f768367ce2d1a2/tvmc_python.ipynb b/docs/_downloads/8d55b8f991fb704002f768367ce2d1a2/tvmc_python.ipynb
new file mode 100644
index 0000000..182112a
--- /dev/null
+++ b/docs/_downloads/8d55b8f991fb704002f768367ce2d1a2/tvmc_python.ipynb
@@ -0,0 +1,141 @@
+{
+  "cells": [
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "%matplotlib inline"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "\nGetting Starting using TVMC Python: a high-level API for TVM\n=============================================================\n**Author**:\n`Jocelyn Shiue <https://github.com/CircleSpin>`_\n\nHi! Here we explain the scripting tool designed for the complete TVM beginner. \ud83d\ude42                                                                                                      \n\nBefore we get started let's get an example model if you don't already have one.\nFollow the st [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Step 0: Imports\n~~~~~~~~~~~~~~~\n\n .. code-block:: python\n\n    from tvm.driver import tvmc\n\n\n\n"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Step 1: Load a model\n~~~~~~~~~~~~~~~~~~~~\n\nLet's import our model into tvmc. This step converts a machine learning model from\na supported framework into TVM's high level graph representation language called Relay.\nThis is to have a unified starting point for all models in tvm. The frameworks we currently\nsupport are: Keras, ONNX, Tensorflow, TFLite, and PyTorch.\n\n.. code-block:: python\n\n  model = tvmc.load('my_model.onnx') #Step 1: Load\n\nIf you'd like to see the Rela [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Step 2: Compile\n~~~~~~~~~~~~~~~\n\nNow that our model is in Relay, our next step is to compile it to a desired\nhardware to run on. We refer to this hardware as a target. This compilation process\ntranslates the model from Relay into a lower-level language that the\ntarget machine can understand.\n\nIn order to compile a model a tvm.target string is required.\nTo learn more about tvm.targets and their options look at the `documentation <https://tvm.apache.org/docs/api/python/ta [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Step 3: Run\n~~~~~~~~~~~\n\nThe compiled package can now be run on the hardware target. The device\ninput options are: CPU, Cuda, CL, Metal, and Vulkan.\n\n.. code-block:: python\n\n  result = tvmc.run(package, device=\"cpu\") #Step 3: Run\n\nAnd you can print the results:\n``print(results)``\n\n\n"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Step 1.5: Tune [Optional & Recommended]\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nRun speed can further be improved by tuning. This optional step uses\nmachine learning to look at each operation within a model (a function) and\ntries to find a faster way to run it. We do this through a cost model, and\nbenchmarking possible schedules.\n\nThe target is the same as compile.\n\n.. code-block:: python\n\n  tvmc.tune(model, target=\"llvm\") #Step 1.5: Optional Tune\n\nThe terminal  [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Save and then start the process in the terminal:\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code-block:: python\n\n  python my_tvmc_script.py\n\nNote: Your fans may become very active\n\n\n"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Example results:\n~~~~~~~~~~~~~~~~\n\n.. code-block:: python\n\n  Time elapsed for training: 18.99 s\n  Execution time summary:\n  mean (ms)   max (ms)   min (ms)   std (ms)\n    25.24      26.12      24.89       0.38\n\n\n  Output Names:\n  ['output_0']\n\n\n"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Additional TVMC Functionalities\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n\n"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Saving the model\n~~~~~~~~~~~~~~~~\n\nTo make things faster for later, after loading the model (Step 1) save the Relay version.\nThe model will then appear where you saved it for later in the coverted syntax.\n\n.. code-block:: python\n\n  model = tvmc.load('my_model.onnx') #Step 1: Load\n  model.save(desired_model_path)\n\n\n\n"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Saving the package\n~~~~~~~~~~~~~~~~~~\n\nAfter the model has been compiled (Step 2) the package also is also saveable.\n\n.. code-block:: python\n\n  tvmc.compile(model, target=\"llvm\", package_path=\"whatever\")\n\n  new_package = tvmc.TVMCPackage(package_path=\"whatever\")\n  result = tvmc.run(new_package) #Step 3: Run\n\n\n\n"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Using Autoscheduler\n~~~~~~~~~~~~~~~~~~~\n\nUse the next generation of tvm to enable potentially faster run speed results.\nThe search space of the schedules is automatically generated unlike\npreviously where they needed to be hand written. (Learn more:\n`1 <https://tvm.apache.org/2021/03/03/intro-auto-scheduler>`_,\n`2 <https://arxiv.org/abs/2006.06762>`_)\n\n.. code-block:: python\n\n  tvmc.tune(model, target=\"llvm\", enable_autoscheduler = True)\n\n\n\n"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Saving the tuning results\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe tuning results can be saved in a file for later reuse.\n\nMethod 1:\n   .. code-block:: python\n\n     log_file = \"hello.json\"\n\n     # Run tuning\n     tvmc.tune(model, target=\"llvm\",tuning_records=log_file)\n\n     ...\n\n     # Later run tuning and reuse tuning results\n     tvmc.tune(model, target=\"llvm\",tuning_records=log_file)\n\nMethod 2:\n   .. code-block:: python\n\n     # Run tuning\n     tuning_records [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Tuning a more complex model:\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIf you notice T's printing that look like ``.........T.T..T..T..T.T.T.T.T.T.``\nincrease the searching time frame:\n\n   .. code-block:: python\n\n     tvmc.tune(model,trials=10000,timeout=10,)\n\n\n"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Compiling a model for a remote device:\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nA remote procedural call (RPC) is useful when you would like to compile for hardware\nthat is not on your local machine. The tvmc methods support this.\nTo set up the RPC server take a look at the 'Set up RPC Server on Device'\nsection in this `document <https://tvm.apache.org/docs/tutorials/get_started/cross_compilation_and_rpc.html>`_.\n\nWithin the TVMC Script include the following and adjust ac [...]
+      ]
+    }
+  ],
+  "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.9"
+    }
+  },
+  "nbformat": 4,
+  "nbformat_minor": 0
+}
\ No newline at end of file
diff --git a/docs/_downloads/95395e118195f25266654dd8fbf487d4/deploy_classification.ipynb b/docs/_downloads/95395e118195f25266654dd8fbf487d4/deploy_classification.ipynb
index 33d88ee..8ab48a1 100644
--- a/docs/_downloads/95395e118195f25266654dd8fbf487d4/deploy_classification.ipynb
+++ b/docs/_downloads/95395e118195f25266654dd8fbf487d4/deploy_classification.ipynb
@@ -87,7 +87,7 @@
       },
       "outputs": [],
       "source": [
-        "# Load pre-configured AutoTVM schedules\nwith autotvm.tophub.context(target):\n\n    # Populate the shape and data type dictionary for ImageNet classifier input\n    dtype_dict = {\"data\": \"float32\"}\n    shape_dict = {\"data\": (env.BATCH, 3, 224, 224)}\n\n    # Get off the shelf gluon model, and convert to relay\n    gluon_model = vision.get_model(model, pretrained=True)\n\n    # Measure build start time\n    build_start = time.time()\n\n    # Start front end compilation\n  [...]
+        "# Load pre-configured AutoTVM schedules\nwith autotvm.tophub.context(target):\n\n    # Populate the shape and data type dictionary for ImageNet classifier input\n    dtype_dict = {\"data\": \"float32\"}\n    shape_dict = {\"data\": (env.BATCH, 3, 224, 224)}\n\n    # Get off the shelf gluon model, and convert to relay\n    gluon_model = vision.get_model(model, pretrained=True)\n\n    # Measure build start time\n    build_start = time.time()\n\n    # Start front end compilation\n  [...]
       ]
     },
     {
diff --git a/docs/_downloads/9ccca8fd489a1486ac71b55a55c320c5/micro_autotune.py b/docs/_downloads/9ccca8fd489a1486ac71b55a55c320c5/micro_autotune.py
index 394a946..613d92e 100644
--- a/docs/_downloads/9ccca8fd489a1486ac71b55a55c320c5/micro_autotune.py
+++ b/docs/_downloads/9ccca8fd489a1486ac71b55a55c320c5/micro_autotune.py
@@ -18,7 +18,7 @@
 """
 .. _tutorial-micro-autotune:
 
-Autotuning with micro TVM
+Autotuning with microTVM
 =========================
 **Authors**:
 `Andrew Reusch <https://github.com/areusch>`_,
@@ -27,12 +27,15 @@ Autotuning with micro TVM
 This tutorial explains how to autotune a model using the C runtime.
 """
 
+import os
+import json
 import numpy as np
-import subprocess
 import pathlib
 
 import tvm
-from tvm.relay.backend import Executor, Runtime
+from tvm.relay.backend import Runtime
+
+use_physical_hw = bool(os.getenv("TVM_MICRO_USE_HW"))
 
 ####################
 # Defining the model
@@ -67,7 +70,7 @@ weight_sample = np.random.rand(
 params = {"weight": weight_sample}
 
 #######################
-# Defining the target #
+# Defining the target
 #######################
 # Now we define the TVM target that describes the execution environment. This looks very similar
 # to target definitions from other microTVM tutorials. Alongside this we pick the C Runtime to code
@@ -78,6 +81,7 @@ params = {"weight": weight_sample}
 # PLATFORM list in this tutorial. You can chose the platform by passing --platform argument when running
 # this tutorial.
 #
+
 RUNTIME = Runtime("crt", {"system-lib": True})
 TARGET = tvm.target.target.micro("host")
 
@@ -85,9 +89,14 @@ TARGET = tvm.target.target.micro("host")
 # --------------------------------------------------------------------------
 #  When running on physical hardware, choose a TARGET and a BOARD that describe the hardware. The
 #  STM32L4R5ZI Nucleo target and board is chosen in the example below.
-#
-#    TARGET = tvm.target.target.micro("stm32l4r5zi")
-#    BOARD = "nucleo_l4r5zi"
+if use_physical_hw:
+    boards_file = pathlib.Path(tvm.micro.get_microtvm_template_projects("zephyr")) / "boards.json"
+    with open(boards_file) as f:
+        boards = json.load(f)
+
+    BOARD = os.getenv("TVM_MICRO_BOARD", default="nucleo_l4r5zi")
+    TARGET = tvm.target.target.micro(boards[BOARD]["model"])
+
 
 #########################
 # Extracting tuning tasks
@@ -98,6 +107,7 @@ TARGET = tvm.target.target.micro("host")
 #
 # Because task extraction involves running the compiler, we first configure the compiler's
 # transformation passes; we'll apply the same configuration later on during autotuning.
+#
 
 pass_context = tvm.transform.PassContext(opt_level=3, config={"tir.disable_vectorize": True})
 with pass_context:
@@ -116,7 +126,6 @@ assert len(tasks) > 0
 # choose other options by choosing from `PLATFORM` list.
 #
 
-
 module_loader = tvm.micro.AutoTvmModuleLoader(
     template_project_dir=pathlib.Path(tvm.micro.get_microtvm_template_projects("crt")),
     project_options={"verbose": False},
@@ -133,30 +142,36 @@ runner = tvm.autotvm.LocalRunner(number=1, repeat=1, timeout=100, module_loader=
 measure_option = tvm.autotvm.measure_option(builder=builder, runner=runner)
 
 # Compiling for physical hardware
-# --------------------------------------------------------------------------
-#    module_loader = tvm.micro.AutoTvmModuleLoader(
-#        template_project_dir=pathlib.Path(tvm.micro.get_microtvm_template_projects("zephyr")),
-#        project_options={
-#            "zephyr_board": BOARD,
-#            "west_cmd": "west",
-#            "verbose": False,
-#            "project_type": "host_driven",
-#        },
-#    )
-#    builder = tvm.autotvm.LocalBuilder(
-#        n_parallel=1,
-#        build_kwargs={"build_option": {"tir.disable_vectorize": True}},
-#        do_fork=False,
-#        build_func=tvm.micro.autotvm_build_func,
-#    )
-#    runner = tvm.autotvm.LocalRunner(number=1, repeat=1, timeout=100, module_loader=module_loader)
-#
-#    measure_option = tvm.autotvm.measure_option(builder=builder, runner=runner)
+if use_physical_hw:
+    module_loader = tvm.micro.AutoTvmModuleLoader(
+        template_project_dir=pathlib.Path(tvm.micro.get_microtvm_template_projects("zephyr")),
+        project_options={
+            "zephyr_board": BOARD,
+            "west_cmd": "west",
+            "verbose": False,
+            "project_type": "host_driven",
+        },
+    )
+    builder = tvm.autotvm.LocalBuilder(
+        n_parallel=1,
+        build_kwargs={"build_option": {"tir.disable_vectorize": True}},
+        do_fork=False,
+        build_func=tvm.micro.autotvm_build_func,
+        runtime=RUNTIME,
+    )
+    runner = tvm.autotvm.LocalRunner(number=1, repeat=1, timeout=100, module_loader=module_loader)
+
+    measure_option = tvm.autotvm.measure_option(builder=builder, runner=runner)
 
-################
+##########################
 # Run Autotuning
-################
-# Now we can run autotuning separately on each extracted task.
+##########################
+# Now we can run autotuning separately on each extracted task on microTVM device.
+#
+
+autotune_log_file = pathlib.Path("microtvm_autotune.log.txt")
+if os.path.exists(autotune_log_file):
+    os.remove(autotune_log_file)
 
 num_trials = 10
 for task in tasks:
@@ -165,7 +180,7 @@ for task in tasks:
         n_trial=num_trials,
         measure_option=measure_option,
         callbacks=[
-            tvm.autotvm.callback.log_to_file("microtvm_autotune.log.txt"),
+            tvm.autotvm.callback.log_to_file(str(autotune_log_file)),
             tvm.autotvm.callback.progress_bar(num_trials, si_prefix="M"),
         ],
         si_prefix="M",
@@ -177,12 +192,12 @@ for task in tasks:
 # For comparison, let's compile and run the graph without imposing any autotuning schedules. TVM
 # will select a randomly-tuned implementation for each operator, which should not perform as well as
 # the tuned operator.
+#
 
 with pass_context:
     lowered = tvm.relay.build(relay_mod, target=TARGET, runtime=RUNTIME, params=params)
 
 temp_dir = tvm.contrib.utils.tempdir()
-
 project = tvm.micro.generate_project(
     str(tvm.micro.get_microtvm_template_projects("crt")),
     lowered,
@@ -191,18 +206,19 @@ project = tvm.micro.generate_project(
 )
 
 # Compiling for physical hardware
-# --------------------------------------------------------------------------
-#    project = tvm.micro.generate_project(
-#        str(tvm.micro.get_microtvm_template_projects("zephyr")),
-#        lowered,
-#        temp_dir / "project",
-#        {
-#            "zephyr_board": BOARD,
-#            "west_cmd": "west",
-#            "verbose": False,
-#            "project_type": "host_driven",
-#        },
-#    )
+if use_physical_hw:
+    temp_dir = tvm.contrib.utils.tempdir()
+    project = tvm.micro.generate_project(
+        str(tvm.micro.get_microtvm_template_projects("zephyr")),
+        lowered,
+        temp_dir / "project",
+        {
+            "zephyr_board": BOARD,
+            "west_cmd": "west",
+            "verbose": False,
+            "project_type": "host_driven",
+        },
+    )
 
 project.build()
 project.flash()
@@ -220,12 +236,11 @@ with tvm.micro.Session(project.transport()) as session:
 ##########################
 # Once autotuning completes, you can time execution of the entire program using the Debug Runtime:
 
-with tvm.autotvm.apply_history_best("microtvm_autotune.log.txt"):
+with tvm.autotvm.apply_history_best(str(autotune_log_file)):
     with pass_context:
         lowered_tuned = tvm.relay.build(relay_mod, target=TARGET, runtime=RUNTIME, params=params)
 
 temp_dir = tvm.contrib.utils.tempdir()
-
 project = tvm.micro.generate_project(
     str(tvm.micro.get_microtvm_template_projects("crt")),
     lowered_tuned,
@@ -234,18 +249,19 @@ project = tvm.micro.generate_project(
 )
 
 # Compiling for physical hardware
-# --------------------------------------------------------------------------
-#    project = tvm.micro.generate_project(
-#        str(tvm.micro.get_microtvm_template_projects("zephyr")),
-#        lowered_tuned,
-#        temp_dir / "project",
-#        {
-#            "zephyr_board": BOARD,
-#            "west_cmd": "west",
-#            "verbose": False,
-#            "project_type": "host_driven",
-#        },
-#    )
+if use_physical_hw:
+    temp_dir = tvm.contrib.utils.tempdir()
+    project = tvm.micro.generate_project(
+        str(tvm.micro.get_microtvm_template_projects("zephyr")),
+        lowered_tuned,
+        temp_dir / "project",
+        {
+            "zephyr_board": BOARD,
+            "west_cmd": "west",
+            "verbose": False,
+            "project_type": "host_driven",
+        },
+    )
 
 project.build()
 project.flash()
diff --git a/docs/_downloads/9e8de33a5822b31748bfd76861009f92/deploy_classification.py b/docs/_downloads/9e8de33a5822b31748bfd76861009f92/deploy_classification.py
index 9e54413..f1e4926 100644
--- a/docs/_downloads/9e8de33a5822b31748bfd76861009f92/deploy_classification.py
+++ b/docs/_downloads/9e8de33a5822b31748bfd76861009f92/deploy_classification.py
@@ -206,7 +206,9 @@ with autotvm.tophub.context(target):
         if env.TARGET == "intelfocl":
             # multiple targets to run both on cpu and vta
             target = {"cpu": env.target_vta_cpu, "ext_dev": target}
-        with vta.build_config(opt_level=3, disabled_pass={"AlterOpLayout"}):
+        with vta.build_config(
+            opt_level=3, disabled_pass={"AlterOpLayout", "tir.CommonSubexprElimTIR"}
+        ):
             graph, lib, params = relay.build(
                 relay_prog, target=tvm.target.Target(target, host=env.target_host), params=params
             )
diff --git a/docs/_downloads/ab2eef18d10188532645b1d60fc7dd68/micro_ethosu.py b/docs/_downloads/ab2eef18d10188532645b1d60fc7dd68/micro_ethosu.py
index 0abd14d..ef34c7d 100644
--- a/docs/_downloads/ab2eef18d10188532645b1d60fc7dd68/micro_ethosu.py
+++ b/docs/_downloads/ab2eef18d10188532645b1d60fc7dd68/micro_ethosu.py
@@ -80,7 +80,7 @@ TVM to offload operators to the Ethos(TM)-U55 where possible.
 #     attrs==21.2.0
 #     cloudpickle==2.0.0
 #     decorator==5.1.0
-#     ethos-u-vela==2.1.1
+#     ethos-u-vela==3.2.0
 #     flatbuffers==1.12
 #     lxml==4.6.3
 #     nose==1.3.7
@@ -412,6 +412,12 @@ TVM to offload operators to the Ethos(TM)-U55 where possible.
 # `include files <https://github.com/apache/tvm/tree/main/apps/microtvm/ethosu/include>`_
 
 ################################################################################
+# .. note::
+#
+#   If you'd like to use FreeRTOS for task scheduling and queues, a sample application can be found here
+#   `demo_freertos.c <https://github.com/apache/tvm/blob/main/apps/microtvm/ethosu/src/demo_freertos.c>`
+
+################################################################################
 # Creating the linker script
 # --------------------------
 #
@@ -454,6 +460,13 @@ TVM to offload operators to the Ethos(TM)-U55 where possible.
 # `Makefile <https://github.com/apache/tvm/blob/main/apps/microtvm/ethosu/Makefile>`_
 
 ################################################################################
+# .. note::
+#
+#    If you're using FreeRTOS, the Makefile builds it from the specified FREERTOS_PATH:
+#     ``make FREERTOS_PATH=<FreeRTOS directory>``
+#
+
+################################################################################
 # Running the demo application
 # ----------------------------
 #
diff --git a/docs/_downloads/b3f997c945cc7de3e03a1e0c4c73fabd/convolution_opt.ipynb b/docs/_downloads/b3f997c945cc7de3e03a1e0c4c73fabd/convolution_opt.ipynb
index d4a8fd7..12140b7 100644
--- a/docs/_downloads/b3f997c945cc7de3e03a1e0c4c73fabd/convolution_opt.ipynb
+++ b/docs/_downloads/b3f997c945cc7de3e03a1e0c4c73fabd/convolution_opt.ipynb
@@ -159,7 +159,7 @@
       },
       "outputs": [],
       "source": [
-        "# This library facilitates 2D convolution testing\nfrom tvm.topi.testing import conv2d_nchw_python\n\n# Compile the TVM module\nmy_conv = vta.build(\n    s, [data, kernel, res], tvm.target.Target(\"ext_dev\", host=env.target_host), name=\"my_conv\"\n)\ntemp = utils.tempdir()\nmy_conv.save(temp.relpath(\"conv2d.o\"))\nremote.upload(temp.relpath(\"conv2d.o\"))\nf = remote.load_module(\"conv2d.o\")\n\n# Get the remote device context\nctx = remote.ext_dev(0)\n\n# Initialize the data [...]
+        "# This library facilitates 2D convolution testing\nfrom tvm.topi.testing import conv2d_nchw_python\n\n# Compile the TVM module\nwith vta.build_config(disabled_pass={\"tir.CommonSubexprElimTIR\"}):\n    my_conv = vta.build(\n        s, [data, kernel, res], tvm.target.Target(\"ext_dev\", host=env.target_host), name=\"my_conv\"\n    )\ntemp = utils.tempdir()\nmy_conv.save(temp.relpath(\"conv2d.o\"))\nremote.upload(temp.relpath(\"conv2d.o\"))\nf = remote.load_module(\"conv2d.o\")\n\ [...]
       ]
     },
     {
diff --git a/docs/_downloads/b954238c1884e83b45d2ae543d824f03/using_relay_viz.ipynb b/docs/_downloads/b954238c1884e83b45d2ae543d824f03/using_relay_viz.ipynb
new file mode 100644
index 0000000..70dc960
--- /dev/null
+++ b/docs/_downloads/b954238c1884e83b45d2ae543d824f03/using_relay_viz.ipynb
@@ -0,0 +1,151 @@
+{
+  "cells": [
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "%matplotlib inline"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "\nUse Relay Visualizer to Visualize Relay\n============================================================\n**Author**: `Chi-Wei Wang <https://github.com/chiwwang>`_\n\nRelay IR module can contain lots of operations. Although an individual\noperation is usually easy to understand, putting them together can cause\na complicated, hard-to-read graph. Things can get even worse with optimiztion-passes\ncoming into play.\n\nThis utility visualizes an IR module as nodes and edges. It defi [...]
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "from typing import (\n    Dict,\n    Union,\n    Tuple,\n    List,\n)\nimport tvm\nfrom tvm import relay\nfrom tvm.contrib import relay_viz\nfrom tvm.contrib.relay_viz.interface import (\n    VizEdge,\n    VizNode,\n    VizParser,\n)\nfrom tvm.contrib.relay_viz.terminal import (\n    TermGraph,\n    TermPlotter,\n    TermVizParser,\n)"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Define a Relay IR Module with multiple GlobalVar\n------------------------------------------------\nLet's build an example Relay IR Module containing multiple ``GlobalVar``.\nWe define an ``add`` function and call it in the main function.\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "data = relay.var(\"data\")\nbias = relay.var(\"bias\")\nadd_op = relay.add(data, bias)\nadd_func = relay.Function([data, bias], add_op)\nadd_gvar = relay.GlobalVar(\"AddFunc\")\n\ninput0 = relay.var(\"input0\")\ninput1 = relay.var(\"input1\")\ninput2 = relay.var(\"input2\")\nadd_01 = relay.Call(add_gvar, [input0, input1])\nadd_012 = relay.Call(add_gvar, [input2, add_01])\nmain_func = relay.Function([input0, input1, input2], add_012)\nmain_gvar = relay.GlobalVar(\"main\")\n\nmod  [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Render the graph with Relay Visualizer on the terminal\n------------------------------------------------------\nThe terminal can show a Relay IR module in text similar to clang AST-dump.\nWe should see ``main`` and ``AddFunc`` function. ``AddFunc`` is called twice in the ``main`` function.\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "viz = relay_viz.RelayVisualizer(mod)\nviz.render()"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Customize Parser for Interested Relay Types\n-------------------------------------------\nSometimes we want to emphasize interested information, or parse things differently for a specific usage.\nIt is possible to provide customized parsers as long as it obeys the interface.\nHere demostrate how to customize parsers for ``relay.var``.\nWe need to implement abstract interface :py:class:`tvm.contrib.relay_viz.interface.VizParser`.\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "class YourAwesomeParser(VizParser):\n    def __init__(self):\n        self._delegate = TermVizParser()\n\n    def get_node_edges(\n        self,\n        node: relay.Expr,\n        relay_param: Dict[str, tvm.runtime.NDArray],\n        node_to_id: Dict[relay.Expr, str],\n    ) -> Tuple[Union[VizNode, None], List[VizEdge]]:\n\n        if isinstance(node, relay.Var):\n            node = VizNode(node_to_id[node], \"AwesomeVar\", f\"name_hint {node.name_hint}\")\n            # no edg [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Pass the parser and an interested renderer to visualizer.\nHere we just the terminal renderer.\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "viz = relay_viz.RelayVisualizer(mod, {}, TermPlotter(), YourAwesomeParser())\nviz.render()"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Customization around Graph and Plotter\n-------------------------------------------\nBesides parsers, we can also customize graph and renderers by implementing\nabstract class :py:class:`tvm.contrib.relay_viz.interface.VizGraph` and\n:py:class:`tvm.contrib.relay_viz.interface.Plotter`.\nHere we override the ``TermGraph`` defined in ``terminal.py`` for easier demo.\nWe add a hook duplicating above ``AwesomeVar``, and make ``TermPlotter`` use the new class.\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "class AwesomeGraph(TermGraph):\n    def node(self, viz_node):\n        # add the node first\n        super().node(viz_node)\n        # if it's AwesomeVar, duplicate it.\n        if viz_node.type_name == \"AwesomeVar\":\n            duplicated_id = f\"duplciated_{viz_node.identity}\"\n            duplicated_type = \"double AwesomeVar\"\n            super().node(VizNode(duplicated_id, duplicated_type, \"\"))\n            # connect the duplicated var to the original one\n           [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Summary\n-------\nThis tutorial demonstrates the usage of Relay Visualizer and customization.\nThe class :py:class:`tvm.contrib.relay_viz.RelayVisualizer` is composed of interfaces\ndefined in ``interface.py``.\n\nIt is aimed for quick look-then-fix iterations.\nThe constructor arguments are intended to be simple, while the customization is still\npossible through a set of interface classes.\n\n\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.9"
+    }
+  },
+  "nbformat": 4,
+  "nbformat_minor": 0
+}
\ No newline at end of file
diff --git a/docs/_downloads/cb089f2129f9829a01cc54eb81528811/using_relay_viz.py b/docs/_downloads/cb089f2129f9829a01cc54eb81528811/using_relay_viz.py
new file mode 100644
index 0000000..f61fc41
--- /dev/null
+++ b/docs/_downloads/cb089f2129f9829a01cc54eb81528811/using_relay_viz.py
@@ -0,0 +1,159 @@
+# 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.
+# pylint: disable=line-too-long
+"""
+Use Relay Visualizer to Visualize Relay
+============================================================
+**Author**: `Chi-Wei Wang <https://github.com/chiwwang>`_
+
+Relay IR module can contain lots of operations. Although an individual
+operation is usually easy to understand, putting them together can cause
+a complicated, hard-to-read graph. Things can get even worse with optimiztion-passes
+coming into play.
+
+This utility visualizes an IR module as nodes and edges. It defines a set of interfaces including
+parser, plotter(renderer), graph, node, and edges.
+A default parser is provided. Users can implement their own renderers to render the graph.
+
+Here we use a renderer rendering graph in the text-form.
+It is a lightweight, AST-like visualizer, inspired by `clang ast-dump <https://clang.llvm.org/docs/IntroductionToTheClangAST.html>`_.
+We will introduce how to implement customized parsers and renderers through interface classes.
+"""
+from typing import (
+    Dict,
+    Union,
+    Tuple,
+    List,
+)
+import tvm
+from tvm import relay
+from tvm.contrib import relay_viz
+from tvm.contrib.relay_viz.interface import (
+    VizEdge,
+    VizNode,
+    VizParser,
+)
+from tvm.contrib.relay_viz.terminal import (
+    TermGraph,
+    TermPlotter,
+    TermVizParser,
+)
+
+######################################################################
+# Define a Relay IR Module with multiple GlobalVar
+# ------------------------------------------------
+# Let's build an example Relay IR Module containing multiple ``GlobalVar``.
+# We define an ``add`` function and call it in the main function.
+data = relay.var("data")
+bias = relay.var("bias")
+add_op = relay.add(data, bias)
+add_func = relay.Function([data, bias], add_op)
+add_gvar = relay.GlobalVar("AddFunc")
+
+input0 = relay.var("input0")
+input1 = relay.var("input1")
+input2 = relay.var("input2")
+add_01 = relay.Call(add_gvar, [input0, input1])
+add_012 = relay.Call(add_gvar, [input2, add_01])
+main_func = relay.Function([input0, input1, input2], add_012)
+main_gvar = relay.GlobalVar("main")
+
+mod = tvm.IRModule({main_gvar: main_func, add_gvar: add_func})
+
+######################################################################
+# Render the graph with Relay Visualizer on the terminal
+# ------------------------------------------------------
+# The terminal can show a Relay IR module in text similar to clang AST-dump.
+# We should see ``main`` and ``AddFunc`` function. ``AddFunc`` is called twice in the ``main`` function.
+viz = relay_viz.RelayVisualizer(mod)
+viz.render()
+
+######################################################################
+# Customize Parser for Interested Relay Types
+# -------------------------------------------
+# Sometimes we want to emphasize interested information, or parse things differently for a specific usage.
+# It is possible to provide customized parsers as long as it obeys the interface.
+# Here demostrate how to customize parsers for ``relay.var``.
+# We need to implement abstract interface :py:class:`tvm.contrib.relay_viz.interface.VizParser`.
+class YourAwesomeParser(VizParser):
+    def __init__(self):
+        self._delegate = TermVizParser()
+
+    def get_node_edges(
+        self,
+        node: relay.Expr,
+        relay_param: Dict[str, tvm.runtime.NDArray],
+        node_to_id: Dict[relay.Expr, str],
+    ) -> Tuple[Union[VizNode, None], List[VizEdge]]:
+
+        if isinstance(node, relay.Var):
+            node = VizNode(node_to_id[node], "AwesomeVar", f"name_hint {node.name_hint}")
+            # no edge is introduced. So return an empty list.
+            return node, []
+
+        # delegate other types to the other parser.
+        return self._delegate.get_node_edges(node, relay_param, node_to_id)
+
+
+######################################################################
+# Pass the parser and an interested renderer to visualizer.
+# Here we just the terminal renderer.
+viz = relay_viz.RelayVisualizer(mod, {}, TermPlotter(), YourAwesomeParser())
+viz.render()
+
+######################################################################
+# Customization around Graph and Plotter
+# -------------------------------------------
+# Besides parsers, we can also customize graph and renderers by implementing
+# abstract class :py:class:`tvm.contrib.relay_viz.interface.VizGraph` and
+# :py:class:`tvm.contrib.relay_viz.interface.Plotter`.
+# Here we override the ``TermGraph`` defined in ``terminal.py`` for easier demo.
+# We add a hook duplicating above ``AwesomeVar``, and make ``TermPlotter`` use the new class.
+class AwesomeGraph(TermGraph):
+    def node(self, viz_node):
+        # add the node first
+        super().node(viz_node)
+        # if it's AwesomeVar, duplicate it.
+        if viz_node.type_name == "AwesomeVar":
+            duplicated_id = f"duplciated_{viz_node.identity}"
+            duplicated_type = "double AwesomeVar"
+            super().node(VizNode(duplicated_id, duplicated_type, ""))
+            # connect the duplicated var to the original one
+            super().edge(VizEdge(duplicated_id, viz_node.identity))
+
+
+# override TermPlotter to use `AwesomeGraph` instead
+class AwesomePlotter(TermPlotter):
+    def create_graph(self, name):
+        self._name_to_graph[name] = AwesomeGraph(name)
+        return self._name_to_graph[name]
+
+
+viz = relay_viz.RelayVisualizer(mod, {}, AwesomePlotter(), YourAwesomeParser())
+viz.render()
+
+######################################################################
+# Summary
+# -------
+# This tutorial demonstrates the usage of Relay Visualizer and customization.
+# The class :py:class:`tvm.contrib.relay_viz.RelayVisualizer` is composed of interfaces
+# defined in ``interface.py``.
+#
+# It is aimed for quick look-then-fix iterations.
+# The constructor arguments are intended to be simple, while the customization is still
+# possible through a set of interface classes.
+#
diff --git a/docs/_downloads/dabb6b43ea9ef9d7bd1a3912001deace/build_gcn.py b/docs/_downloads/dabb6b43ea9ef9d7bd1a3912001deace/build_gcn.py
index 2dcc7ba..d76baec 100644
--- a/docs/_downloads/dabb6b43ea9ef9d7bd1a3912001deace/build_gcn.py
+++ b/docs/_downloads/dabb6b43ea9ef9d7bd1a3912001deace/build_gcn.py
@@ -119,7 +119,6 @@ num_classes: int
     dimension of model output (Number of classes)
 """
 dataset = "cora"
-
 g, data = load_dataset(dataset)
 
 num_layers = 1
diff --git a/docs/_downloads/eb483c672b88006c331115968e0ffd9b/micro_tvmc.py b/docs/_downloads/eb483c672b88006c331115968e0ffd9b/micro_tvmc.py
new file mode 100644
index 0000000..423e0f1
--- /dev/null
+++ b/docs/_downloads/eb483c672b88006c331115968e0ffd9b/micro_tvmc.py
@@ -0,0 +1,198 @@
+# 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.
+
+"""
+.. _tutorial-micro-tvmc:
+
+Executing a Tiny Model with TVMC Micro
+======================================
+**Author**: `Mehrdad Hessar <https://github.com/mehrdadh>`_
+
+This tutorial explains how to compile a tiny model for a micro device,
+build a program on Zephyr platform to execute this model, flash the program
+and run the model all using `tvmc micro` command.
+"""
+
+######################################################################
+# .. note::
+#     This tutorial is explaining using TVMC Mirco on Zephyr platform. You need
+#     to install Zephyr dependencies before processing with this tutorial. Alternatively,
+#     you can run this tutorial in one of the following ways which has Zephyr depencencies already installed.
+#
+#     * Use `microTVM Reference Virtual Machines <https://tvm.apache.org/docs/how_to/work_with_microtvm/micro_reference_vm.html#sphx-glr-how-to-work-with-microtvm-micro-reference-vm-py>`_.
+#     * Use QEMU docker image provided by TVM. Following these you will download and login to the docker image:
+#
+#     .. code-block:: bash
+#
+#       cd tvm
+#       ./docker/bash.sh tlcpack/ci-qemu
+#
+
+
+############################################################
+# Using TVMC Micro
+############################################################
+#
+# TVMC is a command-line tool which is installed as a part of TVM Python packages. Accessing this
+# package varies based on your machine setup. In many cases, you can use the ``tvmc`` command directly.
+# Alternatively, if you have TVM as a Python module on your ``$PYTHONPATH``, you can access this
+# driver with ``python -m tvm.driver.tvmc`` command. This tutorial will use TVMC command as
+# ``tvmc`` for simplicity.
+#
+# To check if you have TVMC command installed on your machine, you can run:
+#
+# .. code-block:: bash
+#
+#     tvmc --help
+#
+# To compile a model for microtvm we use ``tvmc compile`` subcommand. The output of this command
+# is used in next steps with ``tvmc micro`` subcommands. You can check the availability of TVMC Micro using:
+#
+# .. code-block:: bash
+#
+#     tvmc micro --help
+#
+# The main tasks that you can perform using ``tvmc micro`` are ``create``, ``build`` and ``flash``.
+# To read about specific options under a givern subcommand, use
+# ``tvmc micro <subcommand> --help``. We will use each subcommand in this tutorial.
+#
+
+############################################################
+# Obtain a Tiny Model
+############################################################
+#
+# For this tutorial, we will use Magic Wand model from tflite micro. Magic Wand is a
+# Depthwise Convolution Layer model which recognizes gestures with an accelerometer.
+#
+# For this tutorial we will be using the model in tflite format.
+#
+# .. code-block:: bash
+#
+#     wget https://github.com/tensorflow/tflite-micro/raw/main/tensorflow/lite/micro/examples/magic_wand/magic_wand.tflite
+#
+
+############################################################
+# Compiling a TFLite model to a Model Library Format
+############################################################
+#
+# Model Library Format (MLF) is an output format that TVM provides for micro targets. MLF is a tarball
+# containing a file for each piece of the TVM compiler output which can be used on micro targets outside
+# TVM environment. Read more about `Model Library Format <https://tvm.apache.org/docs//arch/model_library_format.html>`_.
+#
+# Here, we generate a MLF file for ``qemu_x86`` Zephyr board. To generate MLF output for the ``magic_wand`` tflite model:
+#
+# .. code-block:: bash
+#
+#     tvmc compile magic_wand.tflite \
+#       --target='c -keys=cpu -link-params=0 -model=host' \
+#       --runtime=crt \
+#       --runtime-crt-system-lib 1 \
+#       --executor='graph' \
+#       --executor-graph-link-params 0 \
+#       --output model.tar \
+#       --output-format mlf \
+#       --pass-config tir.disable_vectorize=1 \
+#       --disabled-pass=AlterOpLayout
+#
+# This will generate a ``model.tar`` file which contains TVM compiler output files. To run this command for
+# a different Zephyr device, you need to update ``target``. For instance, for ``nrf5340dk_nrf5340_cpuapp`` board
+# the target is ``--target='c -keys=cpu -link-params=0 -model=nrf5340dk'``.
+#
+
+
+############################################################
+# Create a Zephyr Project Using Model Library Format
+############################################################
+#
+# To generate a Zephyr project we use TVM Micro subcommand ``create``. We pass the MLF format and the path
+# for the project to ``create`` subcommand along with project options. Project options for each
+# platform (Zephyr/Arduino) are defined in their Project API server file. To generate Zephyr project, run:
+#
+# .. code-block:: bash
+#
+#     tvmc micro create \
+#       project \
+#       model.tar \
+#       zephyr \
+#       --project-option project_type=host_driven zephyr_board=qemu_x86
+#
+# This will generate a ``Host-Driven`` Zephyr project for ``qemu_x86`` Zephyr board. In Host-Driven template project,
+# the Graph Executor will run on host and perform the model execution on Zephyr device by issuing commands to the
+# device using an RPC mechanism. Read more about `Host-Driven Execution <https://tvm.apache.org/docs/arch/microtvm_design.html#host-driven-execution>`_.
+#
+# To get more information about TVMC Micro ``create`` subcommand:
+#
+# .. code-block:: bash
+#
+#     tvmc micro create --help
+#
+
+############################################################
+# Build and Flash Zephyr Project Using TVMC Micro
+############################################################
+#
+# Next step is to build the Zephyr project which includes TVM generated code for running the tiny model, Zephyr
+# template code to run a model in Host-Driven mode and TVM runtime source/header files. To build the project:
+#
+# .. code-block:: bash
+#
+#     tvmc micro build \
+#       project \
+#       zephyr \
+#       --project-option zephyr_board=qemu_x86
+#
+# This will build the project in ``project`` directory and generates binary files under ``project/build``. To build
+# Zephyr project for a different Zephyr board, change ``zephyr_board`` project option.
+#
+# Next, we flash the Zephyr binary file to Zephyr device. For ``qemu_x86`` Zephyr board this step does not
+# actually perform any action since QEMU will be used, however you need this step for physical hardware.
+#
+# .. code-block:: bash
+#
+#     tvmc micro flash \
+#       project \
+#       zephyr \
+#       --project-option zephyr_board=qemu_x86
+#
+
+############################################################
+# Run Tiny Model on Micro Target
+############################################################
+#
+# After flashing the device, the compiled model and TVM RPC server are programmed on the device.
+# The Zephyr board is waiting for host to open a communication channel. MicroTVM devices typicall communicate
+# using a serial communication (UART). To run the flashed model on the device using TVMC, we use ``tvmc run`` subcommand
+# and pass ``--device micro`` to specify the device type. This command will open a communication channel, set input
+# values using ``Graph Executor`` on host and run full model on the device. Then it gets output from the device.
+#
+# .. code-block:: bash
+#
+#     tvmc run \
+#       --device micro \
+#       project \
+#       --project-option zephyr_board=qemu_x86 \
+#       --fill-mode ones
+#       --print-top 4
+#     # Output:
+#     #
+#     # INFO:__main__:b'[100%] [QEMU] CPU: qemu32,+nx,+pae\n'
+#     # remote: microTVM Zephyr runtime - running
+#     # INFO:__main__:b'[100%] Built target run\n'
+#     # [[3.         1.         2.         0.        ]
+#     # [0.47213247 0.41364592 0.07525456 0.03896701]]
+#
+# Specifically, this command sets the input of the model to all ones and shows the four values of the output with their indices.
diff --git a/docs/_downloads/efe0b02e219b28e0bd85fbdda35ba8ac/tvmc_command_line_driver.ipynb b/docs/_downloads/efe0b02e219b28e0bd85fbdda35ba8ac/tvmc_command_line_driver.ipynb
index 10463ea..d060bd8 100644
--- a/docs/_downloads/efe0b02e219b28e0bd85fbdda35ba8ac/tvmc_command_line_driver.ipynb
+++ b/docs/_downloads/efe0b02e219b28e0bd85fbdda35ba8ac/tvmc_command_line_driver.ipynb
@@ -29,7 +29,7 @@
       "cell_type": "markdown",
       "metadata": {},
       "source": [
-        "Obtaining the Model\n-------------------\n\nFor this tutorial, we will be working with ResNet-50 v2. ResNet-50 is a\nconvolutional neural network that is 50 layers deep and designed to classify\nimages. The model we will be using has been pre-trained on more than a\nmillion images with 1000 different classifications. The network has an input\nimage size of 224x224. If you are interested exploring more of how the\nResNet-50 model is structured, we recommend downloading `Netron\n< [...]
+        "Obtaining the Model\n-------------------\n\nFor this tutorial, we will be working with ResNet-50 v2. ResNet-50 is a\nconvolutional neural network that is 50 layers deep and designed to classify\nimages. The model we will be using has been pre-trained on more than a\nmillion images with 1000 different classifications. The network has an input\nimage size of 224x224. If you are interested exploring more of how the\nResNet-50 model is structured, we recommend downloading `Netron\n< [...]
       ]
     },
     {
diff --git a/docs/_downloads/f83ba3df2d52f9b54cf141114359481a/micro_autotune.ipynb b/docs/_downloads/f83ba3df2d52f9b54cf141114359481a/micro_autotune.ipynb
index ec0c070..d318e5b 100644
--- a/docs/_downloads/f83ba3df2d52f9b54cf141114359481a/micro_autotune.ipynb
+++ b/docs/_downloads/f83ba3df2d52f9b54cf141114359481a/micro_autotune.ipynb
@@ -15,7 +15,7 @@
       "cell_type": "markdown",
       "metadata": {},
       "source": [
-        "\n\nAutotuning with micro TVM\n=========================\n**Authors**:\n`Andrew Reusch <https://github.com/areusch>`_,\n`Mehrdad Hessar <https://github.com/mehrdadh>`_\n\nThis tutorial explains how to autotune a model using the C runtime.\n\n"
+        "\n\nAutotuning with microTVM\n=========================\n**Authors**:\n`Andrew Reusch <https://github.com/areusch>`_,\n`Mehrdad Hessar <https://github.com/mehrdadh>`_\n\nThis tutorial explains how to autotune a model using the C runtime.\n\n"
       ]
     },
     {
@@ -26,7 +26,7 @@
       },
       "outputs": [],
       "source": [
-        "import numpy as np\nimport subprocess\nimport pathlib\n\nimport tvm\nfrom tvm.relay.backend import Executor, Runtime"
+        "import os\nimport json\nimport numpy as np\nimport pathlib\n\nimport tvm\nfrom tvm.relay.backend import Runtime\n\nuse_physical_hw = bool(os.getenv(\"TVM_MICRO_USE_HW\"))"
       ]
     },
     {
@@ -51,7 +51,7 @@
       "cell_type": "markdown",
       "metadata": {},
       "source": [
-        "Defining the target #\n######################\n Now we define the TVM target that describes the execution environment. This looks very similar\n to target definitions from other microTVM tutorials. Alongside this we pick the C Runtime to code\n generate our model against.\n\n When running on physical hardware, choose a target and a board that\n describe the hardware. There are multiple hardware targets that could be selected from\n PLATFORM list in this tutorial. You can chose t [...]
+        "Defining the target\n######################\n Now we define the TVM target that describes the execution environment. This looks very similar\n to target definitions from other microTVM tutorials. Alongside this we pick the C Runtime to code\n generate our model against.\n\n When running on physical hardware, choose a target and a board that\n describe the hardware. There are multiple hardware targets that could be selected from\n PLATFORM list in this tutorial. You can chose the [...]
       ]
     },
     {
@@ -62,14 +62,14 @@
       },
       "outputs": [],
       "source": [
-        "RUNTIME = Runtime(\"crt\", {\"system-lib\": True})\nTARGET = tvm.target.target.micro(\"host\")\n\n# Compiling for physical hardware\n# --------------------------------------------------------------------------\n#  When running on physical hardware, choose a TARGET and a BOARD that describe the hardware. The\n#  STM32L4R5ZI Nucleo target and board is chosen in the example below.\n#\n#    TARGET = tvm.target.target.micro(\"stm32l4r5zi\")\n#    BOARD = \"nucleo_l4r5zi\""
+        "RUNTIME = Runtime(\"crt\", {\"system-lib\": True})\nTARGET = tvm.target.target.micro(\"host\")\n\n# Compiling for physical hardware\n# --------------------------------------------------------------------------\n#  When running on physical hardware, choose a TARGET and a BOARD that describe the hardware. The\n#  STM32L4R5ZI Nucleo target and board is chosen in the example below.\nif use_physical_hw:\n    boards_file = pathlib.Path(tvm.micro.get_microtvm_template_projects(\"zephyr [...]
       ]
     },
     {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
-        "Extracting tuning tasks\n########################\n Not all operators in the Relay program printed above can be tuned. Some are so trivial that only\n a single implementation is defined; others don't make sense as tuning tasks. Using\n `extract_from_program`, you can produce a list of tunable tasks.\n\n Because task extraction involves running the compiler, we first configure the compiler's\n transformation passes; we'll apply the same configuration later on during autotuning.\n\n"
+        "Extracting tuning tasks\n########################\n Not all operators in the Relay program printed above can be tuned. Some are so trivial that only\n a single implementation is defined; others don't make sense as tuning tasks. Using\n `extract_from_program`, you can produce a list of tunable tasks.\n\n Because task extraction involves running the compiler, we first configure the compiler's\n transformation passes; we'll apply the same configuration later on during autotuning.\n\n\n"
       ]
     },
     {
@@ -98,14 +98,14 @@
       },
       "outputs": [],
       "source": [
-        "module_loader = tvm.micro.AutoTvmModuleLoader(\n    template_project_dir=pathlib.Path(tvm.micro.get_microtvm_template_projects(\"crt\")),\n    project_options={\"verbose\": False},\n)\nbuilder = tvm.autotvm.LocalBuilder(\n    n_parallel=1,\n    build_kwargs={\"build_option\": {\"tir.disable_vectorize\": True}},\n    do_fork=True,\n    build_func=tvm.micro.autotvm_build_func,\n    runtime=RUNTIME,\n)\nrunner = tvm.autotvm.LocalRunner(number=1, repeat=1, timeout=100, module_loader [...]
+        "module_loader = tvm.micro.AutoTvmModuleLoader(\n    template_project_dir=pathlib.Path(tvm.micro.get_microtvm_template_projects(\"crt\")),\n    project_options={\"verbose\": False},\n)\nbuilder = tvm.autotvm.LocalBuilder(\n    n_parallel=1,\n    build_kwargs={\"build_option\": {\"tir.disable_vectorize\": True}},\n    do_fork=True,\n    build_func=tvm.micro.autotvm_build_func,\n    runtime=RUNTIME,\n)\nrunner = tvm.autotvm.LocalRunner(number=1, repeat=1, timeout=100, module_loader [...]
       ]
     },
     {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
-        "Timing the untuned program\n###########################\n For comparison, let's compile and run the graph without imposing any autotuning schedules. TVM\n will select a randomly-tuned implementation for each operator, which should not perform as well as\n the tuned operator.\n\n"
+        "Run Autotuning\n#########################\n Now we can run autotuning separately on each extracted task on microTVM device.\n\n\n"
       ]
     },
     {
@@ -116,7 +116,25 @@
       },
       "outputs": [],
       "source": [
-        "with pass_context:\n    lowered = tvm.relay.build(relay_mod, target=TARGET, runtime=RUNTIME, params=params)\n\ntemp_dir = tvm.contrib.utils.tempdir()\n\nproject = tvm.micro.generate_project(\n    str(tvm.micro.get_microtvm_template_projects(\"crt\")),\n    lowered,\n    temp_dir / \"project\",\n    {\"verbose\": False},\n)\n\n# Compiling for physical hardware\n# --------------------------------------------------------------------------\n#    project = tvm.micro.generate_project( [...]
+        "autotune_log_file = pathlib.Path(\"microtvm_autotune.log.txt\")\nif os.path.exists(autotune_log_file):\n    os.remove(autotune_log_file)\n\nnum_trials = 10\nfor task in tasks:\n    tuner = tvm.autotvm.tuner.GATuner(task)\n    tuner.tune(\n        n_trial=num_trials,\n        measure_option=measure_option,\n        callbacks=[\n            tvm.autotvm.callback.log_to_file(str(autotune_log_file)),\n            tvm.autotvm.callback.progress_bar(num_trials, si_prefix=\"M\"),\n       [...]
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {},
+      "source": [
+        "Timing the untuned program\n###########################\n For comparison, let's compile and run the graph without imposing any autotuning schedules. TVM\n will select a randomly-tuned implementation for each operator, which should not perform as well as\n the tuned operator.\n\n\n"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": null,
+      "metadata": {
+        "collapsed": false
+      },
+      "outputs": [],
+      "source": [
+        "with pass_context:\n    lowered = tvm.relay.build(relay_mod, target=TARGET, runtime=RUNTIME, params=params)\n\ntemp_dir = tvm.contrib.utils.tempdir()\nproject = tvm.micro.generate_project(\n    str(tvm.micro.get_microtvm_template_projects(\"crt\")),\n    lowered,\n    temp_dir / \"project\",\n    {\"verbose\": False},\n)\n\n# Compiling for physical hardware\nif use_physical_hw:\n    temp_dir = tvm.contrib.utils.tempdir()\n    project = tvm.micro.generate_project(\n        str(tv [...]
       ]
     },
     {
@@ -134,7 +152,7 @@
       },
       "outputs": [],
       "source": [
-        "with tvm.autotvm.apply_history_best(\"microtvm_autotune.log.txt\"):\n    with pass_context:\n        lowered_tuned = tvm.relay.build(relay_mod, target=TARGET, runtime=RUNTIME, params=params)\n\ntemp_dir = tvm.contrib.utils.tempdir()\n\nproject = tvm.micro.generate_project(\n    str(tvm.micro.get_microtvm_template_projects(\"crt\")),\n    lowered_tuned,\n    temp_dir / \"project\",\n    {\"verbose\": False},\n)\n\n# Compiling for physical hardware\n# ----------------------------- [...]
+        "with tvm.autotvm.apply_history_best(str(autotune_log_file)):\n    with pass_context:\n        lowered_tuned = tvm.relay.build(relay_mod, target=TARGET, runtime=RUNTIME, params=params)\n\ntemp_dir = tvm.contrib.utils.tempdir()\nproject = tvm.micro.generate_project(\n    str(tvm.micro.get_microtvm_template_projects(\"crt\")),\n    lowered_tuned,\n    temp_dir / \"project\",\n    {\"verbose\": False},\n)\n\n# Compiling for physical hardware\nif use_physical_hw:\n    temp_dir = tvm. [...]
       ]
     }
   ],
diff --git a/docs/_images/sphx_glr_micro_tvmc_thumb.png b/docs/_images/sphx_glr_micro_tvmc_thumb.png
new file mode 100644
index 0000000..233f8e6
Binary files /dev/null and b/docs/_images/sphx_glr_micro_tvmc_thumb.png differ
diff --git a/docs/_images/sphx_glr_tvmc_python_thumb.png b/docs/_images/sphx_glr_tvmc_python_thumb.png
new file mode 100644
index 0000000..233f8e6
Binary files /dev/null and b/docs/_images/sphx_glr_tvmc_python_thumb.png differ
diff --git a/docs/_images/sphx_glr_using_relay_viz_thumb.png b/docs/_images/sphx_glr_using_relay_viz_thumb.png
new file mode 100644
index 0000000..233f8e6
Binary files /dev/null and b/docs/_images/sphx_glr_using_relay_viz_thumb.png differ
diff --git a/docs/_sources/arch/benchmark.rst.txt b/docs/_sources/arch/benchmark.rst.txt
index fa3e32d..8217a4f 100644
--- a/docs/_sources/arch/benchmark.rst.txt
+++ b/docs/_sources/arch/benchmark.rst.txt
@@ -104,7 +104,7 @@ Here is sample data encoded as JSON:
     },
     "workload_metadata":{
       "class":"vision",
-      "doc_url":"https://github.com/onnx/models/blob/master/vision/body_analysis/arcface/README.md",
+      "doc_url":"https://github.com/onnx/models/blob/main/vision/body_analysis/arcface/README.md",
       "md5":"66074b860f905295aab5a842be57f37d",
       "opset":8,
       "type":"body_analysis",
diff --git a/docs/_sources/arch/inferbound.rst.txt b/docs/_sources/arch/inferbound.rst.txt
index 28e034d..9c78a9d 100644
--- a/docs/_sources/arch/inferbound.rst.txt
+++ b/docs/_sources/arch/inferbound.rst.txt
@@ -40,7 +40,7 @@ Therefore, let's review the Range and IterVar classes:
    	public:
    		Expr min;
    		Expr extent;
-   		// remainder ommitted
+   		// remainder omitted
    	};
    	}}
 
@@ -49,7 +49,7 @@ Therefore, let's review the Range and IterVar classes:
    	public:
    		Range dom;
    		Var var;
-   		// remainder ommitted
+   		// remainder omitted
    	};
    }
 
@@ -413,7 +413,7 @@ If stage C is computed at axis j of stage D, we say that C is  *attached*  to ax
 
    class StageNode : public Node {
    public:
-       // ommitted
+       // omitted
 
        // For compute_at, attach_type = kScope
        AttachType attach_type;
@@ -425,7 +425,7 @@ If stage C is computed at axis j of stage D, we say that C is  *attached*  to ax
        // The stage passed to compute_at, e.g., D
        Stage attach_stage;
 
-       // ommitted
+       // omitted
    };
 
 Consider the above examples again. In order for InferBound to determine how many elements of C must be computed, it is important to know whether the computation of C occurs within the scope of a leaf variable of D, or above that scope. For example, in Ex. 1, the computation of C occurs  *above*  the scopes of all of D's leaf variables. In Ex. 2, the computation of C occurs  *within*  the scope of all of D's leaf variables. In Ex. 3, C occurs within the scope of D's i, but above the scope [...]
diff --git a/docs/_sources/contribute/ci.rst.txt b/docs/_sources/contribute/ci.rst.txt
new file mode 100644
index 0000000..7152f16
--- /dev/null
+++ b/docs/_sources/contribute/ci.rst.txt
@@ -0,0 +1,176 @@
+..  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.
+
+.. _ci_guide:
+
+Using TVM's CI
+==============
+
+TVM uses Jenkins for running Linux continuous integration (CI) tests on
+`branches <https://ci.tlcpack.ai/job/tvm/>`_ and
+`pull requests <https://ci.tlcpack.ai/job/tvm/view/change-requests/>`_ through a
+build configuration specified in a `Jenkinsfile <https://github.com/apache/tvm/blob/main/Jenkinsfile>`_.
+Non-critical jobs run in GitHub Actions for Windows and MacOS jobs.
+
+A standard CI run looks something like this viewed in `Jenkins' BlueOcean viewer <https://ci.tlcpack.ai/blue/organizations/jenkins/tvm/activity>`_.
+CI runs usually take several hours to complete and pull requests (PRs) cannot be merged before CI
+has successfully completed. To diagnose failing steps, click through to the failing
+pipeline stage then to the failing step to see the output logs.
+
+.. image:: https://github.com/tlc-pack/web-data/raw/main/images/contribute/ci.png
+  :width: 800
+  :alt: The Jenkins UI for a CI run
+
+
+Debugging Failures
+******************
+
+When CI fails for some reason, there are several methods to diagnose the issue.
+
+Jenkins Logs
+------------
+
+.. |pytest| replace:: ``pytest``
+.. _pytest: https://docs.pytest.org/en/6.2.x/
+
+The first place to look for a failure is in the CI logs, follow the red Xs on
+the failing job to view the logs. Note:
+
+* Jenkins does not display the full log by default, at the top of the log viewer
+  is a button "Show complete log" which will take you to a plaintext version of the log
+* |pytest|_ failures are summarized at the bottom of the log but you will likely
+  need to scroll up to view the actual failure.
+
+Reproduce Failures
+------------------
+
+Most TVM Python tests run under |pytest|_ and
+can be run as described in :ref:`pr-testing`. For a closer environment to the one
+than runs in CI you can run the docker images directly, build TVM, and execute
+tests inside the container. See :ref:`docker_images` for details.
+
+Keeping CI Green
+****************
+
+Developers rely on the TVM CI to get signal on their PRs before merging.
+Occasionally breakages slip through and break ``main``, which in turn causes
+the same error to show up on an PR that is based on the broken commit(s). Broken
+commits can be identified `through GitHub <https://github.com/apache/tvm/commits/main>`_
+via the commit status icon or via `Jenkins <https://ci.tlcpack.ai/blue/organizations/jenkins/tvm/activity?branch=main>`_.
+In these situations it is possible to either revert the offending commit or
+submit a forward fix to address the issue. It is up to the committer and commit
+author which option to choose, keeping in mind that a broken CI affects all TVM
+developers and should be fixed as soon as possible.
+
+Skip CI for Reverts
+-------------------
+
+For reverts and trivial forward fixes, adding ``[skip ci]`` to the revert's
+commit message will cause CI to shortcut and only run lint. Committers should
+take care that they only merge CI-skipped PRs to fix a failure on ``main`` and
+not in cases where the submitter wants to shortcut CI to merge a change faster.
+
+.. code:: bash
+
+  # Revert HEAD commit, make sure to insert '[skip ci]' at the beginning of
+  # the commit subject
+  git revert HEAD
+  git checkout -b my_fix
+  # After you have pushed your branch, create a PR as usual.
+  git push my_repo
+  # Example: Skip CI on a branch with an existing PR
+  # Adding this commit to an existing branch will cause a new CI run where
+  # Jenkins is skipped
+  git commit --allow-empty --message "[skip ci] Trigger skipped CI"
+  git push my_repo
+
+Handling Flaky Failures
+***********************
+
+.. https://stackoverflow.com/questions/4743845/format-text-in-a-link-in-restructuredtext/4836544#4836544
+.. |pytest's @xfail decorator| replace:: pytest's ``@xfail`` decorator
+.. _pytest's @xfail decorator: https://docs.pytest.org/en/6.2.x/skipping.html#xfail-mark-test-functions-as-expected-to-fail
+.. |strict=True| replace:: ``strict=True``
+.. _strict=True: https://docs.pytest.org/en/6.2.x/skipping.html#strict-parameter
+
+If you notice a failure on your PR that seems unrelated to your change, you should
+search `recent GitHub issues related to flaky tests <https://github.com/apache/tvm/issues?q=is%3Aissue+%5BCI+Problem%5D+Flaky+>`_ and
+`file a new issue <https://github.com/apache/tvm/issues/new?assignees=&labels=&template=ci-problem.md&title=%5BCI+Problem%5D+>`_
+if you don't see any reports of the failure. If a certain test or class of tests affects
+several PRs or commits on ``main`` with flaky failures, the test should be disabled via
+|pytest's @xfail decorator|_ with |strict=True|_ and the relevant issue linked in the
+disabling PR.
+
+.. code:: python
+
+    @pytest.mark.xfail(strict=False, reason="Flaky test: https://github.com/apache/tvm/issues/1234")
+    def test_something_flaky():
+        pass
+
+``ci-docker-staging``
+*********************
+
+The `ci-docker-staging <https://github.com/apache/tvm/tree/ci-docker-staging>`_
+branch is used to test updates to Docker images and ``Jenkinsfile`` changes. When
+running a build for a normal PR from a forked repository, Jenkins uses the code
+from the PR except for the ``Jenkinsfile`` itself, which comes from the base branch.
+When branches are built, the ``Jenkinsfile`` in the branch is used, so a committer
+with write access must push PRs to a branch in apache/tvm to properly test
+``Jenkinsfile`` changes. If your PR makes changes to the ``Jenkinsfile``, make sure
+to @ a `committer <https://github.com/apache/tvm/blob/main/CONTRIBUTORS.md>`_
+and ask them to push your PR as a branch to test the changes.
+
+.. _docker_images:
+
+Docker Images
+*************
+
+.. |top_of_the_Jenkinsfile| replace:: top of the ``Jenkinsfile``
+.. _top_of_the_Jenkinsfile: https://github.com/apache/tvm/blob/7481a297740f073b193a3f09b3e27f056e8c7f2e/Jenkinsfile#L48-L54
+
+Each CI job runs most of its work inside a Docker container, built from files
+in the `docker/ <https://github.com/apache/tvm/tree/main/docker>`_ folder. These
+files are built nightly in Jenkins via the `docker-images-ci <https://ci.tlcpack.ai/job/docker-images-ci/>`_ job.
+The images for these containers are hosted in the `tlcpack Docker Hub <https://hub.docker.com/u/tlcpack>`_
+and referenced at the |top_of_the_Jenkinsfile|_. These can be inspected and run
+locally via standard Docker commands.
+
+.. code:: bash
+
+    # Beware: CI images can be several GB in size
+    # Get a bare docker shell in the ci-gpu container
+    docker run -it tlcpack/ci-gpu:v0.78 /bin/bash
+
+``docker/bash.sh`` will automatically grab the latest image from the ``Jenkinsfile``
+and help in mounting your current directory.
+
+.. code:: bash
+
+    # Run the ci_cpu image specified in Jenkinsfile
+    cd tvm
+    bash docker/bash.sh ci_cpu
+    # the tvm directory is automatically mounted
+    # example: build tvm (note: this will overrwrite build/)
+    $ ./tests/scripts/task_config_build_cpu.sh
+    $ ./tests/scripts/task_build.sh build -j32
+
+
+Reporting Issues
+****************
+
+Issues with CI should be `reported on GitHub <https://github.com/apache/tvm/issues/new?assignees=&labels=&template=ci-problem.md&title=%5BCI+Problem%5D+>`_
+with a link to the relevant jobs, commits, or PRs.
diff --git a/docs/_sources/contribute/code_review.rst.txt b/docs/_sources/contribute/code_review.rst.txt
index 7785744..173f857 100644
--- a/docs/_sources/contribute/code_review.rst.txt
+++ b/docs/_sources/contribute/code_review.rst.txt
@@ -220,3 +220,11 @@ To do so -- please click on changes tab in the pull request, then select approve
 or comment on the code and click request changes.
 Code owner can decide if the code can be merged in case by case if some of the reviewers
 did not respond in time(e.g. a week) and existing reviews are sufficient.
+
+Reviewers
+~~~~~~~~~
+Reviewers should strive to leave timely feedback on pull requests for which their
+review was requested. Reviewing code is an important part of the project's health
+and should be considered a regular responsibility for contributors. Automated
+tooling helps out in this regard, as PRs with no activity for a set amount of
+time will get a bot comment pinging the relevant parties.
diff --git a/docs/_sources/contribute/committer_guide.rst.txt b/docs/_sources/contribute/committer_guide.rst.txt
index 6e553bd..3dc5bf0 100644
--- a/docs/_sources/contribute/committer_guide.rst.txt
+++ b/docs/_sources/contribute/committer_guide.rst.txt
@@ -92,7 +92,7 @@ when they actively manage outstanding PRs,
 but watch the community less frequently in the rest of the time.
 
 Remember that your merit will never go away, so please
-take your time and pace when contributing to the project:)
+take your time and pace when contributing to the project :)
 
 
 Broad Collaboration
diff --git a/docs/_sources/contribute/community.rst.txt b/docs/_sources/contribute/community.rst.txt
index 8867202..c41c7f3 100644
--- a/docs/_sources/contribute/community.rst.txt
+++ b/docs/_sources/contribute/community.rst.txt
@@ -17,8 +17,8 @@
 
 .. _community_guide:
 
-TVM Community Guideline
-=======================
+TVM Community Guidelines
+========================
 
 TVM adopts the Apache style model and governs by merit. We believe that it is important to create an inclusive community where everyone can use, contribute to, and influence the direction of the project. See `CONTRIBUTORS.md <https://github.com/apache/tvm/blob/main/CONTRIBUTORS.md>`_ for the current list of contributors.
 
@@ -42,7 +42,7 @@ Committers are individuals who are granted the write access to the project. A co
 - Quality of contributions: High-quality, readable code contributions indicated by pull requests that can be merged without a substantial code review.  History of creating clean, maintainable code and including good test cases. Informative code reviews to help other contributors that adhere to a good standard.
 - Community involvement: active participation in the discussion forum, promote the projects via tutorials, talks and outreach. We encourage committers to collaborate broadly, e.g. do code reviews and discuss designs with community members that they do not interact physically.
 
-The Project Management Committee(PMC) consists group of active committers that moderate the discussion, manage the project release, and proposes new committer/PMC members. Potential candidates are usually proposed via an internal discussion among PMCs, followed by a consensus approval, i.e. least 3 +1 votes, and no vetoes. Any veto must be accompanied by reasoning. PMCs should serve the community by upholding the community practices and guidelines TVM a better community for everyone. PMC [...]
+The `Project Management Committee (PMC) <https://projects.apache.org/committee.html?tvm>`_ consists group of active committers that moderate the discussion, manage the project release, and proposes new committer/PMC members. Potential candidates are usually proposed via an internal discussion among PMCs, followed by a consensus approval, (i.e. at least 3 +1 votes, and no vetoes). Any veto must be accompanied by reasoning. PMCs should serve the community by upholding the community practic [...]
 
 
 Reviewers
diff --git a/docs/_sources/contribute/document.rst.txt b/docs/_sources/contribute/document.rst.txt
index e3d12e8..ffd6349 100644
--- a/docs/_sources/contribute/document.rst.txt
+++ b/docs/_sources/contribute/document.rst.txt
@@ -26,7 +26,8 @@ it is a "simple, comprehensive and nearly universally-applicable scheme. It is
 proven in practice across a wide variety of fields and applications."
 
 This document describes the organization of TVM documentation, and how to write
-new documentation.
+new documentation. See `docs/README.md <https://github.com/apache/tvm/tree/main/docs#build-locally>`_
+for instructions on building the docs.
 
 The Four Document Types
 ***********************
@@ -40,8 +41,8 @@ without necessarily explaining why the software works the way it does. Those
 explanations can be saved for other document types. An introductory tutorial
 focuses on a successful first experience. These are the most important docs to
 turning newcomers into new users and developers. A fully end-to-end
-tutorial&mdash; from installing TVM and supporting ML software, to creating and
-training a model, to compiling to different architectures&mdash;will give a new
+tutorial — from installing TVM and supporting ML software, to creating and
+training a model, to compiling to different architectures — will give a new
 user the opportunity to use TVM in the most efficient way possible. A tutorial
 teaches a beginner something they need to know. This is in contrast with a
 how-to, which is meant to be an answer to a question that a user with some
@@ -92,7 +93,7 @@ Within these documents you can explore contradictory and conflicting position,
 and help the reader make sense of how and why the software was built the way it
 is. It's not the place for how-tos and descriptions on how to accomplish tasks.
 They instead focus on higher level concepts that help with the understanding of
-the project.  Generally these are written by the architects and developers of
+the project. Generally these are written by the architects and developers of
 the project, but can useful to help both users and developers to have a deeper
 understanding of why the software works the way it does, and how to contribute
 to it in ways that are consistent with the underlying design principles.
@@ -124,18 +125,22 @@ Technical Details
 *****************
 
 We use the `Sphinx <http://sphinx-doc.org>`_ for the main documentation.
-Sphinx support both the reStructuredText and markdown.  When possible, we
-encourage to use reStructuredText as it has richer features.  Note that the
-python doc-string and tutorials allow you to embed reStructuredText syntax.
+Sphinx supports both reStructuredText and markdown. When possible, we
+encourage reStructuredText as it has richer features. Note that the
+Python doc-string and tutorials allow you to embed reStructuredText syntax.
+
+See
+`docs/README.md <https://github.com/apache/tvm/tree/main/docs#build-locally>`_
+for instructions on building the docs.
 
 
 Python Reference Documentation
 ------------------------------
 
-We use `numpydoc <https://numpydoc.readthedocs.io/en/latest/>`_ format to
-document the function and classes.  The following snippet gives an example
-docstring.  We always document all the public functions, when necessary,
-provide an usage example of the features we support(as shown below).
+We use the `numpydoc <https://numpydoc.readthedocs.io/en/latest/>`_ format to
+document the function and classes. The following snippet gives an example
+docstring. We always document all the public functions, when necessary,
+provide an usage example of the features we support (as shown below).
 
 .. code:: python
 
@@ -167,19 +172,19 @@ provide an usage example of the features we support(as shown below).
         """
         return rv1
 
-Be careful to leave blank lines between sections of your documents.  In the
-above case, there has to be a blank line before `Parameters`, `Returns` and
-`Examples` in order for the doc to be built correctly. To add a new function to
-the doc, we need to add the `sphinx.autodoc
-<http://www.sphinx-doc.org/en/master/ext/autodoc.html>`_ rules to the
-`docs/api/python <https://github.com/apache/tvm/tree/main/docs/api/python>`_).
+Be careful to leave blank lines between sections of your documents. In the
+above case, there has to be a blank line before ``Parameters``, ``Returns`` and
+``Examples`` in order for the doc to be built correctly. To add a new function to
+the docs, we need to add the `sphinx.autodoc
+<http://www.sphinx-doc.org/en/master/ext/autodoc.html>`_ rules to
+`docs/reference/api/python <https://github.com/apache/tvm/tree/main/docs/reference/api/python>`_).
 You can refer to the existing files under this folder on how to add the
 functions.
 
 C++ Reference Documentation
 ---------------------------
 
-We use the doxgen format to document c++ functions.  The following snippet
+We use the doxygen format to document c++ functions. The following snippet
 shows an example of c++ docstring.
 
 .. code:: c++
@@ -200,15 +205,15 @@ add comments about code logics to improve readability.
 Sphinx Gallery How-Tos
 ----------------------
 
-We use the `sphinx-gallery <https://sphinx-gallery.github.io/>`_ to build many
-python how-tos.  You can find the source code under `gallery
-<https://github.com/apache/tvm/tree/main/gallery>`_ quite self explanatory.
+We use `sphinx-gallery <https://sphinx-gallery.github.io/>`_ to build many
+Python how-tos. You can find the source code under `gallery
+<https://github.com/apache/tvm/tree/main/gallery>`_.
 One thing that worth noting is that the comment blocks are written in
 reStructuredText instead of markdown so be aware of the syntax.
 
-The how-to code will run on our build server to generate the document page.  So
+The how-to code will run on our build server to generate the document page. So
 we may have a restriction like not being able to access a remote Raspberry Pi,
-in such case add a flag variable to the tutorial (e.g. `use_rasp`) and allow
+in such case add a flag variable to the tutorial (e.g. ``use_rasp``) and allow
 users to easily switch to the real device by changing one flag. Then use the
 existing environment to demonstrate the usage.
 
@@ -218,7 +223,7 @@ If you add a new categorization of how-to, you will need to add references to
 
 Refer to Another Location in the Document
 -----------------------------------------
-Please use sphinx's `:ref:` markup to refer to another location in the same doc.
+Please use sphinx's ``:ref:`` markup to refer to another location in the same doc.
 
 .. code-block:: rst
 
@@ -228,3 +233,21 @@ Please use sphinx's `:ref:` markup to refer to another location in the same doc.
    ----------
 
    You can use :ref:`document-my-section-tag` to refer to My Section.
+
+Documents with Images / Figures
+-------------------------------
+reStructuredText's `figure <https://docutils.sourceforge.io/docs/ref/rst/directives.html#figure>`_
+and `image <https://docutils.sourceforge.io/docs/ref/rst/directives.html#image>`_
+elements allow a document to include an image URL.
+
+Image files created for TVM documentation should reside in the `<https://github.com/tlc-pack/web-data>`_
+repository, while the `.rst` files *using* those images should reside in the main TVM repostitory
+(`<https://github.com/apache/tvm>`_).
+
+This will require two Github Pull Requests, one for the image files and another for the `.rst` files.
+Discussion between the contributor and reviewers may be necessary to coordinate the review process.
+
+*IMPORTANT NOTE:* When using two Pull Requests as described above, please merge the
+Pull Request in `<https://github.com/tlc-pack/web-data>`_ *before* merging
+the Pull Request in `<https://github.com/apache/tvm>`_.
+This helps ensure that all URL links in TVM's online documentation are valid.
diff --git a/docs/_sources/contribute/git_howto.rst.txt b/docs/_sources/contribute/git_howto.rst.txt
index 765153b..1271aad 100644
--- a/docs/_sources/contribute/git_howto.rst.txt
+++ b/docs/_sources/contribute/git_howto.rst.txt
@@ -23,39 +23,39 @@ Git Usage Tips
 
 Here are some tips for git workflow.
 
-How to resolve a conflict with `main`
--------------------------------------
+How to resolve a conflict with ``main``
+---------------------------------------
 
 - First rebase to most recent main
 
-.. code:: bash
+  .. code:: bash
 
-  # The first two steps can be skipped after you do it once.
-  git remote add upstream [url to tvm repo]
-  git fetch upstream
-  git rebase upstream/main
+    # The first two steps can be skipped after you do it once.
+    git remote add upstream [url to tvm repo]
+    git fetch upstream
+    git rebase upstream/main
 
 
-- The git may show some conflicts it cannot merge, say `conflicted.py`.
+- The git may show some conflicts it cannot merge, say ``conflicted.py``.
 
   - Manually modify the file to resolve the conflict.
   - After you resolved the conflict, mark it as resolved by
 
-.. code:: bash
+    .. code:: bash
 
-  git add conflicted.py
+      git add conflicted.py
 
 - Then you can continue rebase by
 
-.. code:: bash
+  .. code:: bash
 
-  git rebase --continue
+    git rebase --continue
 
 - Finally push to your fork, you may need to force push here.
 
-.. code:: bash
+  .. code:: bash
 
-  git push --force
+    git push --force
 
 
 How to combine multiple commits into one
@@ -66,35 +66,36 @@ to create a PR with set of meaningful commits. You can do it by following steps.
 
 - Before doing so, configure the default editor of git if you haven't done so before.
 
-.. code:: bash
+  .. code:: bash
 
-  git config core.editor the-editor-you-like
+    git config core.editor the-editor-you-like
 
 - Assume we want to merge last 3 commits, type the following commands
 
-.. code:: bash
+  .. code:: bash
 
-  git rebase -i HEAD~3
+    git rebase -i HEAD~3
 
-- It will pop up an text editor. Set the first commit as `pick`, and change later ones to `squash`.
+- It will pop up an text editor. Set the first commit as ``pick``, and change later ones to ``squash``.
 - After you saved the file, it will pop up another text editor to ask you modify the combined commit message.
 - Push the changes to your fork, you need to force push.
 
-.. code:: bash
+  .. code:: bash
 
-  git push --force
+    git push --force
 
 
 Reset to the most recent main branch
 ------------------------------------
 
 You can always use git reset to reset your version to the most recent main.
-Note that all your ***local changes will get lost***.
+Note that **all your local changes will get lost**.
 So only do it when you do not have local changes or when your pull request just get merged.
 
 .. code:: bash
 
-  git reset --hard [hash tag of main]
+  git fetch origin main
+  git reset --hard FETCH_HEAD
 
 
 Recover a Previous Commit after Reset
diff --git a/docs/_sources/contribute/index.rst.txt b/docs/_sources/contribute/index.rst.txt
index acacfdc..aa893db 100644
--- a/docs/_sources/contribute/index.rst.txt
+++ b/docs/_sources/contribute/index.rst.txt
@@ -48,4 +48,5 @@ Here are guidelines for contributing to various aspect of the project:
    error_handling
    pull_request
    git_howto
-   release_process
+   ci
+   release_process
\ No newline at end of file
diff --git a/docs/_sources/contribute/pull_request.rst.txt b/docs/_sources/contribute/pull_request.rst.txt
index 23d2b14..226e693 100644
--- a/docs/_sources/contribute/pull_request.rst.txt
+++ b/docs/_sources/contribute/pull_request.rst.txt
@@ -86,6 +86,8 @@ Here is the protocol to update CI image:
 - Tag the new version as the latest.
 - Periodically cleanup the old versions on local workers
 
+.. _pr-testing:
+
 Testing
 -------
 Even though we have hooks to run unit tests automatically for each pull request, it's always recommended to run unit tests
diff --git a/docs/_sources/how_to/compile_models/from_caffe2.rst.txt b/docs/_sources/how_to/compile_models/from_caffe2.rst.txt
index 0052827..3ac5c5f 100644
--- a/docs/_sources/how_to/compile_models/from_caffe2.rst.txt
+++ b/docs/_sources/how_to/compile_models/from_caffe2.rst.txt
@@ -50,6 +50,22 @@ We load a pretrained resnet50 classification model provided by Caffe2.
 
 
 
+.. rst-class:: sphx-glr-script-out
+
+ Out:
+
+ .. code-block:: none
+
+    Downloading from https://s3.amazonaws.com/download.caffe2.ai/models/resnet50/predict_net.pb
+    Writing to /workspace/.caffe2/models/resnet50/predict_net.pb
+
+    Downloading from https://s3.amazonaws.com/download.caffe2.ai/models/resnet50/init_net.pb
+    Writing to /workspace/.caffe2/models/resnet50/init_net.pb
+
+    Downloading from https://s3.amazonaws.com/download.caffe2.ai/models/resnet50/value_info.json
+    Writing to /workspace/.caffe2/models/resnet50/value_info.json
+
+
 
 
 Load a test image
diff --git a/docs/_sources/how_to/compile_models/from_mxnet.rst.txt b/docs/_sources/how_to/compile_models/from_mxnet.rst.txt
index 72de2a6..aa8b68c 100644
--- a/docs/_sources/how_to/compile_models/from_mxnet.rst.txt
+++ b/docs/_sources/how_to/compile_models/from_mxnet.rst.txt
@@ -98,6 +98,7 @@ In this section, we download a pretrained imagenet model and classify an image.
 
  .. code-block:: none
 
+    Downloading /workspace/.mxnet/models/resnet18_v1-a0666292.zipe1d47031-f8c1-4fcf-9201-2dce01ebf5ba from https://apache-mxnet.s3-accelerate.dualstack.amazonaws.com/gluon/models/resnet18_v1-a0666292.zip...
     x (1, 3, 224, 224)
 
 
diff --git a/docs/_sources/how_to/compile_models/from_onnx.rst.txt b/docs/_sources/how_to/compile_models/from_onnx.rst.txt
index c2393f5..ae1c914 100644
--- a/docs/_sources/how_to/compile_models/from_onnx.rst.txt
+++ b/docs/_sources/how_to/compile_models/from_onnx.rst.txt
@@ -128,9 +128,9 @@ provides a static definition of the input size.
 
  .. code-block:: none
 
-    /home/areusch/ws/tvm3/python/tvm/relay/frontend/onnx.py:5149: UserWarning: Mismatched attribute type in ' : kernel_shape'
+    /workspace/python/tvm/relay/frontend/onnx.py:5172: 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 }
+    ==> Context: Bad node spec for node. Name:  OpType: Conv
       warnings.warn(str(e))
 
 
diff --git a/docs/_sources/how_to/compile_models/from_paddle.rst.txt b/docs/_sources/how_to/compile_models/from_paddle.rst.txt
index e6c85f1..231de7e 100644
--- a/docs/_sources/how_to/compile_models/from_paddle.rst.txt
+++ b/docs/_sources/how_to/compile_models/from_paddle.rst.txt
@@ -36,15 +36,6 @@ https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/inst
 
 
 
-.. rst-class:: sphx-glr-script-out
-
- Out:
-
- .. code-block:: none
-
-    WARNING: OMP_NUM_THREADS set to 4, not 1. The computation speed will not be optimized if you use data parallel. It will fail if this PaddlePaddle binary is compiled with OpenBlas since OpenBlas does not support multi-threads.
-    PLEASE USE OMP_NUM_THREADS WISELY.
-
 
 
 Load pretrained ResNet50 model
@@ -180,6 +171,11 @@ Look up prediction top 1 index in 1000 class synset.
 
 
 
+.. rst-class:: sphx-glr-timing
+
+   **Total running time of the script:** ( 1 minutes  5.827 seconds)
+
+
 .. _sphx_glr_download_how_to_compile_models_from_paddle.py:
 
 
diff --git a/docs/_sources/how_to/compile_models/from_pytorch.rst.txt b/docs/_sources/how_to/compile_models/from_pytorch.rst.txt
index 3c91968..3a5ddac 100644
--- a/docs/_sources/how_to/compile_models/from_pytorch.rst.txt
+++ b/docs/_sources/how_to/compile_models/from_pytorch.rst.txt
@@ -72,6 +72,15 @@ Load a pretrained PyTorch model
 
 
 
+.. rst-class:: sphx-glr-script-out
+
+ Out:
+
+ .. code-block:: none
+
+    Downloading: "https://download.pytorch.org/models/resnet18-f37072fd.pth" to /workspace/.cache/torch/hub/checkpoints/resnet18-f37072fd.pth
+
      0%|          | 0.00/44.7M [00:00<?, ?B/s]
     41%|####1     | 18.4M/44.7M [00:00<00:00, 193MB/s]
     99%|#########8| 44.1M/44.7M [00:00<00:00, 238MB/s]
    100%|##########| 44.7M/44.7M [00:00<00:00, 232MB/s]
+
 
 
 Load a test image
diff --git a/docs/_sources/how_to/compile_models/from_tensorflow.rst.txt b/docs/_sources/how_to/compile_models/from_tensorflow.rst.txt
index be07c1b..382d631 100644
--- a/docs/_sources/how_to/compile_models/from_tensorflow.rst.txt
+++ b/docs/_sources/how_to/compile_models/from_tensorflow.rst.txt
@@ -205,9 +205,9 @@ Results:
 
  .. code-block:: none
 
-    /home/areusch/ws/tvm3/python/tvm/relay/frontend/tensorflow.py:535: UserWarning: Ignore the passed shape. Shape in graphdef will be used for operator DecodeJpeg/contents.
+    /workspace/python/tvm/relay/frontend/tensorflow.py:535: UserWarning: Ignore the passed shape. Shape in graphdef will be used for operator DecodeJpeg/contents.
       "will be used for operator %s." % node.name
-    /home/areusch/ws/tvm3/python/tvm/relay/frontend/tensorflow_ops.py:1009: UserWarning: DecodeJpeg: It's a pass through, please handle preprocessing before input
+    /workspace/python/tvm/relay/frontend/tensorflow_ops.py:1009: UserWarning: DecodeJpeg: It's a pass through, please handle preprocessing before input
       warnings.warn("DecodeJpeg: It's a pass through, please handle preprocessing before input")
     Tensorflow protobuf imported to relay frontend.
 
@@ -233,150 +233,6 @@ Results:
 
 
 
-.. rst-class:: sphx-glr-script-out
-
- Out:
-
- .. code-block:: none
-
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-    conv2d NHWC layout is not optimized for x86 with autotvm.
-
 
 
 Execute the portable graph on TVM
@@ -524,7 +380,7 @@ Run the corresponding model on tensorflow
 
 .. rst-class:: sphx-glr-timing
 
-   **Total running time of the script:** ( 1 minutes  0.675 seconds)
+   **Total running time of the script:** ( 1 minutes  2.224 seconds)
 
 
 .. _sphx_glr_download_how_to_compile_models_from_tensorflow.py:
diff --git a/docs/_sources/how_to/compile_models/sg_execution_times.rst.txt b/docs/_sources/how_to/compile_models/sg_execution_times.rst.txt
index 42bee2f..2e7e1bc 100644
--- a/docs/_sources/how_to/compile_models/sg_execution_times.rst.txt
+++ b/docs/_sources/how_to/compile_models/sg_execution_times.rst.txt
@@ -5,15 +5,15 @@
 
 Computation times
 =================
-**04:35.236** total execution time for **how_to_compile_models** files:
+**05:21.743** total execution time for **how_to_compile_models** files:
 
-- **01:00.675**: :ref:`sphx_glr_how_to_compile_models_from_tensorflow.py` (``from_tensorflow.py``)
-- **00:44.856**: :ref:`sphx_glr_how_to_compile_models_from_darknet.py` (``from_darknet.py``)
-- **00:40.119**: :ref:`sphx_glr_how_to_compile_models_from_paddle.py` (``from_paddle.py``)
-- **00:37.039**: :ref:`sphx_glr_how_to_compile_models_from_caffe2.py` (``from_caffe2.py``)
-- **00:23.992**: :ref:`sphx_glr_how_to_compile_models_from_tflite.py` (``from_tflite.py``)
-- **00:21.211**: :ref:`sphx_glr_how_to_compile_models_from_pytorch.py` (``from_pytorch.py``)
-- **00:18.785**: :ref:`sphx_glr_how_to_compile_models_from_coreml.py` (``from_coreml.py``)
-- **00:16.378**: :ref:`sphx_glr_how_to_compile_models_from_mxnet.py` (``from_mxnet.py``)
-- **00:10.623**: :ref:`sphx_glr_how_to_compile_models_from_keras.py` (``from_keras.py``)
-- **00:01.557**: :ref:`sphx_glr_how_to_compile_models_from_onnx.py` (``from_onnx.py``)
+- **01:05.827**: :ref:`sphx_glr_how_to_compile_models_from_paddle.py` (``from_paddle.py``)
+- **01:02.224**: :ref:`sphx_glr_how_to_compile_models_from_tensorflow.py` (``from_tensorflow.py``)
+- **00:54.181**: :ref:`sphx_glr_how_to_compile_models_from_darknet.py` (``from_darknet.py``)
+- **00:40.149**: :ref:`sphx_glr_how_to_compile_models_from_caffe2.py` (``from_caffe2.py``)
+- **00:24.675**: :ref:`sphx_glr_how_to_compile_models_from_tflite.py` (``from_tflite.py``)
+- **00:21.587**: :ref:`sphx_glr_how_to_compile_models_from_coreml.py` (``from_coreml.py``)
+- **00:19.483**: :ref:`sphx_glr_how_to_compile_models_from_mxnet.py` (``from_mxnet.py``)
+- **00:17.898**: :ref:`sphx_glr_how_to_compile_models_from_pytorch.py` (``from_pytorch.py``)
+- **00:13.600**: :ref:`sphx_glr_how_to_compile_models_from_keras.py` (``from_keras.py``)
+- **00:02.119**: :ref:`sphx_glr_how_to_compile_models_from_onnx.py` (``from_onnx.py``)
diff --git a/docs/_sources/how_to/deploy_models/deploy_model_on_android.rst.txt b/docs/_sources/how_to/deploy_models/deploy_model_on_android.rst.txt
index 85a733f..7e1d202 100644
--- a/docs/_sources/how_to/deploy_models/deploy_model_on_android.rst.txt
+++ b/docs/_sources/how_to/deploy_models/deploy_model_on_android.rst.txt
@@ -393,7 +393,7 @@ Execute on TVM
     Evaluate inference time cost...
     Execution time summary:
      mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)  
-       7.3914       6.9541       9.6300       6.8974       0.8332   
+      14.0854      14.0852      14.2930      13.9182       0.1415   
                
 
 
diff --git a/docs/_sources/how_to/deploy_models/deploy_model_on_rasp.rst.txt b/docs/_sources/how_to/deploy_models/deploy_model_on_rasp.rst.txt
index 5cf7751..ab87470 100644
--- a/docs/_sources/how_to/deploy_models/deploy_model_on_rasp.rst.txt
+++ b/docs/_sources/how_to/deploy_models/deploy_model_on_rasp.rst.txt
@@ -252,7 +252,7 @@ to run this tutorial with a real device.
 
  .. code-block:: none
 
-    /home/areusch/ws/tvm3/python/tvm/relay/build_module.py:410: DeprecationWarning: Please use input parameter mod (tvm.IRModule) instead of deprecated parameter mod (tvm.relay.function.Function)
+    /workspace/python/tvm/relay/build_module.py:429: DeprecationWarning: Please use input parameter mod (tvm.IRModule) instead of deprecated parameter mod (tvm.relay.function.Function)
       DeprecationWarning,
 
 
diff --git a/docs/_sources/how_to/deploy_models/deploy_object_detection_pytorch.rst.txt b/docs/_sources/how_to/deploy_models/deploy_object_detection_pytorch.rst.txt
index 67c2492..573dc8b 100644
--- a/docs/_sources/how_to/deploy_models/deploy_object_detection_pytorch.rst.txt
+++ b/docs/_sources/how_to/deploy_models/deploy_object_detection_pytorch.rst.txt
@@ -107,20 +107,35 @@ Load pre-trained maskrcnn from torchvision and do tracing
 
  .. code-block:: none
 
-    /usr/local/lib/python3.6/dist-packages/torch/tensor.py:593: RuntimeWarning: Iterating over a tensor might cause the trace to be incorrect. Passing a tensor of different shape won't change the number of iterations executed (and might lead to errors or silently give incorrect results).
-      'incorrect results).', category=RuntimeWarning)
-    /usr/local/lib/python3.6/dist-packages/torch/nn/functional.py:3123: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).
-      dtype=torch.float32)).float())) for i in range(dim)]
-    /usr/local/lib/python3.6/dist-packages/torchvision/models/detection/anchor_utils.py:147: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).
+    Downloading: "https://download.pytorch.org/models/maskrcnn_resnet50_fpn_coco-bf2d0c1e.pth" to /workspace/.cache/torch/hub/checkpoints/maskrcnn_resnet50_fpn_coco-bf2d0c1e.pth
+
      0%|          | 0.00/170M [00:00<?, ?B/s]
      2%|1         | 3.31M/170M [00:00<00:05, 34.6MB/s]
      6%|5         | 9.44M/170M [00:00<00:03, 51.9MB/s]
      9%|8         | 14.7M/170M [00:00<00:03, 53.3MB/s]
     12%|#1        | 19.8M/170M [00:00<00:03, 41.2MB/s]
     15%|#4        | 25.1M/170M [00:00<00:03, 45.6MB/s]
     18%|#8        | 31.0M/170M [00:00<00:02, 50.2MB/s]
     21%|##1       | 36.0M/170M [00:00<00:03, 43.8MB/s]
     25%|##4       | 41.9M/170M [00:00<00:02, 48.7MB/s]
     28%|##8       | 47.8M/170M [00:01<00:02, 52.4MB/s]
     32%|###1      | 54.0M/170M [00:01<00:02, 55.7MB/s]
     35%|###5      | 59.5M/170M [00:01<00:02, 54.7MB/s]
     38%|###8      | 64.8M/170M [00:01<00:02, 54.5MB/s]
     42%|####1     | 71.3M/170M [00:01<00:01, 58.1MB/s]
     46%|####6     | 78.1M/170M [00:01<00:01, 62.1MB/s]
     50%|####9     | 84.4M/170M [00:01<00:01, 63.1MB/s]
     53%|#####3    | 90.5M/170M [00:01<00:01, 62.8MB/s]
     57%|#####6    | 96.6M/170M [00:01<00:01, 63.0MB/
 s]
     60%|######    | 103M/170M [00:01<00:01, 62.4MB/s] 
     64%|######4   | 109M/170M [00:02<00:01, 63.5MB/s]
     68%|######7   | 115M/170M [00:02<00:00, 63.8MB/s]
     71%|#######1  | 121M/170M [00:02<00:00, 63.1MB/s]
     75%|#######4  | 127M/170M [00:02<00:00, 54.5MB/s]
     78%|#######8  | 133M/170M [00:02<00:00, 56.6MB/s]
     82%|########1 | 139M/170M [00:02<00:00, 57.9MB/s]
     85%|########5 | 145M/170M [00:02<00:00, 56.9MB/s]
     88%|########8 | 150M/170M [00:02<00:00, 54.3MB/s]
     92%|#########1| 156M/170M [00:02<00:00, 53.2MB/s]
     95%|#########4| 161M/170M [00:03<00:00, 46.2MB/s]
     97%|#########7| 165M/170M [00:03<00:00, 43.1MB/s]
    100%|##########| 170M/170M [00:03<00:00, 53.6MB/s]
+    /usr/local/lib/python3.6/dist-packages/torch/functional.py:445: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at  ../aten/src/ATen/native/TensorShape.cpp:2157.)
+      return _VF.meshgrid(tensors, **kwargs)  # type: ignore[attr-defined]
+    /usr/local/lib/python3.6/dist-packages/torch/nn/functional.py:3702: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).
+      for i in range(dim)
+    /usr/local/lib/python3.6/dist-packages/torchvision/models/detection/anchor_utils.py:123: UserWarning: __floordiv__ is deprecated, and its behavior will change in a future version of pytorch. It currently rounds toward 0 (like the 'trunc' function NOT 'floor'). This results in incorrect rounding for negative values. To keep the current behavior, use torch.div(a, b, rounding_mode='trunc'), or for actual floor division, use torch.div(a, b, rounding_mode='floor').
       torch.tensor(image_size[1] // g[1], dtype=torch.int64, device=device)] for g in grid_sizes]
-    /usr/local/lib/python3.6/dist-packages/torchvision/ops/boxes.py:128: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).
+    /usr/local/lib/python3.6/dist-packages/torchvision/models/detection/anchor_utils.py:123: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).
+      torch.tensor(image_size[1] // g[1], dtype=torch.int64, device=device)] for g in grid_sizes]
+    /usr/local/lib/python3.6/dist-packages/torchvision/models/detection/rpn.py:84: UserWarning: __floordiv__ is deprecated, and its behavior will change in a future version of pytorch. It currently rounds toward 0 (like the 'trunc' function NOT 'floor'). This results in incorrect rounding for negative values. To keep the current behavior, use torch.div(a, b, rounding_mode='trunc'), or for actual floor division, use torch.div(a, b, rounding_mode='floor').
+      A = Ax4 // 4
+    /usr/local/lib/python3.6/dist-packages/torchvision/models/detection/rpn.py:85: UserWarning: __floordiv__ is deprecated, and its behavior will change in a future version of pytorch. It currently rounds toward 0 (like the 'trunc' function NOT 'floor'). This results in incorrect rounding for negative values. To keep the current behavior, use torch.div(a, b, rounding_mode='trunc'), or for actual floor division, use torch.div(a, b, rounding_mode='floor').
+      C = AxC // A
+    /usr/local/lib/python3.6/dist-packages/torchvision/ops/boxes.py:146: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).
       boxes_x = torch.min(boxes_x, torch.tensor(width, dtype=boxes.dtype, device=boxes.device))
-    /usr/local/lib/python3.6/dist-packages/torchvision/ops/boxes.py:130: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).
+    /usr/local/lib/python3.6/dist-packages/torchvision/ops/boxes.py:148: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).
       boxes_y = torch.min(boxes_y, torch.tensor(height, dtype=boxes.dtype, device=boxes.device))
-    /usr/local/lib/python3.6/dist-packages/torchvision/models/detection/transform.py:271: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).
+    /usr/local/lib/python3.6/dist-packages/torchvision/models/detection/transform.py:276: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).
       for s, s_orig in zip(new_size, original_size)
     /usr/local/lib/python3.6/dist-packages/torchvision/models/detection/roi_heads.py:372: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).
       return torch.tensor(M + 2 * padding).to(torch.float32) / torch.tensor(M).to(torch.float32)
+    /usr/local/lib/python3.6/dist-packages/torch/jit/_trace.py:991: TracerWarning: Output nr 2. of the traced function does not match the corresponding output of the Python function. Detailed error:
+    Tensor-likes are not close!
+
+    Mismatched elements: 1 / 2 (50.0%)
+    Greatest absolute difference: 0.8947528377175331 at index 1 (up to 1e-05 allowed)
+    Greatest relative difference: 0.918839969148101 at index 1 (up to 1e-05 allowed)
+      _module_class,
 
 
 
@@ -167,7 +182,7 @@ Import the graph to Relay
 
  .. code-block:: none
 
-    /home/areusch/ws/tvm3/python/tvm/relay/build_module.py:410: DeprecationWarning: Please use input parameter mod (tvm.IRModule) instead of deprecated parameter mod (tvm.relay.function.Function)
+    /workspace/python/tvm/relay/build_module.py:429: DeprecationWarning: Please use input parameter mod (tvm.IRModule) instead of deprecated parameter mod (tvm.relay.function.Function)
       DeprecationWarning,
 
 
@@ -247,7 +262,7 @@ Get boxes with score larger than 0.9
 
 .. rst-class:: sphx-glr-timing
 
-   **Total running time of the script:** ( 1 minutes  55.032 seconds)
+   **Total running time of the script:** ( 2 minutes  49.198 seconds)
 
 
 .. _sphx_glr_download_how_to_deploy_models_deploy_object_detection_pytorch.py:
diff --git a/docs/_sources/how_to/deploy_models/deploy_prequantized.rst.txt b/docs/_sources/how_to/deploy_models/deploy_prequantized.rst.txt
index 98433bc..facff7d 100644
--- a/docs/_sources/how_to/deploy_models/deploy_prequantized.rst.txt
+++ b/docs/_sources/how_to/deploy_models/deploy_prequantized.rst.txt
@@ -180,6 +180,15 @@ training. Other models require a full post training calibration.
 
 
 
+.. rst-class:: sphx-glr-script-out
+
+ Out:
+
+ .. code-block:: none
+
+    Downloading: "https://download.pytorch.org/models/mobilenet_v2-b0353104.pth" to /workspace/.cache/torch/hub/checkpoints/mobilenet_v2-b0353104.pth
+
      0%|          | 0.00/13.6M [00:00<?, ?B/s]
     47%|####7     | 6.44M/13.6M [00:00<00:00, 67.4MB/s]
     95%|#########4| 12.9M/13.6M [00:00<00:00, 51.7MB/s]
    100%|##########| 13.6M/13.6M [00:00<00:00, 54.6MB/s]
+
 
 
 Quantize, trace and run the PyTorch Mobilenet v2 model
@@ -207,9 +216,13 @@ on the PyTorch website to learn about quantization and jit.
 
  .. code-block:: none
 
-    /usr/local/lib/python3.6/dist-packages/torch/quantization/observer.py:121: UserWarning: Please use quant_min and quant_max to specify the range for observers.                     reduce_range will be deprecated in a future release of PyTorch.
+    /usr/local/lib/python3.6/dist-packages/torch/ao/quantization/observer.py:174: UserWarning: Please use quant_min and quant_max to specify the range for observers.                     reduce_range will be deprecated in a future release of PyTorch.
       reduce_range will be deprecated in a future release of PyTorch."
-    /usr/local/lib/python3.6/dist-packages/torch/quantization/observer.py:990: UserWarning: must run observer before calling calculate_qparams.                                    Returning default scale and zero point 
+    /usr/local/lib/python3.6/dist-packages/torch/ao/quantization/observer.py:886: UserWarning: __floordiv__ is deprecated, and its behavior will change in a future version of pytorch. It currently rounds toward 0 (like the 'trunc' function NOT 'floor'). This results in incorrect rounding for negative values. To keep the current behavior, use torch.div(a, b, rounding_mode='trunc'), or for actual floor division, use torch.div(a, b, rounding_mode='floor').
+      src_bin_begin // dst_bin_width, 0, self.dst_nbins - 1
+    /usr/local/lib/python3.6/dist-packages/torch/ao/quantization/observer.py:891: UserWarning: __floordiv__ is deprecated, and its behavior will change in a future version of pytorch. It currently rounds toward 0 (like the 'trunc' function NOT 'floor'). This results in incorrect rounding for negative values. To keep the current behavior, use torch.div(a, b, rounding_mode='trunc'), or for actual floor division, use torch.div(a, b, rounding_mode='floor').
+      src_bin_end // dst_bin_width, 0, self.dst_nbins - 1
+    /usr/local/lib/python3.6/dist-packages/torch/ao/quantization/observer.py:1109: UserWarning: must run observer before calling calculate_qparams.                                    Returning default scale and zero point 
       Returning default scale and zero point "
 
 
@@ -307,7 +320,7 @@ output values are identical out of 1000 outputs from mobilenet v2.
 
  .. code-block:: none
 
-    140 in 1000 raw floating outputs identical.
+    154 in 1000 raw floating outputs identical.
 
 
 
@@ -334,7 +347,7 @@ Here we give an example of how to measure performance of TVM compiled models.
 
     Execution time summary:
      mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)  
-      19.0693      18.8970      24.9433      18.6631       0.7349   
+      87.1187      87.0691      89.9382      86.5509       0.3569   
                
 
 
@@ -372,6 +385,11 @@ Deploy a quantized TFLite Model
 TODO
 
 
+.. rst-class:: sphx-glr-timing
+
+   **Total running time of the script:** ( 1 minutes  4.710 seconds)
+
+
 .. _sphx_glr_download_how_to_deploy_models_deploy_prequantized.py:
 
 
diff --git a/docs/_sources/how_to/deploy_models/deploy_prequantized_tflite.rst.txt b/docs/_sources/how_to/deploy_models/deploy_prequantized_tflite.rst.txt
index 79bc648..16bfa98 100644
--- a/docs/_sources/how_to/deploy_models/deploy_prequantized_tflite.rst.txt
+++ b/docs/_sources/how_to/deploy_models/deploy_prequantized_tflite.rst.txt
@@ -352,7 +352,7 @@ Here we give an example of how to measure performance of TVM compiled models.
 
     Execution time summary:
      mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)  
-      35.8131      34.4906      60.2646      33.8521       3.6820   
+      115.9727     115.9867     118.1943     114.5755      0.4809   
                
 
 
@@ -386,7 +386,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:** ( 2 minutes  11.692 seconds)
+   **Total running time of the script:** ( 1 minutes  49.982 seconds)
 
 
 .. _sphx_glr_download_how_to_deploy_models_deploy_prequantized_tflite.py:
diff --git a/docs/_sources/how_to/deploy_models/deploy_quantized.rst.txt b/docs/_sources/how_to/deploy_models/deploy_quantized.rst.txt
index 50c1196..b671d9a 100644
--- a/docs/_sources/how_to/deploy_models/deploy_quantized.rst.txt
+++ b/docs/_sources/how_to/deploy_models/deploy_quantized.rst.txt
@@ -213,12 +213,17 @@ We create a Relay VM to build and execute the model.
 
  .. code-block:: none
 
-    /home/areusch/ws/tvm3/python/tvm/relay/build_module.py:410: DeprecationWarning: Please use input parameter mod (tvm.IRModule) instead of deprecated parameter mod (tvm.relay.function.Function)
+    /workspace/python/tvm/relay/build_module.py:429: DeprecationWarning: Please use input parameter mod (tvm.IRModule) instead of deprecated parameter mod (tvm.relay.function.Function)
       DeprecationWarning,
 
 
 
 
+.. rst-class:: sphx-glr-timing
+
+   **Total running time of the script:** ( 1 minutes  12.561 seconds)
+
+
 .. _sphx_glr_download_how_to_deploy_models_deploy_quantized.py:
 
 
diff --git a/docs/_sources/how_to/deploy_models/deploy_ssd_gluoncv.rst.txt b/docs/_sources/how_to/deploy_models/deploy_ssd_gluoncv.rst.txt
index 6575104..fb6fd0f 100644
--- a/docs/_sources/how_to/deploy_models/deploy_ssd_gluoncv.rst.txt
+++ b/docs/_sources/how_to/deploy_models/deploy_ssd_gluoncv.rst.txt
@@ -38,7 +38,7 @@ We will use GluonCV pre-trained SSD model and convert it to Relay IR
 
  .. code-block:: none
 
-    /usr/local/lib/python3.6/dist-packages/gluoncv/__init__.py:40: UserWarning: Both `mxnet==1.6.0` and `torch==1.7.0` are installed. You might encounter increased GPU memory footprint if both framework are used at the same time.
+    /usr/local/lib/python3.6/dist-packages/gluoncv/__init__.py:40: UserWarning: Both `mxnet==1.6.0` and `torch==1.10.1+cu102` are installed. You might encounter increased GPU memory footprint if both framework are used at the same time.
       warnings.warn(f'Both `mxnet=={mx.__version__}` and `torch=={torch.__version__}` are installed. '
 
 
@@ -136,6 +136,8 @@ Convert and compile model for CPU.
     /usr/local/lib/python3.6/dist-packages/mxnet/gluon/block.py:1389: UserWarning: Cannot decide type for the following arguments. Consider providing them as input:
             data: None
       input_sym_arg_type = in_param.infer_type()[0]
+    Downloading /workspace/.mxnet/models/ssd_512_resnet50_v1_voc-9c8b225a.zip from https://apache-mxnet.s3-accelerate.dualstack.amazonaws.com/gluon/models/ssd_512_resnet50_v1_voc-9c8b225a.zip...
+
      0%|          | 0/132723 [00:00<?, ?KB/s]
      5%|5         | 7063/132723 [00:00<00:01, 70621.65KB/s]
     12%|#2        | 16152/132723 [00:00<00:01, 82540.09KB/s]
     18%|#8        | 24407/132723 [00:00<00:01, 79073.20KB/s]
     25%|##4       | 32757/132723 [00:00<00:01, 58921.29KB/s]
     30%|##9       | 39231/132723 [00:00<00:01, 52500.18KB/s]
     37%|###6      | 48888/132723 [00:00<00:01, 64024.73KB/s]
     42%|####2     | 55905/132723 [00:00<00:01, 62081.36KB/s]
     49%|####9     | 65523/132723 [00:01<00:01, 56522.00KB/s]
     56%|#####6    | 74842/132723 [00:01<00:00, 65077.87KB/s]
     62%|######1   | 81922/132723 [00:01<00:00, 58564.40KB/s]
     68%|######7   | 89986/132723 [00:01<00:00, 63845.44KB/s]
     74%|#######4  | 98288/132723 [00:01<00:00, 63195.81KB/s]
     81%|########  | 107496/132723 [00:01<00:00, 70435.91KB/s]
     87%|########6 | 114917/132723 [00:01<00:00, 56932.53KB/s]
     94%|#########3| 124197/132723 [00:01<00:00, 65213.09KB/s]
     99%|########
 #9| 131409/132723 [00:02<00:00, 61765.05KB/s]
    100%|##########| 132723/132723 [00:02<00:00, 62812.71KB/s]
 
 
 
@@ -200,7 +202,7 @@ Display result
 
 .. rst-class:: sphx-glr-timing
 
-   **Total running time of the script:** ( 2 minutes  47.192 seconds)
+   **Total running time of the script:** ( 2 minutes  19.477 seconds)
 
 
 .. _sphx_glr_download_how_to_deploy_models_deploy_ssd_gluoncv.py:
diff --git a/docs/_sources/how_to/deploy_models/sg_execution_times.rst.txt b/docs/_sources/how_to/deploy_models/sg_execution_times.rst.txt
index 0add8a2..a053eaa 100644
--- a/docs/_sources/how_to/deploy_models/sg_execution_times.rst.txt
+++ b/docs/_sources/how_to/deploy_models/sg_execution_times.rst.txt
@@ -5,13 +5,13 @@
 
 Computation times
 =================
-**09:28.366** total execution time for **how_to_deploy_models** files:
+**10:03.663** total execution time for **how_to_deploy_models** files:
 
-- **02:47.192**: :ref:`sphx_glr_how_to_deploy_models_deploy_ssd_gluoncv.py` (``deploy_ssd_gluoncv.py``)
-- **02:11.692**: :ref:`sphx_glr_how_to_deploy_models_deploy_prequantized_tflite.py` (``deploy_prequantized_tflite.py``)
-- **01:55.032**: :ref:`sphx_glr_how_to_deploy_models_deploy_object_detection_pytorch.py` (``deploy_object_detection_pytorch.py``)
-- **00:56.142**: :ref:`sphx_glr_how_to_deploy_models_deploy_prequantized.py` (``deploy_prequantized.py``)
-- **00:51.441**: :ref:`sphx_glr_how_to_deploy_models_deploy_quantized.py` (``deploy_quantized.py``)
-- **00:26.373**: :ref:`sphx_glr_how_to_deploy_models_deploy_model_on_android.py` (``deploy_model_on_android.py``)
-- **00:20.344**: :ref:`sphx_glr_how_to_deploy_models_deploy_model_on_rasp.py` (``deploy_model_on_rasp.py``)
-- **00:00.150**: :ref:`sphx_glr_how_to_deploy_models_deploy_sparse.py` (``deploy_sparse.py``)
+- **02:49.198**: :ref:`sphx_glr_how_to_deploy_models_deploy_object_detection_pytorch.py` (``deploy_object_detection_pytorch.py``)
+- **02:19.477**: :ref:`sphx_glr_how_to_deploy_models_deploy_ssd_gluoncv.py` (``deploy_ssd_gluoncv.py``)
+- **01:49.982**: :ref:`sphx_glr_how_to_deploy_models_deploy_prequantized_tflite.py` (``deploy_prequantized_tflite.py``)
+- **01:12.561**: :ref:`sphx_glr_how_to_deploy_models_deploy_quantized.py` (``deploy_quantized.py``)
+- **01:04.710**: :ref:`sphx_glr_how_to_deploy_models_deploy_prequantized.py` (``deploy_prequantized.py``)
+- **00:26.589**: :ref:`sphx_glr_how_to_deploy_models_deploy_model_on_android.py` (``deploy_model_on_android.py``)
+- **00:20.978**: :ref:`sphx_glr_how_to_deploy_models_deploy_model_on_rasp.py` (``deploy_model_on_rasp.py``)
+- **00:00.168**: :ref:`sphx_glr_how_to_deploy_models_deploy_sparse.py` (``deploy_sparse.py``)
diff --git a/docs/_sources/how_to/extend_tvm/bring_your_own_datatypes.rst.txt b/docs/_sources/how_to/extend_tvm/bring_your_own_datatypes.rst.txt
index 554bad6..87fc3d7 100644
--- a/docs/_sources/how_to/extend_tvm/bring_your_own_datatypes.rst.txt
+++ b/docs/_sources/how_to/extend_tvm/bring_your_own_datatypes.rst.txt
@@ -417,6 +417,14 @@ First let us define two helper functions to get the mobilenet model and a cat im
 
 
 
+.. rst-class:: sphx-glr-script-out
+
+ Out:
+
+ .. code-block:: none
+
+    Downloading /workspace/.mxnet/models/mobilenet0.25-9f83e440.zipe0cc3d1d-8c89-4885-8c59-24977626d21d from https://apache-mxnet.s3-accelerate.dualstack.amazonaws.com/gluon/models/mobilenet0.25-9f83e440.zip...
+
 
 
 It's easy to execute MobileNet with native TVM:
diff --git a/docs/_sources/how_to/extend_tvm/low_level_custom_pass.rst.txt b/docs/_sources/how_to/extend_tvm/low_level_custom_pass.rst.txt
index 16602a8..7afec4d 100644
--- a/docs/_sources/how_to/extend_tvm/low_level_custom_pass.rst.txt
+++ b/docs/_sources/how_to/extend_tvm/low_level_custom_pass.rst.txt
@@ -74,8 +74,8 @@ our customized lowering pass to manipulate the IR directly instead of using sche
 
     @main = primfn(a_1: handle, b_1: handle, c_1: handle) -> ()
       attr = {"from_legacy_te_schedule": True, "global_symbol": "main", "tir.noalias": True}
-      buffers = {a: Buffer(a_2: Pointer(float32), float32, [128], []),
-                 c: Buffer(c_2: Pointer(float32), float32, [128], []),
+      buffers = {c: Buffer(c_2: Pointer(float32), float32, [128], []),
+                 a: Buffer(a_2: Pointer(float32), float32, [128], []),
                  b: Buffer(b_2: Pointer(float32), float32, [128], [])}
       buffer_map = {a_1: a, b_1: b, c_1: c} {
       for (i: int32, 0, 128) {
@@ -226,7 +226,8 @@ Thus, a good place to put this transformation pass is just after Phase 1.
                  b: Buffer(b_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)])
+        let cse_var_1: int32 = (i.outer*8)
+        c_2[ramp(cse_var_1, 1, 8)] = ((float32x8*)a_2[ramp(cse_var_1, 1, 8)] + (float32x8*)b_2[ramp(cse_var_1, 1, 8)])
       }
     }
 
diff --git a/docs/_sources/how_to/extend_tvm/sg_execution_times.rst.txt b/docs/_sources/how_to/extend_tvm/sg_execution_times.rst.txt
index b789cc9..99cfd59 100644
--- a/docs/_sources/how_to/extend_tvm/sg_execution_times.rst.txt
+++ b/docs/_sources/how_to/extend_tvm/sg_execution_times.rst.txt
@@ -5,9 +5,9 @@
 
 Computation times
 =================
-**00:35.734** total execution time for **how_to_extend_tvm** files:
+**00:36.747** total execution time for **how_to_extend_tvm** files:
 
-- **00:32.066**: :ref:`sphx_glr_how_to_extend_tvm_bring_your_own_datatypes.py` (``bring_your_own_datatypes.py``)
-- **00:02.276**: :ref:`sphx_glr_how_to_extend_tvm_use_pass_instrument.py` (``use_pass_instrument.py``)
-- **00:01.150**: :ref:`sphx_glr_how_to_extend_tvm_use_pass_infra.py` (``use_pass_infra.py``)
-- **00:00.243**: :ref:`sphx_glr_how_to_extend_tvm_low_level_custom_pass.py` (``low_level_custom_pass.py``)
+- **00:33.365**: :ref:`sphx_glr_how_to_extend_tvm_bring_your_own_datatypes.py` (``bring_your_own_datatypes.py``)
+- **00:02.201**: :ref:`sphx_glr_how_to_extend_tvm_use_pass_instrument.py` (``use_pass_instrument.py``)
+- **00:00.993**: :ref:`sphx_glr_how_to_extend_tvm_use_pass_infra.py` (``use_pass_infra.py``)
+- **00:00.187**: :ref:`sphx_glr_how_to_extend_tvm_low_level_custom_pass.py` (``low_level_custom_pass.py``)
diff --git a/docs/_sources/how_to/extend_tvm/use_pass_instrument.rst.txt b/docs/_sources/how_to/extend_tvm/use_pass_instrument.rst.txt
index d17cd2d..04f6ebe 100644
--- a/docs/_sources/how_to/extend_tvm/use_pass_instrument.rst.txt
+++ b/docs/_sources/how_to/extend_tvm/use_pass_instrument.rst.txt
@@ -199,10 +199,10 @@ profile the execution time of each passes.
  .. code-block:: none
 
     Printing results of timing profile...
-    InferType: 3848us [3848us] (44.98%; 44.98%)
-    FoldScaleAxis: 4706us [2us] (55.02%; 55.02%)
-            FoldConstant: 4704us [1024us] (55.00%; 99.97%)
-                    InferType: 3680us [3680us] (43.02%; 78.22%)
+    InferType: 5740us [5740us] (45.44%; 45.44%)
+    FoldScaleAxis: 6893us [2us] (54.56%; 54.56%)
+            FoldConstant: 6890us [1421us] (54.54%; 99.96%)
+                    InferType: 5469us [5469us] (43.30%; 79.38%)
 
 
 
@@ -239,10 +239,10 @@ Refer to following sections and :py:func:`tvm.instrument.pass_instrument` for th
  .. code-block:: none
 
     Printing results of timing profile...
-    InferType: 3675us [3675us] (43.90%; 43.90%)
-    FoldScaleAxis: 4695us [1us] (56.10%; 56.10%)
-            FoldConstant: 4694us [1024us] (56.08%; 99.97%)
-                    InferType: 3670us [3670us] (43.85%; 78.19%)
+    InferType: 5426us [5426us] (44.12%; 44.12%)
+    FoldScaleAxis: 6872us [2us] (55.88%; 55.88%)
+            FoldConstant: 6871us [1431us] (55.87%; 99.98%)
+                    InferType: 5439us [5439us] (44.23%; 79.17%)
 
 
 
diff --git a/docs/_sources/how_to/optimize_operators/opt_conv_cuda.rst.txt b/docs/_sources/how_to/optimize_operators/opt_conv_cuda.rst.txt
index f54db42..48ae046 100644
--- a/docs/_sources/how_to/optimize_operators/opt_conv_cuda.rst.txt
+++ b/docs/_sources/how_to/optimize_operators/opt_conv_cuda.rst.txt
@@ -296,7 +296,7 @@ latency of convolution.
 
  .. code-block:: none
 
-    Convolution: 13.956727 ms
+    Convolution: 54.175532 ms
 
 
 
diff --git a/docs/_sources/how_to/optimize_operators/opt_conv_tensorcore.rst.txt b/docs/_sources/how_to/optimize_operators/opt_conv_tensorcore.rst.txt
index bff0498..32a1460 100644
--- a/docs/_sources/how_to/optimize_operators/opt_conv_tensorcore.rst.txt
+++ b/docs/_sources/how_to/optimize_operators/opt_conv_tensorcore.rst.txt
@@ -433,8 +433,10 @@ one time.
             for (ax2: int32, 0, 3) {
               for (ax3: int32, 0, 2) {
                 for (ax4.ax5.fused.outer: int32, 0, 8) {
+                  let cse_var_2: int32 = (ax3*256)
+                  let cse_var_1: int32 = (ax4.ax5.fused.outer*32)
                   attr [IterVar(threadIdx.x: int32, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 32;
-                  Apad.shared[((((((threadIdx.y*3072) + (threadIdx.z*1536)) + (ax2*512)) + (ax3*256)) + (ax4.ax5.fused.outer*32)) + threadIdx.x)] = @tir.if_then_else(((((1 <= (floordiv(blockIdx.z, 14) + kh)) && ((floordiv(blockIdx.z, 14) + kh) < 15)) && (1 <= (ax2 + floormod(blockIdx.z, 14)))) && ((ax2 + floormod(blockIdx.z, 14)) < 15)), (float16*)A_2[(((((((((((blockIdx.x*6422528) + (threadIdx.y*1605632)) + (threadIdx.z*802816)) + (kh*57344)) + (blockIdx.z*4096)) + (ax2*4096)) + (ic.out [...]
+                  Apad.shared[((((((threadIdx.y*3072) + (threadIdx.z*1536)) + (ax2*512)) + cse_var_2) + cse_var_1) + threadIdx.x)] = @tir.if_then_else(((((1 <= (floordiv(blockIdx.z, 14) + kh)) && ((floordiv(blockIdx.z, 14) + kh) < 15)) && (1 <= (ax2 + floormod(blockIdx.z, 14)))) && ((ax2 + floormod(blockIdx.z, 14)) < 15)), (float16*)A_2[(((((((((((blockIdx.x*6422528) + (threadIdx.y*1605632)) + (threadIdx.z*802816)) + (kh*57344)) + (blockIdx.z*4096)) + (ax2*4096)) + (ic.outer*512)) + cse_ [...]
                 }
               }
             }
@@ -449,14 +451,17 @@ one time.
                 for (ax0: int32, 0, 2) {
                   for (ax4: int32, 0, 16) {
                     for (ax5: int32, 0, 16) {
-                      Apad.shared.wmma.matrix_a[(((ax0*256) + (ax4*16)) + ax5)] = (float16*)Apad.shared[((((((threadIdx.y*3072) + (ax0*1536)) + (kw*512)) + (ic.inner*256)) + (ax4*16)) + ax5)]
+                      let cse_var_3: int32 = (ax4*16)
+                      Apad.shared.wmma.matrix_a[(((ax0*256) + cse_var_3) + ax5)] = (float16*)Apad.shared[((((((threadIdx.y*3072) + (ax0*1536)) + (kw*512)) + (ic.inner*256)) + cse_var_3) + ax5)]
                     }
                   }
                 }
                 for (ax3_1: int32, 0, 4) {
                   for (ax4_1: int32, 0, 16) {
                     for (ax5_1: int32, 0, 16) {
-                      W.shared.wmma.matrix_b[(((ax3_1*256) + (ax4_1*16)) + ax5_1)] = (float16*)W.shared[((((((kw*4096) + (ic.inner*2048)) + (threadIdx.z*1024)) + (ax3_1*256)) + (ax4_1*16)) + ax5_1)]
+                      let cse_var_5: int32 = (ax3_1*256)
+                      let cse_var_4: int32 = (ax4_1*16)
+                      W.shared.wmma.matrix_b[((cse_var_5 + cse_var_4) + ax5_1)] = (float16*)W.shared[((((((kw*4096) + (ic.inner*2048)) + (threadIdx.z*1024)) + cse_var_5) + cse_var_4) + ax5_1)]
                     }
                   }
                 }
@@ -465,7 +470,10 @@ one time.
                     for (nn.c: int32, 0, 16) {
                       for (oo.c: int32, 0, 16) {
                         for (ii: int32, 0, 16) {
-                          Conv.wmma.accumulator[((((n.c*1024) + (o.c*256)) + (nn.c*16)) + oo.c)] = ((float32*)Conv.wmma.accumulator[((((n.c*1024) + (o.c*256)) + (nn.c*16)) + oo.c)] + (cast(float32, (float16*)Apad.shared.wmma.matrix_a[(((n.c*256) + (nn.c*16)) + ii)])*cast(float32, (float16*)W.shared.wmma.matrix_b[(((o.c*256) + (ii*16)) + oo.c)])))
+                          let cse_var_8: int32 = (o.c*256)
+                          let cse_var_7: int32 = (nn.c*16)
+                          let cse_var_6: int32 = ((((n.c*1024) + cse_var_8) + cse_var_7) + oo.c)
+                          Conv.wmma.accumulator[cse_var_6] = ((float32*)Conv.wmma.accumulator[cse_var_6] + (cast(float32, (float16*)Apad.shared.wmma.matrix_a[(((n.c*256) + cse_var_7) + ii)])*cast(float32, (float16*)W.shared.wmma.matrix_b[((cse_var_8 + (ii*16)) + oo.c)])))
                         }
                       }
                     }
@@ -479,7 +487,9 @@ one time.
           for (o.inner: int32, 0, 4) {
             for (nn: int32, 0, 16) {
               for (oo: int32, 0, 16) {
-                Conv_2[(((((((((blockIdx.x*12845056) + (threadIdx.y*3211264)) + (n.inner*1605632)) + (blockIdx.z*8192)) + (blockIdx.y*2048)) + (threadIdx.z*1024)) + (o.inner*256)) + (nn*16)) + oo)] = (float32*)Conv.wmma.accumulator[((((n.inner*1024) + (o.inner*256)) + (nn*16)) + oo)]
+                let cse_var_10: int32 = (o.inner*256)
+                let cse_var_9: int32 = (nn*16)
+                Conv_2[(((((((((blockIdx.x*12845056) + (threadIdx.y*3211264)) + (n.inner*1605632)) + (blockIdx.z*8192)) + (blockIdx.y*2048)) + (threadIdx.z*1024)) + cse_var_10) + cse_var_9) + oo)] = (float32*)Conv.wmma.accumulator[((((n.inner*1024) + cse_var_10) + cse_var_9) + oo)]
               }
             }
           }
@@ -542,8 +552,10 @@ by mapping the 2D convolution to tensor intrinsics
             for (ax2: int32, 0, 3) {
               for (ax3: int32, 0, 2) {
                 for (ax4.ax5.fused.outer: int32, 0, 8) {
+                  let cse_var_2: int32 = (ax3*256)
+                  let cse_var_1: int32 = (ax4.ax5.fused.outer*32)
                   attr [IterVar(threadIdx.x: int32, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 32;
-                  Apad.shared[((((((threadIdx.y*3072) + (threadIdx.z*1536)) + (ax2*512)) + (ax3*256)) + (ax4.ax5.fused.outer*32)) + threadIdx.x)] = @tir.if_then_else(((((1 <= (floordiv(blockIdx.z, 14) + kh)) && ((floordiv(blockIdx.z, 14) + kh) < 15)) && (1 <= (ax2 + floormod(blockIdx.z, 14)))) && ((ax2 + floormod(blockIdx.z, 14)) < 15)), (float16*)A_2[(((((((((((blockIdx.x*6422528) + (threadIdx.y*1605632)) + (threadIdx.z*802816)) + (kh*57344)) + (blockIdx.z*4096)) + (ax2*4096)) + (ic.out [...]
+                  Apad.shared[((((((threadIdx.y*3072) + (threadIdx.z*1536)) + (ax2*512)) + cse_var_2) + cse_var_1) + threadIdx.x)] = @tir.if_then_else(((((1 <= (floordiv(blockIdx.z, 14) + kh)) && ((floordiv(blockIdx.z, 14) + kh) < 15)) && (1 <= (ax2 + floormod(blockIdx.z, 14)))) && ((ax2 + floormod(blockIdx.z, 14)) < 15)), (float16*)A_2[(((((((((((blockIdx.x*6422528) + (threadIdx.y*1605632)) + (threadIdx.z*802816)) + (kh*57344)) + (blockIdx.z*4096)) + (ax2*4096)) + (ic.outer*512)) + cse_ [...]
                 }
               }
             }
@@ -563,7 +575,8 @@ by mapping the 2D convolution to tensor intrinsics
                 }
                 for (n.c: int32, 0, 2) {
                   for (o.c: int32, 0, 4) {
-                    @tir.tvm_mma_sync(Conv.wmma.accumulator, ((n.c*4) + o.c), Apad.shared.wmma.matrix_a, n.c, W.shared.wmma.matrix_b, o.c, Conv.wmma.accumulator, ((n.c*4) + o.c), dtype=handle)
+                    let cse_var_3: int32 = ((n.c*4) + o.c)
+                    @tir.tvm_mma_sync(Conv.wmma.accumulator, cse_var_3, Apad.shared.wmma.matrix_a, n.c, W.shared.wmma.matrix_b, o.c, Conv.wmma.accumulator, cse_var_3, dtype=handle)
                   }
                 }
               }
@@ -614,7 +627,7 @@ be able to run on our build server
 
  .. code-block:: none
 
-    conv2d with tensor core: 4.537170 ms
+    conv2d with tensor core: 6.604145 ms
 
 
 
diff --git a/docs/_sources/how_to/optimize_operators/opt_gemm.rst.txt b/docs/_sources/how_to/optimize_operators/opt_gemm.rst.txt
index 58c4ca3..3cae222 100644
--- a/docs/_sources/how_to/optimize_operators/opt_gemm.rst.txt
+++ b/docs/_sources/how_to/optimize_operators/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.013595
-    Baseline: 6.135610
+    Numpy running time: 0.014836
+    Baseline: 3.256232
 
 
 
@@ -152,7 +152,9 @@ Here is the generated IR using our baseline schedule.
         for (n: int32, 0, 1024) {
           C_2[((m*1024) + n)] = 0f32
           for (k: int32, 0, 1024) {
-            C_2[((m*1024) + n)] = ((float32*)C_2[((m*1024) + n)] + ((float32*)A_2[((m*1024) + k)]*(float32*)B_2[((k*1024) + n)]))
+            let cse_var_2: int32 = (m*1024)
+            let cse_var_1: int32 = (cse_var_2 + n)
+            C_2[cse_var_1] = ((float32*)C_2[cse_var_1] + ((float32*)A_2[(cse_var_2 + k)]*(float32*)B_2[((k*1024) + n)]))
           }
         }
       }
@@ -207,7 +209,7 @@ fill 32 * 32 * sizeof(float) which is 4KB in the cache whose total size is 32KB
 
  .. code-block:: none
 
-    Opt1: 0.125602
+    Opt1: 0.289397
 
 
 
@@ -246,7 +248,10 @@ Here is the generated IR after blocking.
             for (k.inner: int32, 0, 4) {
               for (m.inner: int32, 0, 32) {
                 for (n.inner: int32, 0, 32) {
-                  C_2[((((m.outer*32768) + (m.inner*1024)) + (n.outer*32)) + n.inner)] = ((float32*)C_2[((((m.outer*32768) + (m.inner*1024)) + (n.outer*32)) + n.inner)] + ((float32*)A_2[((((m.outer*32768) + (m.inner*1024)) + (k.outer*4)) + k.inner)]*(float32*)B_2[((((k.outer*4096) + (k.inner*1024)) + (n.outer*32)) + n.inner)]))
+                  let cse_var_3: int32 = (n.outer*32)
+                  let cse_var_2: int32 = ((m.outer*32768) + (m.inner*1024))
+                  let cse_var_1: int32 = ((cse_var_2 + cse_var_3) + n.inner)
+                  C_2[cse_var_1] = ((float32*)C_2[cse_var_1] + ((float32*)A_2[((cse_var_2 + (k.outer*4)) + k.inner)]*(float32*)B_2[((((k.outer*4096) + (k.inner*1024)) + cse_var_3) + n.inner)]))
                 }
               }
             }
@@ -302,7 +307,7 @@ In this tutorial, we chose to vectorize the inner loop row data since it is cach
 
  .. code-block:: none
 
-    Opt2: 0.133851
+    Opt2: 0.328705
 
 
 
@@ -326,8 +331,8 @@ Here is the generated IR after vectorization.
 
     @main = primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"from_legacy_te_schedule": True, "global_symbol": "main", "tir.noalias": True}
-      buffers = {C: Buffer(C_2: Pointer(float32), float32, [1024, 1024], []),
-                 A: Buffer(A_2: Pointer(float32), float32, [1024, 1024], []),
+      buffers = {A: Buffer(A_2: Pointer(float32), float32, [1024, 1024], []),
+                 C: Buffer(C_2: Pointer(float32), float32, [1024, 1024], []),
                  B: Buffer(B_2: Pointer(float32), float32, [1024, 1024], [])}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
       for (m.outer: int32, 0, 32) {
@@ -338,7 +343,10 @@ Here is the generated IR after vectorization.
           for (k.outer: int32, 0, 256) {
             for (k.inner: int32, 0, 4) {
               for (m.inner: int32, 0, 32) {
-                C_2[ramp((((m.outer*32768) + (m.inner*1024)) + (n.outer*32)), 1, 32)] = ((float32x32*)C_2[ramp((((m.outer*32768) + (m.inner*1024)) + (n.outer*32)), 1, 32)] + (broadcast((float32*)A_2[((((m.outer*32768) + (m.inner*1024)) + (k.outer*4)) + k.inner)], 32)*(float32x32*)B_2[ramp((((k.outer*4096) + (k.inner*1024)) + (n.outer*32)), 1, 32)]))
+                let cse_var_3: int32 = (n.outer*32)
+                let cse_var_2: int32 = ((m.outer*32768) + (m.inner*1024))
+                let cse_var_1: int32 = (cse_var_2 + cse_var_3)
+                C_2[ramp(cse_var_1, 1, 32)] = ((float32x32*)C_2[ramp(cse_var_1, 1, 32)] + (broadcast((float32*)A_2[((cse_var_2 + (k.outer*4)) + k.inner)], 32)*(float32x32*)B_2[ramp((((k.outer*4096) + (k.inner*1024)) + cse_var_3), 1, 32)]))
               }
             }
           }
@@ -390,7 +398,7 @@ the access pattern for A matrix is more cache friendly.
 
  .. code-block:: none
 
-    Opt3: 0.066455
+    Opt3: 0.113126
 
 
 
@@ -426,7 +434,10 @@ Here is the generated IR after loop permutation.
           for (k.outer: int32, 0, 256) {
             for (m.inner: int32, 0, 32) {
               for (k.inner: int32, 0, 4) {
-                C_2[ramp((((m.outer*32768) + (m.inner*1024)) + (n.outer*32)), 1, 32)] = ((float32x32*)C_2[ramp((((m.outer*32768) + (m.inner*1024)) + (n.outer*32)), 1, 32)] + (broadcast((float32*)A_2[((((m.outer*32768) + (m.inner*1024)) + (k.outer*4)) + k.inner)], 32)*(float32x32*)B_2[ramp((((k.outer*4096) + (k.inner*1024)) + (n.outer*32)), 1, 32)]))
+                let cse_var_3: int32 = (n.outer*32)
+                let cse_var_2: int32 = ((m.outer*32768) + (m.inner*1024))
+                let cse_var_1: int32 = (cse_var_2 + cse_var_3)
+                C_2[ramp(cse_var_1, 1, 32)] = ((float32x32*)C_2[ramp(cse_var_1, 1, 32)] + (broadcast((float32*)A_2[((cse_var_2 + (k.outer*4)) + k.inner)], 32)*(float32x32*)B_2[ramp((((k.outer*4096) + (k.inner*1024)) + cse_var_3), 1, 32)]))
               }
             }
           }
@@ -505,7 +516,7 @@ flattening.
 
  .. code-block:: none
 
-    Opt4: 0.064163
+    Opt4: 0.106034
 
 
 
@@ -547,7 +558,9 @@ Here is the generated IR after array packing.
             for (k.outer: int32, 0, 256) {
               for (m.inner: int32, 0, 32) {
                 for (k.inner: int32, 0, 4) {
-                  C_2[ramp((((m.outer*32768) + (m.inner*1024)) + (n.outer*32)), 1, 32)] = ((float32x32*)C_2[ramp((((m.outer*32768) + (m.inner*1024)) + (n.outer*32)), 1, 32)] + (broadcast((float32*)A_2[((((m.outer*32768) + (m.inner*1024)) + (k.outer*4)) + k.inner)], 32)*(float32x32*)packedB[ramp((((n.outer*32768) + (k.outer*128)) + (k.inner*32)), 1, 32)]))
+                  let cse_var_2: int32 = ((m.outer*32768) + (m.inner*1024))
+                  let cse_var_1: int32 = (cse_var_2 + (n.outer*32))
+                  C_2[ramp(cse_var_1, 1, 32)] = ((float32x32*)C_2[ramp(cse_var_1, 1, 32)] + (broadcast((float32*)A_2[((cse_var_2 + (k.outer*4)) + k.inner)], 32)*(float32x32*)packedB[ramp((((n.outer*32768) + (k.outer*128)) + (k.inner*32)), 1, 32)]))
                 }
               }
             }
@@ -619,7 +632,7 @@ write to C when all the block results are ready.
 
  .. code-block:: none
 
-    Opt5: 0.063095
+    Opt5: 0.096499
 
 
 
@@ -661,10 +674,15 @@ Here is the generated IR after blocking.
             }
             for (k.outer: int32, 0, 256) {
               for (m.c: int32, 0, 32) {
-                C.global[ramp((m.c*32), 1, 32)] = ((float32x32*)C.global[ramp((m.c*32), 1, 32)] + (broadcast((float32*)A_2[(((m.outer*32768) + (m.c*1024)) + (k.outer*4))], 32)*(float32x32*)packedB[ramp(((n.outer*32768) + (k.outer*128)), 1, 32)]))
-                C.global[ramp((m.c*32), 1, 32)] = ((float32x32*)C.global[ramp((m.c*32), 1, 32)] + (broadcast((float32*)A_2[((((m.outer*32768) + (m.c*1024)) + (k.outer*4)) + 1)], 32)*(float32x32*)packedB[ramp((((n.outer*32768) + (k.outer*128)) + 32), 1, 32)]))
-                C.global[ramp((m.c*32), 1, 32)] = ((float32x32*)C.global[ramp((m.c*32), 1, 32)] + (broadcast((float32*)A_2[((((m.outer*32768) + (m.c*1024)) + (k.outer*4)) + 2)], 32)*(float32x32*)packedB[ramp((((n.outer*32768) + (k.outer*128)) + 64), 1, 32)]))
-                C.global[ramp((m.c*32), 1, 32)] = ((float32x32*)C.global[ramp((m.c*32), 1, 32)] + (broadcast((float32*)A_2[((((m.outer*32768) + (m.c*1024)) + (k.outer*4)) + 3)], 32)*(float32x32*)packedB[ramp((((n.outer*32768) + (k.outer*128)) + 96), 1, 32)]))
+                let cse_var_3: int32 = (m.c*32)
+                let cse_var_2: int32 = ((n.outer*32768) + (k.outer*128))
+                let cse_var_1: int32 = (((m.outer*32768) + (m.c*1024)) + (k.outer*4))
+                 {
+                  C.global[ramp(cse_var_3, 1, 32)] = ((float32x32*)C.global[ramp(cse_var_3, 1, 32)] + (broadcast((float32*)A_2[cse_var_1], 32)*(float32x32*)packedB[ramp(cse_var_2, 1, 32)]))
+                  C.global[ramp(cse_var_3, 1, 32)] = ((float32x32*)C.global[ramp(cse_var_3, 1, 32)] + (broadcast((float32*)A_2[(cse_var_1 + 1)], 32)*(float32x32*)packedB[ramp((cse_var_2 + 32), 1, 32)]))
+                  C.global[ramp(cse_var_3, 1, 32)] = ((float32x32*)C.global[ramp(cse_var_3, 1, 32)] + (broadcast((float32*)A_2[(cse_var_1 + 2)], 32)*(float32x32*)packedB[ramp((cse_var_2 + 64), 1, 32)]))
+                  C.global[ramp(cse_var_3, 1, 32)] = ((float32x32*)C.global[ramp(cse_var_3, 1, 32)] + (broadcast((float32*)A_2[(cse_var_1 + 3)], 32)*(float32x32*)packedB[ramp((cse_var_2 + 96), 1, 32)]))
+                }
               }
             }
             for (m.inner: int32, 0, 32) {
@@ -733,7 +751,7 @@ Futhermore, we can also utilize multi-core processors to do the thread-level par
 
  .. code-block:: none
 
-    Opt6: 0.017872
+    Opt6: 0.125081
 
 
 
@@ -775,10 +793,15 @@ Here is the generated IR after parallelization.
             }
             for (k.outer: int32, 0, 256) {
               for (m.c: int32, 0, 32) {
-                C.global[ramp((m.c*32), 1, 32)] = ((float32x32*)C.global[ramp((m.c*32), 1, 32)] + (broadcast((float32*)A_2[(((m.outer*32768) + (m.c*1024)) + (k.outer*4))], 32)*(float32x32*)packedB[ramp(((n.outer*32768) + (k.outer*128)), 1, 32)]))
-                C.global[ramp((m.c*32), 1, 32)] = ((float32x32*)C.global[ramp((m.c*32), 1, 32)] + (broadcast((float32*)A_2[((((m.outer*32768) + (m.c*1024)) + (k.outer*4)) + 1)], 32)*(float32x32*)packedB[ramp((((n.outer*32768) + (k.outer*128)) + 32), 1, 32)]))
-                C.global[ramp((m.c*32), 1, 32)] = ((float32x32*)C.global[ramp((m.c*32), 1, 32)] + (broadcast((float32*)A_2[((((m.outer*32768) + (m.c*1024)) + (k.outer*4)) + 2)], 32)*(float32x32*)packedB[ramp((((n.outer*32768) + (k.outer*128)) + 64), 1, 32)]))
-                C.global[ramp((m.c*32), 1, 32)] = ((float32x32*)C.global[ramp((m.c*32), 1, 32)] + (broadcast((float32*)A_2[((((m.outer*32768) + (m.c*1024)) + (k.outer*4)) + 3)], 32)*(float32x32*)packedB[ramp((((n.outer*32768) + (k.outer*128)) + 96), 1, 32)]))
+                let cse_var_3: int32 = (m.c*32)
+                let cse_var_2: int32 = ((n.outer*32768) + (k.outer*128))
+                let cse_var_1: int32 = (((m.outer*32768) + (m.c*1024)) + (k.outer*4))
+                 {
+                  C.global[ramp(cse_var_3, 1, 32)] = ((float32x32*)C.global[ramp(cse_var_3, 1, 32)] + (broadcast((float32*)A_2[cse_var_1], 32)*(float32x32*)packedB[ramp(cse_var_2, 1, 32)]))
+                  C.global[ramp(cse_var_3, 1, 32)] = ((float32x32*)C.global[ramp(cse_var_3, 1, 32)] + (broadcast((float32*)A_2[(cse_var_1 + 1)], 32)*(float32x32*)packedB[ramp((cse_var_2 + 32), 1, 32)]))
+                  C.global[ramp(cse_var_3, 1, 32)] = ((float32x32*)C.global[ramp(cse_var_3, 1, 32)] + (broadcast((float32*)A_2[(cse_var_1 + 2)], 32)*(float32x32*)packedB[ramp((cse_var_2 + 64), 1, 32)]))
+                  C.global[ramp(cse_var_3, 1, 32)] = ((float32x32*)C.global[ramp(cse_var_3, 1, 32)] + (broadcast((float32*)A_2[(cse_var_1 + 3)], 32)*(float32x32*)packedB[ramp((cse_var_2 + 96), 1, 32)]))
+                }
               }
             }
             for (m.inner: int32, 0, 32) {
diff --git a/docs/_sources/how_to/optimize_operators/sg_execution_times.rst.txt b/docs/_sources/how_to/optimize_operators/sg_execution_times.rst.txt
index 6cd0325..f9d144a 100644
--- a/docs/_sources/how_to/optimize_operators/sg_execution_times.rst.txt
+++ b/docs/_sources/how_to/optimize_operators/sg_execution_times.rst.txt
@@ -5,8 +5,8 @@
 
 Computation times
 =================
-**00:29.403** total execution time for **how_to_optimize_operators** files:
+**00:32.654** total execution time for **how_to_optimize_operators** files:
 
-- **00:27.140**: :ref:`sphx_glr_how_to_optimize_operators_opt_gemm.py` (``opt_gemm.py``)
-- **00:01.258**: :ref:`sphx_glr_how_to_optimize_operators_opt_conv_tensorcore.py` (``opt_conv_tensorcore.py``)
-- **00:01.004**: :ref:`sphx_glr_how_to_optimize_operators_opt_conv_cuda.py` (``opt_conv_cuda.py``)
+- **00:30.028**: :ref:`sphx_glr_how_to_optimize_operators_opt_gemm.py` (``opt_gemm.py``)
+- **00:01.352**: :ref:`sphx_glr_how_to_optimize_operators_opt_conv_tensorcore.py` (``opt_conv_tensorcore.py``)
+- **00:01.273**: :ref:`sphx_glr_how_to_optimize_operators_opt_conv_cuda.py` (``opt_conv_cuda.py``)
diff --git a/docs/_sources/how_to/tune_with_autoscheduler/sg_execution_times.rst.txt b/docs/_sources/how_to/tune_with_autoscheduler/sg_execution_times.rst.txt
index 9a53957..1ba3d66 100644
--- a/docs/_sources/how_to/tune_with_autoscheduler/sg_execution_times.rst.txt
+++ b/docs/_sources/how_to/tune_with_autoscheduler/sg_execution_times.rst.txt
@@ -5,11 +5,11 @@
 
 Computation times
 =================
-**02:50.369** total execution time for **how_to_tune_with_autoscheduler** files:
-
-- **00:56.522**: :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_network_x86.py` (``tune_network_x86.py``)
-- **00:54.839**: :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_conv2d_layer_cuda.py` (``tune_conv2d_layer_cuda.py``)
-- **00:30.675**: :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_network_cuda.py` (``tune_network_cuda.py``)
-- **00:11.457**: :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_sparse_x86.py` (``tune_sparse_x86.py``)
-- **00:09.160**: :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_network_mali.py` (``tune_network_mali.py``)
-- **00:07.716**: :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_network_arm.py` (``tune_network_arm.py``)
+**04:42.076** total execution time for **how_to_tune_with_autoscheduler** files:
+
+- **02:11.914**: :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_conv2d_layer_cuda.py` (``tune_conv2d_layer_cuda.py``)
+- **01:17.218**: :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_network_x86.py` (``tune_network_x86.py``)
+- **00:38.742**: :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_network_cuda.py` (``tune_network_cuda.py``)
+- **00:16.867**: :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_sparse_x86.py` (``tune_sparse_x86.py``)
+- **00:08.878**: :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_network_mali.py` (``tune_network_mali.py``)
+- **00:08.457**: :ref:`sphx_glr_how_to_tune_with_autoscheduler_tune_network_arm.py` (``tune_network_arm.py``)
diff --git a/docs/_sources/how_to/tune_with_autoscheduler/tune_conv2d_layer_cuda.rst.txt b/docs/_sources/how_to/tune_with_autoscheduler/tune_conv2d_layer_cuda.rst.txt
index 442ebce..02cb4aa 100644
--- a/docs/_sources/how_to/tune_with_autoscheduler/tune_conv2d_layer_cuda.rst.txt
+++ b/docs/_sources/how_to/tune_with_autoscheduler/tune_conv2d_layer_cuda.rst.txt
@@ -105,9 +105,9 @@ We then create a search task for the last convolution layer in the resnet.
     data = PLACEHOLDER [1, 512, 7, 7]
     pad_temp(i0, i1, i2, i3) = tir.if_then_else(((((i2 >= 1) && (i2 < 8)) && (i3 >= 1)) && (i3 < 8)), data[i0, i1, (i2 - 1), (i3 - 1)], 0f)
     kernel = PLACEHOLDER [512, 512, 3, 3]
-    compute(nn, ff, yy, xx) += (pad_temp[nn, rc, (yy + ry), (xx + rx)]*kernel[ff, rc, ry, rx])
+    conv2d_nchw(nn, ff, yy, xx) += (pad_temp[nn, rc, (yy + ry), (xx + rx)]*kernel[ff, rc, ry, rx])
     bias = PLACEHOLDER [1, 512, 1, 1]
-    T_add(ax0, ax1, ax2, ax3) = (compute[ax0, ax1, ax2, ax3] + bias[ax0, ax1, 0, 0])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nchw[ax0, ax1, ax2, ax3] + bias[ax0, ax1, 0, 0])
     compute(i0, i1, i2, i3) = max(T_add[i0, i1, i2, i3], 0f)
 
 
@@ -191,6 +191,7 @@ file and apply it.
 
 
 
+
 We can lower the schedule to see the IR after auto-scheduling.
 The auto-scheduler correctly performs optimizations including multi-level tiling,
 cooperative fetching, unrolling and operator fusion.
@@ -220,479 +221,129 @@ cooperative fetching, unrolling and operator fusion.
                  data: Buffer(data_2: Pointer(float32), float32, [1, 512, 7, 7], []),
                  kernel: Buffer(kernel_2: Pointer(float32), float32, [512, 512, 3, 3], [])}
       buffer_map = {data_1: data, kernel_1: kernel, bias_1: bias, compute_1: compute} {
-      attr [IterVar(blockIdx.x: int32, (nullptr), "ThreadIndex", "blockIdx.x")] "thread_extent" = 28;
-      allocate(compute_3: Pointer(local float32), float32, [14]), storage_scope = local;
-      allocate(pad_temp.shared: Pointer(shared float32), float32, [72]), storage_scope = shared;
-      allocate(kernel.shared: Pointer(shared float32), float32, [3072]), storage_scope = shared;
-      attr [IterVar(threadIdx.x: int32, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64 {
-        compute_3[0] = 0f32
-        compute_3[1] = 0f32
-        compute_3[2] = 0f32
-        compute_3[3] = 0f32
-        compute_3[4] = 0f32
-        compute_3[5] = 0f32
-        compute_3[6] = 0f32
-        compute_3[7] = 0f32
-        compute_3[8] = 0f32
-        compute_3[9] = 0f32
-        compute_3[10] = 0f32
-        compute_3[11] = 0f32
-        compute_3[12] = 0f32
-        compute_3[13] = 0f32
+      attr [IterVar(blockIdx.x: int32, (nullptr), "ThreadIndex", "blockIdx.x")] "thread_extent" = 32;
+      allocate(conv2d_nchw: Pointer(local float32), float32, [8]), storage_scope = local;
+      allocate(pad_temp.shared: Pointer(shared float32), float32, [648]), storage_scope = shared;
+      allocate(kernel.shared: Pointer(shared float32), float32, [1152]), storage_scope = shared;
+      attr [IterVar(threadIdx.x: int32, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 98 {
+        conv2d_nchw[0] = 0f32
+        conv2d_nchw[1] = 0f32
+        conv2d_nchw[2] = 0f32
+        conv2d_nchw[3] = 0f32
+        conv2d_nchw[4] = 0f32
+        conv2d_nchw[5] = 0f32
+        conv2d_nchw[6] = 0f32
+        conv2d_nchw[7] = 0f32
         for (rc.outer.outer: int32, 0, 64) {
-          for (ry.outer.outer: int32, 0, 3) {
-            attr [IterVar(threadIdx.x_1: int32, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64 {
-              if @tir.likely((threadIdx.x_1 < 18), dtype=bool) {
-                pad_temp.shared[(threadIdx.x_1*4)] = @tir.if_then_else(((((1 <= (ry.outer.outer + floormod(blockIdx.x, 7))) && ((ry.outer.outer + floormod(blockIdx.x, 7)) < 8)) && (1 <= floormod((threadIdx.x_1*4), 9))) && (floormod((threadIdx.x_1*4), 9) < 8)), (float32*)data_2[((((((rc.outer.outer*392) + (floordiv((threadIdx.x_1*4), 9)*49)) + (ry.outer.outer*7)) + (floormod(blockIdx.x, 7)*7)) + floormod((threadIdx.x_1*4), 9)) - 8)], 0f32, dtype=float32)
-              }
-              if @tir.likely((threadIdx.x_1 < 18), dtype=bool) {
-                pad_temp.shared[((threadIdx.x_1*4) + 1)] = @tir.if_then_else(((((1 <= (ry.outer.outer + floormod(blockIdx.x, 7))) && ((ry.outer.outer + floormod(blockIdx.x, 7)) < 8)) && (1 <= floormod(((threadIdx.x_1*4) + 1), 9))) && (floormod(((threadIdx.x_1*4) + 1), 9) < 8)), (float32*)data_2[((((((rc.outer.outer*392) + (floordiv(((threadIdx.x_1*4) + 1), 9)*49)) + (ry.outer.outer*7)) + (floormod(blockIdx.x, 7)*7)) + floormod(((threadIdx.x_1*4) + 1), 9)) - 8)], 0f32, dtype=float32)
-              }
-              if @tir.likely((threadIdx.x_1 < 18), dtype=bool) {
-                pad_temp.shared[((threadIdx.x_1*4) + 2)] = @tir.if_then_else(((((1 <= (ry.outer.outer + floormod(blockIdx.x, 7))) && ((ry.outer.outer + floormod(blockIdx.x, 7)) < 8)) && (1 <= floormod(((threadIdx.x_1*4) + 2), 9))) && (floormod(((threadIdx.x_1*4) + 2), 9) < 8)), (float32*)data_2[((((((rc.outer.outer*392) + (floordiv(((threadIdx.x_1*4) + 2), 9)*49)) + (ry.outer.outer*7)) + (floormod(blockIdx.x, 7)*7)) + floormod(((threadIdx.x_1*4) + 2), 9)) - 8)], 0f32, dtype=float32)
-              }
-              if @tir.likely((threadIdx.x_1 < 18), dtype=bool) {
-                pad_temp.shared[((threadIdx.x_1*4) + 3)] = @tir.if_then_else(((((1 <= (ry.outer.outer + floormod(blockIdx.x, 7))) && ((ry.outer.outer + floormod(blockIdx.x, 7)) < 8)) && (1 <= floormod(((threadIdx.x_1*4) + 3), 9))) && (floormod(((threadIdx.x_1*4) + 3), 9) < 8)), (float32*)data_2[((((((rc.outer.outer*392) + (floordiv(((threadIdx.x_1*4) + 3), 9)*49)) + (ry.outer.outer*7)) + (floormod(blockIdx.x, 7)*7)) + floormod(((threadIdx.x_1*4) + 3), 9)) - 8)], 0f32, dtype=float32)
+          let cse_var_2: int32 = (rc.outer.outer*392)
+          let cse_var_1: int32 = (rc.outer.outer*72)
+           {
+            attr [IterVar(threadIdx.x_1: int32, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 98;
+            pad_temp.shared[threadIdx.x_1] = @tir.if_then_else(((((9 <= floormod(threadIdx.x_1, 81)) && (floormod(threadIdx.x_1, 81) < 72)) && (1 <= floormod(threadIdx.x_1, 9))) && (floormod(threadIdx.x_1, 9) < 8)), (float32*)data_2[((((cse_var_2 + (floordiv(threadIdx.x_1, 81)*49)) + (floordiv(floormod(threadIdx.x_1, 81), 9)*7)) + floormod(threadIdx.x_1, 9)) - 8)], 0f32, dtype=float32)
+            attr [IterVar(threadIdx.x_1, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 98;
+            pad_temp.shared[(threadIdx.x_1 + 98)] = @tir.if_then_else(((((9 <= floormod((threadIdx.x_1 + 98), 81)) && (floormod((threadIdx.x_1 + 17), 81) < 72)) && (1 <= floormod((threadIdx.x_1 + 8), 9))) && (floormod((threadIdx.x_1 + 8), 9) < 8)), (float32*)data_2[((((cse_var_2 + (floordiv((threadIdx.x_1 + 98), 81)*49)) + (floordiv(floormod((threadIdx.x_1 + 98), 81), 9)*7)) + floormod((threadIdx.x_1 + 8), 9)) - 8)], 0f32, dtype=float32)
+            attr [IterVar(threadIdx.x_1, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 98;
+            pad_temp.shared[(threadIdx.x_1 + 196)] = @tir.if_then_else(((((9 <= floormod((threadIdx.x_1 + 196), 81)) && (floormod((threadIdx.x_1 + 34), 81) < 72)) && (1 <= floormod((threadIdx.x_1 + 7), 9))) && (floormod((threadIdx.x_1 + 7), 9) < 8)), (float32*)data_2[((((cse_var_2 + (floordiv((threadIdx.x_1 + 196), 81)*49)) + (floordiv(floormod((threadIdx.x_1 + 196), 81), 9)*7)) + floormod((threadIdx.x_1 + 7), 9)) - 8)], 0f32, dtype=float32)
+            attr [IterVar(threadIdx.x_1, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 98;
+            pad_temp.shared[(threadIdx.x_1 + 294)] = @tir.if_then_else(((((9 <= floormod((threadIdx.x_1 + 294), 81)) && (floormod((threadIdx.x_1 + 51), 81) < 72)) && (1 <= floormod((threadIdx.x_1 + 6), 9))) && (floormod((threadIdx.x_1 + 6), 9) < 8)), (float32*)data_2[((((cse_var_2 + (floordiv((threadIdx.x_1 + 294), 81)*49)) + (floordiv(floormod((threadIdx.x_1 + 294), 81), 9)*7)) + floormod((threadIdx.x_1 + 6), 9)) - 8)], 0f32, dtype=float32)
+            attr [IterVar(threadIdx.x_1, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 98;
+            pad_temp.shared[(threadIdx.x_1 + 392)] = @tir.if_then_else(((((9 <= floormod((threadIdx.x_1 + 392), 81)) && (floormod((threadIdx.x_1 + 68), 81) < 72)) && (1 <= floormod((threadIdx.x_1 + 5), 9))) && (floormod((threadIdx.x_1 + 5), 9) < 8)), (float32*)data_2[((((cse_var_2 + (floordiv((threadIdx.x_1 + 392), 81)*49)) + (floordiv(floormod((threadIdx.x_1 + 392), 81), 9)*7)) + floormod((threadIdx.x_1 + 5), 9)) - 8)], 0f32, dtype=float32)
+            attr [IterVar(threadIdx.x_1, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 98;
+            pad_temp.shared[(threadIdx.x_1 + 490)] = @tir.if_then_else(((((9 <= floormod((threadIdx.x_1 + 490), 81)) && (floormod((threadIdx.x_1 + 4), 81) < 72)) && (1 <= floormod((threadIdx.x_1 + 4), 9))) && (floormod((threadIdx.x_1 + 4), 9) < 8)), (float32*)data_2[((((cse_var_2 + (floordiv((threadIdx.x_1 + 490), 81)*49)) + (floordiv(floormod((threadIdx.x_1 + 490), 81), 9)*7)) + floormod((threadIdx.x_1 + 4), 9)) - 8)], 0f32, dtype=float32)
+            attr [IterVar(threadIdx.x_1, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 98;
+            if @tir.likely((threadIdx.x_1 < 60), dtype=bool) {
+              pad_temp.shared[(threadIdx.x_1 + 588)] = @tir.if_then_else((((floormod((threadIdx.x_1 + 21), 81) < 72) && (1 <= floormod((threadIdx.x_1 + 3), 9))) && (floormod((threadIdx.x_1 + 3), 9) < 8)), (float32*)data_2[((((cse_var_2 + (floordiv((threadIdx.x_1 + 588), 81)*49)) + (floordiv(floormod((threadIdx.x_1 + 588), 81), 9)*7)) + floormod((threadIdx.x_1 + 3), 9)) - 8)], 0f32, dtype=float32)
+            }
+            attr [IterVar(threadIdx.x_2: int32, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 98;
+            kernel.shared[threadIdx.x_2] = (float32*)kernel_2[((((blockIdx.x*73728) + (floordiv(threadIdx.x_2, 72)*4608)) + cse_var_1) + floormod(threadIdx.x_2, 72))]
+            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 98;
+            kernel.shared[(threadIdx.x_2 + 98)] = (float32*)kernel_2[((((blockIdx.x*73728) + (floordiv((floordiv(threadIdx.x_2, 2) + 49), 36)*4608)) + cse_var_1) + floormod((threadIdx.x_2 + 26), 72))]
+            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 98;
+            kernel.shared[(threadIdx.x_2 + 196)] = (float32*)kernel_2[((((blockIdx.x*73728) + (floordiv((floordiv(threadIdx.x_2, 2) + 98), 36)*4608)) + cse_var_1) + floormod((threadIdx.x_2 + 52), 72))]
+            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 98;
+            kernel.shared[(threadIdx.x_2 + 294)] = (float32*)kernel_2[((((blockIdx.x*73728) + (floordiv((floordiv(threadIdx.x_2, 2) + 147), 36)*4608)) + cse_var_1) + floormod((threadIdx.x_2 + 6), 72))]
+            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 98;
+            kernel.shared[(threadIdx.x_2 + 392)] = (float32*)kernel_2[((((blockIdx.x*73728) + (floordiv((floordiv(threadIdx.x_2, 2) + 196), 36)*4608)) + cse_var_1) + floormod((threadIdx.x_2 + 32), 72))]
+            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 98;
+            kernel.shared[(threadIdx.x_2 + 490)] = (float32*)kernel_2[((((blockIdx.x*73728) + (floordiv((floordiv(threadIdx.x_2, 2) + 245), 36)*4608)) + cse_var_1) + floormod((threadIdx.x_2 + 58), 72))]
+            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 98;
+            kernel.shared[(threadIdx.x_2 + 588)] = (float32*)kernel_2[((((blockIdx.x*73728) + (floordiv((floordiv(threadIdx.x_2, 2) + 294), 36)*4608)) + cse_var_1) + floormod((threadIdx.x_2 + 12), 72))]
+            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 98;
+            kernel.shared[(threadIdx.x_2 + 686)] = (float32*)kernel_2[((((blockIdx.x*73728) + (floordiv((floordiv(threadIdx.x_2, 2) + 343), 36)*4608)) + cse_var_1) + floormod((threadIdx.x_2 + 38), 72))]
+            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 98;
+            kernel.shared[(threadIdx.x_2 + 784)] = (float32*)kernel_2[((((blockIdx.x*73728) + (floordiv((floordiv(threadIdx.x_2, 2) + 392), 36)*4608)) + cse_var_1) + floormod((threadIdx.x_2 + 64), 72))]
+            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 98;
+            kernel.shared[(threadIdx.x_2 + 882)] = (float32*)kernel_2[((((blockIdx.x*73728) + (floordiv((floordiv(threadIdx.x_2, 2) + 441), 36)*4608)) + cse_var_1) + floormod((threadIdx.x_2 + 18), 72))]
+            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 98;
+            kernel.shared[(threadIdx.x_2 + 980)] = (float32*)kernel_2[((((blockIdx.x*73728) + (floordiv((floordiv(threadIdx.x_2, 2) + 490), 36)*4608)) + cse_var_1) + floormod((threadIdx.x_2 + 44), 72))]
+            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 98;
+            if @tir.likely((threadIdx.x_2 < 74), dtype=bool) {
+              kernel.shared[(threadIdx.x_2 + 1078)] = (float32*)kernel_2[((((blockIdx.x*73728) + (floordiv((floordiv(threadIdx.x_2, 2) + 539), 36)*4608)) + cse_var_1) + floormod((threadIdx.x_2 + 70), 72))]
+            }
+            for (rc.outer.inner: int32, 0, 2) {
+              for (ry.outer.inner: int32, 0, 3) {
+                for (ff.outer.inner: int32, 0, 2) {
+                  let cse_var_6: int32 = (ff.outer.inner*4)
+                  let cse_var_5: int32 = (cse_var_6 + 1)
+                  let cse_var_4: int32 = (cse_var_6 + 2)
+                  let cse_var_3: int32 = (cse_var_6 + 3)
+                   {
+                    conv2d_nchw[cse_var_6] = ((float32*)conv2d_nchw[cse_var_6] + ((float32*)pad_temp.shared[((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7))]*(float32*)kernel.shared[((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3))]))
+                    conv2d_nchw[cse_var_5] = ((float32*)conv2d_nchw[cse_var_5] + ((float32*)pad_temp.shared[((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7))]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 72)]))
+                    conv2d_nchw[cse_var_4] = ((float32*)conv2d_nchw[cse_var_4] + ((float32*)pad_temp.shared[((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7))]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 144)]))
+                    conv2d_nchw[cse_var_3] = ((float32*)conv2d_nchw[cse_var_3] + ((float32*)pad_temp.shared[((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7))]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 216)]))
+                    conv2d_nchw[cse_var_6] = ((float32*)conv2d_nchw[cse_var_6] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 1)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 1)]))
+                    conv2d_nchw[cse_var_5] = ((float32*)conv2d_nchw[cse_var_5] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 1)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 73)]))
+                    conv2d_nchw[cse_var_4] = ((float32*)conv2d_nchw[cse_var_4] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 1)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 145)]))
+                    conv2d_nchw[cse_var_3] = ((float32*)conv2d_nchw[cse_var_3] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 1)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 217)]))
+                    conv2d_nchw[cse_var_6] = ((float32*)conv2d_nchw[cse_var_6] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 2)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 2)]))
+                    conv2d_nchw[cse_var_5] = ((float32*)conv2d_nchw[cse_var_5] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 2)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 74)]))
+                    conv2d_nchw[cse_var_4] = ((float32*)conv2d_nchw[cse_var_4] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 2)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 146)]))
+                    conv2d_nchw[cse_var_3] = ((float32*)conv2d_nchw[cse_var_3] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 2)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 218)]))
+                    conv2d_nchw[cse_var_6] = ((float32*)conv2d_nchw[cse_var_6] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 81)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 9)]))
+                    conv2d_nchw[cse_var_5] = ((float32*)conv2d_nchw[cse_var_5] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 81)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 81)]))
+                    conv2d_nchw[cse_var_4] = ((float32*)conv2d_nchw[cse_var_4] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 81)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 153)]))
+                    conv2d_nchw[cse_var_3] = ((float32*)conv2d_nchw[cse_var_3] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 81)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 225)]))
+                    conv2d_nchw[cse_var_6] = ((float32*)conv2d_nchw[cse_var_6] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 82)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 10)]))
+                    conv2d_nchw[cse_var_5] = ((float32*)conv2d_nchw[cse_var_5] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 82)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 82)]))
+                    conv2d_nchw[cse_var_4] = ((float32*)conv2d_nchw[cse_var_4] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 82)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 154)]))
+                    conv2d_nchw[cse_var_3] = ((float32*)conv2d_nchw[cse_var_3] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 82)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 226)]))
+                    conv2d_nchw[cse_var_6] = ((float32*)conv2d_nchw[cse_var_6] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 83)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 11)]))
+                    conv2d_nchw[cse_var_5] = ((float32*)conv2d_nchw[cse_var_5] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 83)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 83)]))
+                    conv2d_nchw[cse_var_4] = ((float32*)conv2d_nchw[cse_var_4] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 83)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 155)]))
+                    conv2d_nchw[cse_var_3] = ((float32*)conv2d_nchw[cse_var_3] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 83)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 227)]))
+                    conv2d_nchw[cse_var_6] = ((float32*)conv2d_nchw[cse_var_6] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 162)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 18)]))
+                    conv2d_nchw[cse_var_5] = ((float32*)conv2d_nchw[cse_var_5] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 162)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 90)]))
+                    conv2d_nchw[cse_var_4] = ((float32*)conv2d_nchw[cse_var_4] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 162)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 162)]))
+                    conv2d_nchw[cse_var_3] = ((float32*)conv2d_nchw[cse_var_3] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 162)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 234)]))
+                    conv2d_nchw[cse_var_6] = ((float32*)conv2d_nchw[cse_var_6] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 163)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 19)]))
+                    conv2d_nchw[cse_var_5] = ((float32*)conv2d_nchw[cse_var_5] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 163)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 91)]))
+                    conv2d_nchw[cse_var_4] = ((float32*)conv2d_nchw[cse_var_4] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 163)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 163)]))
+                    conv2d_nchw[cse_var_3] = ((float32*)conv2d_nchw[cse_var_3] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 163)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 235)]))
+                    conv2d_nchw[cse_var_6] = ((float32*)conv2d_nchw[cse_var_6] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 164)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 20)]))
+                    conv2d_nchw[cse_var_5] = ((float32*)conv2d_nchw[cse_var_5] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 164)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 92)]))
+                    conv2d_nchw[cse_var_4] = ((float32*)conv2d_nchw[cse_var_4] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 164)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 164)]))
+                    conv2d_nchw[cse_var_3] = ((float32*)conv2d_nchw[cse_var_3] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 164)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 236)]))
+                    conv2d_nchw[cse_var_6] = ((float32*)conv2d_nchw[cse_var_6] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 243)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 27)]))
+                    conv2d_nchw[cse_var_5] = ((float32*)conv2d_nchw[cse_var_5] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 243)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 99)]))
+                    conv2d_nchw[cse_var_4] = ((float32*)conv2d_nchw[cse_var_4] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 243)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 171)]))
+                    conv2d_nchw[cse_var_3] = ((float32*)conv2d_nchw[cse_var_3] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 243)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 243)]))
+                    conv2d_nchw[cse_var_6] = ((float32*)conv2d_nchw[cse_var_6] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 244)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 28)]))
+                    conv2d_nchw[cse_var_5] = ((float32*)conv2d_nchw[cse_var_5] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 244)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 100)]))
+                    conv2d_nchw[cse_var_4] = ((float32*)conv2d_nchw[cse_var_4] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 244)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 172)]))
+                    conv2d_nchw[cse_var_3] = ((float32*)conv2d_nchw[cse_var_3] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 244)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 244)]))
+                    conv2d_nchw[cse_var_6] = ((float32*)conv2d_nchw[cse_var_6] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 245)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 29)]))
+                    conv2d_nchw[cse_var_5] = ((float32*)conv2d_nchw[cse_var_5] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 245)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 101)]))
+                    conv2d_nchw[cse_var_4] = ((float32*)conv2d_nchw[cse_var_4] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 245)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 173)]))
+                    conv2d_nchw[cse_var_3] = ((float32*)conv2d_nchw[cse_var_3] + ((float32*)pad_temp.shared[(((((rc.outer.inner*324) + (floordiv(floormod(threadIdx.x, 49), 7)*9)) + (ry.outer.inner*9)) + floormod(threadIdx.x, 7)) + 245)]*(float32*)kernel.shared[(((((floordiv(threadIdx.x, 49)*576) + (ff.outer.inner*288)) + (rc.outer.inner*36)) + (ry.outer.inner*3)) + 245)]))
+                  }
+                }
               }
             }
-            attr [IterVar(threadIdx.x_2: int32, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[threadIdx.x_2] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv(threadIdx.x_2, 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod(threadIdx.x_2, 24), 3)*9)) + (ry.outer.outer*3)) + floormod(threadIdx.x_2, 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 64)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 64), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 16), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 1), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 128)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 128), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 8), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 2), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 192)] = (float32*)kernel_2[(((((((floordiv(blockIdx.x, 7)*589824) + (floordiv(threadIdx.x_2, 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod(threadIdx.x_2, 24), 3)*9)) + (ry.outer.outer*3)) + floormod(threadIdx.x_2, 3)) + 36864)]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 256)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 256), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 16), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 1), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 320)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 320), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 8), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 2), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 384)] = (float32*)kernel_2[(((((((floordiv(blockIdx.x, 7)*589824) + (floordiv(threadIdx.x_2, 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod(threadIdx.x_2, 24), 3)*9)) + (ry.outer.outer*3)) + floormod(threadIdx.x_2, 3)) + 73728)]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 448)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 448), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 16), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 1), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 512)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 512), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 8), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 2), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 576)] = (float32*)kernel_2[(((((((floordiv(blockIdx.x, 7)*589824) + (floordiv(threadIdx.x_2, 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod(threadIdx.x_2, 24), 3)*9)) + (ry.outer.outer*3)) + floormod(threadIdx.x_2, 3)) + 110592)]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 640)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 640), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 16), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 1), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 704)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 704), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 8), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 2), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 768)] = (float32*)kernel_2[(((((((floordiv(blockIdx.x, 7)*589824) + (floordiv(threadIdx.x_2, 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod(threadIdx.x_2, 24), 3)*9)) + (ry.outer.outer*3)) + floormod(threadIdx.x_2, 3)) + 147456)]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 832)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 832), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 16), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 1), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 896)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 896), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 8), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 2), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 960)] = (float32*)kernel_2[(((((((floordiv(blockIdx.x, 7)*589824) + (floordiv(threadIdx.x_2, 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod(threadIdx.x_2, 24), 3)*9)) + (ry.outer.outer*3)) + floormod(threadIdx.x_2, 3)) + 184320)]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 1024)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 1024), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 16), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 1), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 1088)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 1088), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 8), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 2), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 1152)] = (float32*)kernel_2[(((((((floordiv(blockIdx.x, 7)*589824) + (floordiv(threadIdx.x_2, 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod(threadIdx.x_2, 24), 3)*9)) + (ry.outer.outer*3)) + floormod(threadIdx.x_2, 3)) + 221184)]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 1216)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 1216), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 16), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 1), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 1280)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 1280), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 8), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 2), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 1344)] = (float32*)kernel_2[(((((((floordiv(blockIdx.x, 7)*589824) + (floordiv(threadIdx.x_2, 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod(threadIdx.x_2, 24), 3)*9)) + (ry.outer.outer*3)) + floormod(threadIdx.x_2, 3)) + 258048)]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 1408)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 1408), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 16), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 1), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 1472)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 1472), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 8), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 2), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 1536)] = (float32*)kernel_2[(((((((floordiv(blockIdx.x, 7)*589824) + (floordiv(threadIdx.x_2, 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod(threadIdx.x_2, 24), 3)*9)) + (ry.outer.outer*3)) + floormod(threadIdx.x_2, 3)) + 294912)]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 1600)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 1600), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 16), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 1), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 1664)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 1664), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 8), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 2), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 1728)] = (float32*)kernel_2[(((((((floordiv(blockIdx.x, 7)*589824) + (floordiv(threadIdx.x_2, 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod(threadIdx.x_2, 24), 3)*9)) + (ry.outer.outer*3)) + floormod(threadIdx.x_2, 3)) + 331776)]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 1792)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 1792), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 16), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 1), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 1856)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 1856), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 8), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 2), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 1920)] = (float32*)kernel_2[(((((((floordiv(blockIdx.x, 7)*589824) + (floordiv(threadIdx.x_2, 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod(threadIdx.x_2, 24), 3)*9)) + (ry.outer.outer*3)) + floormod(threadIdx.x_2, 3)) + 368640)]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 1984)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 1984), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 16), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 1), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 2048)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 2048), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 8), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 2), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 2112)] = (float32*)kernel_2[(((((((floordiv(blockIdx.x, 7)*589824) + (floordiv(threadIdx.x_2, 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod(threadIdx.x_2, 24), 3)*9)) + (ry.outer.outer*3)) + floormod(threadIdx.x_2, 3)) + 405504)]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 2176)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 2176), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 16), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 1), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 2240)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 2240), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 8), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 2), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 2304)] = (float32*)kernel_2[(((((((floordiv(blockIdx.x, 7)*589824) + (floordiv(threadIdx.x_2, 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod(threadIdx.x_2, 24), 3)*9)) + (ry.outer.outer*3)) + floormod(threadIdx.x_2, 3)) + 442368)]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 2368)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 2368), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 16), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 1), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 2432)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 2432), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 8), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 2), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 2496)] = (float32*)kernel_2[(((((((floordiv(blockIdx.x, 7)*589824) + (floordiv(threadIdx.x_2, 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod(threadIdx.x_2, 24), 3)*9)) + (ry.outer.outer*3)) + floormod(threadIdx.x_2, 3)) + 479232)]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 2560)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 2560), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 16), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 1), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 2624)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 2624), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 8), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 2), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 2688)] = (float32*)kernel_2[(((((((floordiv(blockIdx.x, 7)*589824) + (floordiv(threadIdx.x_2, 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod(threadIdx.x_2, 24), 3)*9)) + (ry.outer.outer*3)) + floormod(threadIdx.x_2, 3)) + 516096)]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 2752)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 2752), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 16), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 1), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 2816)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 2816), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 8), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 2), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 2880)] = (float32*)kernel_2[(((((((floordiv(blockIdx.x, 7)*589824) + (floordiv(threadIdx.x_2, 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod(threadIdx.x_2, 24), 3)*9)) + (ry.outer.outer*3)) + floormod(threadIdx.x_2, 3)) + 552960)]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 2944)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 2944), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 16), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 1), 3))]
-            attr [IterVar(threadIdx.x_2, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 64;
-            kernel.shared[(threadIdx.x_2 + 3008)] = (float32*)kernel_2[((((((floordiv(blockIdx.x, 7)*589824) + (floordiv((threadIdx.x_2 + 3008), 24)*4608)) + (rc.outer.outer*72)) + (floordiv(floormod((threadIdx.x_2 + 8), 24), 3)*9)) + (ry.outer.outer*3)) + floormod((threadIdx.x_2 + 2), 3))]
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[0]*(float32*)kernel.shared[(threadIdx.x*48)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[9]*(float32*)kernel.shared[((threadIdx.x*48) + 3)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[1]*(float32*)kernel.shared[(threadIdx.x*48)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[10]*(float32*)kernel.shared[((threadIdx.x*48) + 3)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[2]*(float32*)kernel.shared[(threadIdx.x*48)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[11]*(float32*)kernel.shared[((threadIdx.x*48) + 3)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[3]*(float32*)kernel.shared[(threadIdx.x*48)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[12]*(float32*)kernel.shared[((threadIdx.x*48) + 3)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[4]*(float32*)kernel.shared[(threadIdx.x*48)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[13]*(float32*)kernel.shared[((threadIdx.x*48) + 3)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[5]*(float32*)kernel.shared[(threadIdx.x*48)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[14]*(float32*)kernel.shared[((threadIdx.x*48) + 3)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[6]*(float32*)kernel.shared[(threadIdx.x*48)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[15]*(float32*)kernel.shared[((threadIdx.x*48) + 3)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[0]*(float32*)kernel.shared[((threadIdx.x*48) + 24)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[9]*(float32*)kernel.shared[((threadIdx.x*48) + 27)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[1]*(float32*)kernel.shared[((threadIdx.x*48) + 24)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[10]*(float32*)kernel.shared[((threadIdx.x*48) + 27)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[2]*(float32*)kernel.shared[((threadIdx.x*48) + 24)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[11]*(float32*)kernel.shared[((threadIdx.x*48) + 27)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[3]*(float32*)kernel.shared[((threadIdx.x*48) + 24)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[12]*(float32*)kernel.shared[((threadIdx.x*48) + 27)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[4]*(float32*)kernel.shared[((threadIdx.x*48) + 24)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[13]*(float32*)kernel.shared[((threadIdx.x*48) + 27)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[5]*(float32*)kernel.shared[((threadIdx.x*48) + 24)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[14]*(float32*)kernel.shared[((threadIdx.x*48) + 27)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[6]*(float32*)kernel.shared[((threadIdx.x*48) + 24)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[15]*(float32*)kernel.shared[((threadIdx.x*48) + 27)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[1]*(float32*)kernel.shared[((threadIdx.x*48) + 1)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[10]*(float32*)kernel.shared[((threadIdx.x*48) + 4)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[2]*(float32*)kernel.shared[((threadIdx.x*48) + 1)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[11]*(float32*)kernel.shared[((threadIdx.x*48) + 4)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[3]*(float32*)kernel.shared[((threadIdx.x*48) + 1)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[12]*(float32*)kernel.shared[((threadIdx.x*48) + 4)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[4]*(float32*)kernel.shared[((threadIdx.x*48) + 1)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[13]*(float32*)kernel.shared[((threadIdx.x*48) + 4)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[5]*(float32*)kernel.shared[((threadIdx.x*48) + 1)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[14]*(float32*)kernel.shared[((threadIdx.x*48) + 4)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[6]*(float32*)kernel.shared[((threadIdx.x*48) + 1)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[15]*(float32*)kernel.shared[((threadIdx.x*48) + 4)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[7]*(float32*)kernel.shared[((threadIdx.x*48) + 1)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[16]*(float32*)kernel.shared[((threadIdx.x*48) + 4)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[1]*(float32*)kernel.shared[((threadIdx.x*48) + 25)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[10]*(float32*)kernel.shared[((threadIdx.x*48) + 28)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[2]*(float32*)kernel.shared[((threadIdx.x*48) + 25)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[11]*(float32*)kernel.shared[((threadIdx.x*48) + 28)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[3]*(float32*)kernel.shared[((threadIdx.x*48) + 25)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[12]*(float32*)kernel.shared[((threadIdx.x*48) + 28)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[4]*(float32*)kernel.shared[((threadIdx.x*48) + 25)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[13]*(float32*)kernel.shared[((threadIdx.x*48) + 28)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[5]*(float32*)kernel.shared[((threadIdx.x*48) + 25)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[14]*(float32*)kernel.shared[((threadIdx.x*48) + 28)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[6]*(float32*)kernel.shared[((threadIdx.x*48) + 25)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[15]*(float32*)kernel.shared[((threadIdx.x*48) + 28)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[7]*(float32*)kernel.shared[((threadIdx.x*48) + 25)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[16]*(float32*)kernel.shared[((threadIdx.x*48) + 28)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[2]*(float32*)kernel.shared[((threadIdx.x*48) + 2)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[11]*(float32*)kernel.shared[((threadIdx.x*48) + 5)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[3]*(float32*)kernel.shared[((threadIdx.x*48) + 2)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[12]*(float32*)kernel.shared[((threadIdx.x*48) + 5)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[4]*(float32*)kernel.shared[((threadIdx.x*48) + 2)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[13]*(float32*)kernel.shared[((threadIdx.x*48) + 5)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[5]*(float32*)kernel.shared[((threadIdx.x*48) + 2)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[14]*(float32*)kernel.shared[((threadIdx.x*48) + 5)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[6]*(float32*)kernel.shared[((threadIdx.x*48) + 2)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[15]*(float32*)kernel.shared[((threadIdx.x*48) + 5)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[7]*(float32*)kernel.shared[((threadIdx.x*48) + 2)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[16]*(float32*)kernel.shared[((threadIdx.x*48) + 5)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[8]*(float32*)kernel.shared[((threadIdx.x*48) + 2)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[17]*(float32*)kernel.shared[((threadIdx.x*48) + 5)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[2]*(float32*)kernel.shared[((threadIdx.x*48) + 26)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[11]*(float32*)kernel.shared[((threadIdx.x*48) + 29)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[3]*(float32*)kernel.shared[((threadIdx.x*48) + 26)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[12]*(float32*)kernel.shared[((threadIdx.x*48) + 29)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[4]*(float32*)kernel.shared[((threadIdx.x*48) + 26)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[13]*(float32*)kernel.shared[((threadIdx.x*48) + 29)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[5]*(float32*)kernel.shared[((threadIdx.x*48) + 26)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[14]*(float32*)kernel.shared[((threadIdx.x*48) + 29)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[6]*(float32*)kernel.shared[((threadIdx.x*48) + 26)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[15]*(float32*)kernel.shared[((threadIdx.x*48) + 29)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[7]*(float32*)kernel.shared[((threadIdx.x*48) + 26)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[16]*(float32*)kernel.shared[((threadIdx.x*48) + 29)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[8]*(float32*)kernel.shared[((threadIdx.x*48) + 26)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[17]*(float32*)kernel.shared[((threadIdx.x*48) + 29)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[18]*(float32*)kernel.shared[((threadIdx.x*48) + 6)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[27]*(float32*)kernel.shared[((threadIdx.x*48) + 9)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[19]*(float32*)kernel.shared[((threadIdx.x*48) + 6)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[28]*(float32*)kernel.shared[((threadIdx.x*48) + 9)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[20]*(float32*)kernel.shared[((threadIdx.x*48) + 6)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[29]*(float32*)kernel.shared[((threadIdx.x*48) + 9)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[21]*(float32*)kernel.shared[((threadIdx.x*48) + 6)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[30]*(float32*)kernel.shared[((threadIdx.x*48) + 9)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[22]*(float32*)kernel.shared[((threadIdx.x*48) + 6)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[31]*(float32*)kernel.shared[((threadIdx.x*48) + 9)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[23]*(float32*)kernel.shared[((threadIdx.x*48) + 6)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[32]*(float32*)kernel.shared[((threadIdx.x*48) + 9)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[24]*(float32*)kernel.shared[((threadIdx.x*48) + 6)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[33]*(float32*)kernel.shared[((threadIdx.x*48) + 9)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[18]*(float32*)kernel.shared[((threadIdx.x*48) + 30)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[27]*(float32*)kernel.shared[((threadIdx.x*48) + 33)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[19]*(float32*)kernel.shared[((threadIdx.x*48) + 30)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[28]*(float32*)kernel.shared[((threadIdx.x*48) + 33)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[20]*(float32*)kernel.shared[((threadIdx.x*48) + 30)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[29]*(float32*)kernel.shared[((threadIdx.x*48) + 33)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[21]*(float32*)kernel.shared[((threadIdx.x*48) + 30)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[30]*(float32*)kernel.shared[((threadIdx.x*48) + 33)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[22]*(float32*)kernel.shared[((threadIdx.x*48) + 30)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[31]*(float32*)kernel.shared[((threadIdx.x*48) + 33)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[23]*(float32*)kernel.shared[((threadIdx.x*48) + 30)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[32]*(float32*)kernel.shared[((threadIdx.x*48) + 33)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[24]*(float32*)kernel.shared[((threadIdx.x*48) + 30)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[33]*(float32*)kernel.shared[((threadIdx.x*48) + 33)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[19]*(float32*)kernel.shared[((threadIdx.x*48) + 7)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[28]*(float32*)kernel.shared[((threadIdx.x*48) + 10)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[20]*(float32*)kernel.shared[((threadIdx.x*48) + 7)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[29]*(float32*)kernel.shared[((threadIdx.x*48) + 10)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[21]*(float32*)kernel.shared[((threadIdx.x*48) + 7)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[30]*(float32*)kernel.shared[((threadIdx.x*48) + 10)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[22]*(float32*)kernel.shared[((threadIdx.x*48) + 7)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[31]*(float32*)kernel.shared[((threadIdx.x*48) + 10)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[23]*(float32*)kernel.shared[((threadIdx.x*48) + 7)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[32]*(float32*)kernel.shared[((threadIdx.x*48) + 10)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[24]*(float32*)kernel.shared[((threadIdx.x*48) + 7)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[33]*(float32*)kernel.shared[((threadIdx.x*48) + 10)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[25]*(float32*)kernel.shared[((threadIdx.x*48) + 7)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[34]*(float32*)kernel.shared[((threadIdx.x*48) + 10)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[19]*(float32*)kernel.shared[((threadIdx.x*48) + 31)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[28]*(float32*)kernel.shared[((threadIdx.x*48) + 34)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[20]*(float32*)kernel.shared[((threadIdx.x*48) + 31)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[29]*(float32*)kernel.shared[((threadIdx.x*48) + 34)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[21]*(float32*)kernel.shared[((threadIdx.x*48) + 31)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[30]*(float32*)kernel.shared[((threadIdx.x*48) + 34)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[22]*(float32*)kernel.shared[((threadIdx.x*48) + 31)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[31]*(float32*)kernel.shared[((threadIdx.x*48) + 34)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[23]*(float32*)kernel.shared[((threadIdx.x*48) + 31)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[32]*(float32*)kernel.shared[((threadIdx.x*48) + 34)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[24]*(float32*)kernel.shared[((threadIdx.x*48) + 31)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[33]*(float32*)kernel.shared[((threadIdx.x*48) + 34)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[25]*(float32*)kernel.shared[((threadIdx.x*48) + 31)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[34]*(float32*)kernel.shared[((threadIdx.x*48) + 34)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[20]*(float32*)kernel.shared[((threadIdx.x*48) + 8)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[29]*(float32*)kernel.shared[((threadIdx.x*48) + 11)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[21]*(float32*)kernel.shared[((threadIdx.x*48) + 8)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[30]*(float32*)kernel.shared[((threadIdx.x*48) + 11)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[22]*(float32*)kernel.shared[((threadIdx.x*48) + 8)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[31]*(float32*)kernel.shared[((threadIdx.x*48) + 11)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[23]*(float32*)kernel.shared[((threadIdx.x*48) + 8)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[32]*(float32*)kernel.shared[((threadIdx.x*48) + 11)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[24]*(float32*)kernel.shared[((threadIdx.x*48) + 8)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[33]*(float32*)kernel.shared[((threadIdx.x*48) + 11)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[25]*(float32*)kernel.shared[((threadIdx.x*48) + 8)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[34]*(float32*)kernel.shared[((threadIdx.x*48) + 11)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[26]*(float32*)kernel.shared[((threadIdx.x*48) + 8)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[35]*(float32*)kernel.shared[((threadIdx.x*48) + 11)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[20]*(float32*)kernel.shared[((threadIdx.x*48) + 32)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[29]*(float32*)kernel.shared[((threadIdx.x*48) + 35)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[21]*(float32*)kernel.shared[((threadIdx.x*48) + 32)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[30]*(float32*)kernel.shared[((threadIdx.x*48) + 35)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[22]*(float32*)kernel.shared[((threadIdx.x*48) + 32)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[31]*(float32*)kernel.shared[((threadIdx.x*48) + 35)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[23]*(float32*)kernel.shared[((threadIdx.x*48) + 32)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[32]*(float32*)kernel.shared[((threadIdx.x*48) + 35)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[24]*(float32*)kernel.shared[((threadIdx.x*48) + 32)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[33]*(float32*)kernel.shared[((threadIdx.x*48) + 35)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[25]*(float32*)kernel.shared[((threadIdx.x*48) + 32)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[34]*(float32*)kernel.shared[((threadIdx.x*48) + 35)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[26]*(float32*)kernel.shared[((threadIdx.x*48) + 32)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[35]*(float32*)kernel.shared[((threadIdx.x*48) + 35)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[36]*(float32*)kernel.shared[((threadIdx.x*48) + 12)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[45]*(float32*)kernel.shared[((threadIdx.x*48) + 15)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[37]*(float32*)kernel.shared[((threadIdx.x*48) + 12)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[46]*(float32*)kernel.shared[((threadIdx.x*48) + 15)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[38]*(float32*)kernel.shared[((threadIdx.x*48) + 12)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[47]*(float32*)kernel.shared[((threadIdx.x*48) + 15)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[39]*(float32*)kernel.shared[((threadIdx.x*48) + 12)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[48]*(float32*)kernel.shared[((threadIdx.x*48) + 15)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[40]*(float32*)kernel.shared[((threadIdx.x*48) + 12)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[49]*(float32*)kernel.shared[((threadIdx.x*48) + 15)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[41]*(float32*)kernel.shared[((threadIdx.x*48) + 12)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[50]*(float32*)kernel.shared[((threadIdx.x*48) + 15)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[42]*(float32*)kernel.shared[((threadIdx.x*48) + 12)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[51]*(float32*)kernel.shared[((threadIdx.x*48) + 15)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[36]*(float32*)kernel.shared[((threadIdx.x*48) + 36)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[45]*(float32*)kernel.shared[((threadIdx.x*48) + 39)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[37]*(float32*)kernel.shared[((threadIdx.x*48) + 36)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[46]*(float32*)kernel.shared[((threadIdx.x*48) + 39)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[38]*(float32*)kernel.shared[((threadIdx.x*48) + 36)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[47]*(float32*)kernel.shared[((threadIdx.x*48) + 39)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[39]*(float32*)kernel.shared[((threadIdx.x*48) + 36)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[48]*(float32*)kernel.shared[((threadIdx.x*48) + 39)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[40]*(float32*)kernel.shared[((threadIdx.x*48) + 36)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[49]*(float32*)kernel.shared[((threadIdx.x*48) + 39)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[41]*(float32*)kernel.shared[((threadIdx.x*48) + 36)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[50]*(float32*)kernel.shared[((threadIdx.x*48) + 39)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[42]*(float32*)kernel.shared[((threadIdx.x*48) + 36)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[51]*(float32*)kernel.shared[((threadIdx.x*48) + 39)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[37]*(float32*)kernel.shared[((threadIdx.x*48) + 13)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[46]*(float32*)kernel.shared[((threadIdx.x*48) + 16)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[38]*(float32*)kernel.shared[((threadIdx.x*48) + 13)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[47]*(float32*)kernel.shared[((threadIdx.x*48) + 16)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[39]*(float32*)kernel.shared[((threadIdx.x*48) + 13)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[48]*(float32*)kernel.shared[((threadIdx.x*48) + 16)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[40]*(float32*)kernel.shared[((threadIdx.x*48) + 13)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[49]*(float32*)kernel.shared[((threadIdx.x*48) + 16)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[41]*(float32*)kernel.shared[((threadIdx.x*48) + 13)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[50]*(float32*)kernel.shared[((threadIdx.x*48) + 16)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[42]*(float32*)kernel.shared[((threadIdx.x*48) + 13)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[51]*(float32*)kernel.shared[((threadIdx.x*48) + 16)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[43]*(float32*)kernel.shared[((threadIdx.x*48) + 13)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[52]*(float32*)kernel.shared[((threadIdx.x*48) + 16)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[37]*(float32*)kernel.shared[((threadIdx.x*48) + 37)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[46]*(float32*)kernel.shared[((threadIdx.x*48) + 40)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[38]*(float32*)kernel.shared[((threadIdx.x*48) + 37)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[47]*(float32*)kernel.shared[((threadIdx.x*48) + 40)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[39]*(float32*)kernel.shared[((threadIdx.x*48) + 37)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[48]*(float32*)kernel.shared[((threadIdx.x*48) + 40)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[40]*(float32*)kernel.shared[((threadIdx.x*48) + 37)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[49]*(float32*)kernel.shared[((threadIdx.x*48) + 40)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[41]*(float32*)kernel.shared[((threadIdx.x*48) + 37)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[50]*(float32*)kernel.shared[((threadIdx.x*48) + 40)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[42]*(float32*)kernel.shared[((threadIdx.x*48) + 37)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[51]*(float32*)kernel.shared[((threadIdx.x*48) + 40)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[43]*(float32*)kernel.shared[((threadIdx.x*48) + 37)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[52]*(float32*)kernel.shared[((threadIdx.x*48) + 40)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[38]*(float32*)kernel.shared[((threadIdx.x*48) + 14)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[47]*(float32*)kernel.shared[((threadIdx.x*48) + 17)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[39]*(float32*)kernel.shared[((threadIdx.x*48) + 14)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[48]*(float32*)kernel.shared[((threadIdx.x*48) + 17)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[40]*(float32*)kernel.shared[((threadIdx.x*48) + 14)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[49]*(float32*)kernel.shared[((threadIdx.x*48) + 17)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[41]*(float32*)kernel.shared[((threadIdx.x*48) + 14)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[50]*(float32*)kernel.shared[((threadIdx.x*48) + 17)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[42]*(float32*)kernel.shared[((threadIdx.x*48) + 14)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[51]*(float32*)kernel.shared[((threadIdx.x*48) + 17)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[43]*(float32*)kernel.shared[((threadIdx.x*48) + 14)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[52]*(float32*)kernel.shared[((threadIdx.x*48) + 17)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[44]*(float32*)kernel.shared[((threadIdx.x*48) + 14)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[53]*(float32*)kernel.shared[((threadIdx.x*48) + 17)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[38]*(float32*)kernel.shared[((threadIdx.x*48) + 38)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[47]*(float32*)kernel.shared[((threadIdx.x*48) + 41)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[39]*(float32*)kernel.shared[((threadIdx.x*48) + 38)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[48]*(float32*)kernel.shared[((threadIdx.x*48) + 41)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[40]*(float32*)kernel.shared[((threadIdx.x*48) + 38)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[49]*(float32*)kernel.shared[((threadIdx.x*48) + 41)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[41]*(float32*)kernel.shared[((threadIdx.x*48) + 38)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[50]*(float32*)kernel.shared[((threadIdx.x*48) + 41)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[42]*(float32*)kernel.shared[((threadIdx.x*48) + 38)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[51]*(float32*)kernel.shared[((threadIdx.x*48) + 41)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[43]*(float32*)kernel.shared[((threadIdx.x*48) + 38)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[52]*(float32*)kernel.shared[((threadIdx.x*48) + 41)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[44]*(float32*)kernel.shared[((threadIdx.x*48) + 38)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[53]*(float32*)kernel.shared[((threadIdx.x*48) + 41)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[54]*(float32*)kernel.shared[((threadIdx.x*48) + 18)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[63]*(float32*)kernel.shared[((threadIdx.x*48) + 21)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[55]*(float32*)kernel.shared[((threadIdx.x*48) + 18)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[64]*(float32*)kernel.shared[((threadIdx.x*48) + 21)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[56]*(float32*)kernel.shared[((threadIdx.x*48) + 18)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[65]*(float32*)kernel.shared[((threadIdx.x*48) + 21)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[57]*(float32*)kernel.shared[((threadIdx.x*48) + 18)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[66]*(float32*)kernel.shared[((threadIdx.x*48) + 21)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[58]*(float32*)kernel.shared[((threadIdx.x*48) + 18)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[67]*(float32*)kernel.shared[((threadIdx.x*48) + 21)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[59]*(float32*)kernel.shared[((threadIdx.x*48) + 18)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[68]*(float32*)kernel.shared[((threadIdx.x*48) + 21)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[60]*(float32*)kernel.shared[((threadIdx.x*48) + 18)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[69]*(float32*)kernel.shared[((threadIdx.x*48) + 21)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[54]*(float32*)kernel.shared[((threadIdx.x*48) + 42)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[63]*(float32*)kernel.shared[((threadIdx.x*48) + 45)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[55]*(float32*)kernel.shared[((threadIdx.x*48) + 42)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[64]*(float32*)kernel.shared[((threadIdx.x*48) + 45)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[56]*(float32*)kernel.shared[((threadIdx.x*48) + 42)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[65]*(float32*)kernel.shared[((threadIdx.x*48) + 45)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[57]*(float32*)kernel.shared[((threadIdx.x*48) + 42)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[66]*(float32*)kernel.shared[((threadIdx.x*48) + 45)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[58]*(float32*)kernel.shared[((threadIdx.x*48) + 42)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[67]*(float32*)kernel.shared[((threadIdx.x*48) + 45)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[59]*(float32*)kernel.shared[((threadIdx.x*48) + 42)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[68]*(float32*)kernel.shared[((threadIdx.x*48) + 45)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[60]*(float32*)kernel.shared[((threadIdx.x*48) + 42)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[69]*(float32*)kernel.shared[((threadIdx.x*48) + 45)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[55]*(float32*)kernel.shared[((threadIdx.x*48) + 19)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[64]*(float32*)kernel.shared[((threadIdx.x*48) + 22)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[56]*(float32*)kernel.shared[((threadIdx.x*48) + 19)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[65]*(float32*)kernel.shared[((threadIdx.x*48) + 22)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[57]*(float32*)kernel.shared[((threadIdx.x*48) + 19)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[66]*(float32*)kernel.shared[((threadIdx.x*48) + 22)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[58]*(float32*)kernel.shared[((threadIdx.x*48) + 19)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[67]*(float32*)kernel.shared[((threadIdx.x*48) + 22)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[59]*(float32*)kernel.shared[((threadIdx.x*48) + 19)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[68]*(float32*)kernel.shared[((threadIdx.x*48) + 22)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[60]*(float32*)kernel.shared[((threadIdx.x*48) + 19)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[69]*(float32*)kernel.shared[((threadIdx.x*48) + 22)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[61]*(float32*)kernel.shared[((threadIdx.x*48) + 19)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[70]*(float32*)kernel.shared[((threadIdx.x*48) + 22)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[55]*(float32*)kernel.shared[((threadIdx.x*48) + 43)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[64]*(float32*)kernel.shared[((threadIdx.x*48) + 46)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[56]*(float32*)kernel.shared[((threadIdx.x*48) + 43)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[65]*(float32*)kernel.shared[((threadIdx.x*48) + 46)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[57]*(float32*)kernel.shared[((threadIdx.x*48) + 43)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[66]*(float32*)kernel.shared[((threadIdx.x*48) + 46)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[58]*(float32*)kernel.shared[((threadIdx.x*48) + 43)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[67]*(float32*)kernel.shared[((threadIdx.x*48) + 46)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[59]*(float32*)kernel.shared[((threadIdx.x*48) + 43)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[68]*(float32*)kernel.shared[((threadIdx.x*48) + 46)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[60]*(float32*)kernel.shared[((threadIdx.x*48) + 43)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[69]*(float32*)kernel.shared[((threadIdx.x*48) + 46)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[61]*(float32*)kernel.shared[((threadIdx.x*48) + 43)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[70]*(float32*)kernel.shared[((threadIdx.x*48) + 46)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[56]*(float32*)kernel.shared[((threadIdx.x*48) + 20)]))
-            compute_3[0] = ((float32*)compute_3[0] + ((float32*)pad_temp.shared[65]*(float32*)kernel.shared[((threadIdx.x*48) + 23)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[57]*(float32*)kernel.shared[((threadIdx.x*48) + 20)]))
-            compute_3[1] = ((float32*)compute_3[1] + ((float32*)pad_temp.shared[66]*(float32*)kernel.shared[((threadIdx.x*48) + 23)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[58]*(float32*)kernel.shared[((threadIdx.x*48) + 20)]))
-            compute_3[2] = ((float32*)compute_3[2] + ((float32*)pad_temp.shared[67]*(float32*)kernel.shared[((threadIdx.x*48) + 23)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[59]*(float32*)kernel.shared[((threadIdx.x*48) + 20)]))
-            compute_3[3] = ((float32*)compute_3[3] + ((float32*)pad_temp.shared[68]*(float32*)kernel.shared[((threadIdx.x*48) + 23)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[60]*(float32*)kernel.shared[((threadIdx.x*48) + 20)]))
-            compute_3[4] = ((float32*)compute_3[4] + ((float32*)pad_temp.shared[69]*(float32*)kernel.shared[((threadIdx.x*48) + 23)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[61]*(float32*)kernel.shared[((threadIdx.x*48) + 20)]))
-            compute_3[5] = ((float32*)compute_3[5] + ((float32*)pad_temp.shared[70]*(float32*)kernel.shared[((threadIdx.x*48) + 23)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[62]*(float32*)kernel.shared[((threadIdx.x*48) + 20)]))
-            compute_3[6] = ((float32*)compute_3[6] + ((float32*)pad_temp.shared[71]*(float32*)kernel.shared[((threadIdx.x*48) + 23)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[56]*(float32*)kernel.shared[((threadIdx.x*48) + 44)]))
-            compute_3[7] = ((float32*)compute_3[7] + ((float32*)pad_temp.shared[65]*(float32*)kernel.shared[((threadIdx.x*48) + 47)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[57]*(float32*)kernel.shared[((threadIdx.x*48) + 44)]))
-            compute_3[8] = ((float32*)compute_3[8] + ((float32*)pad_temp.shared[66]*(float32*)kernel.shared[((threadIdx.x*48) + 47)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[58]*(float32*)kernel.shared[((threadIdx.x*48) + 44)]))
-            compute_3[9] = ((float32*)compute_3[9] + ((float32*)pad_temp.shared[67]*(float32*)kernel.shared[((threadIdx.x*48) + 47)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[59]*(float32*)kernel.shared[((threadIdx.x*48) + 44)]))
-            compute_3[10] = ((float32*)compute_3[10] + ((float32*)pad_temp.shared[68]*(float32*)kernel.shared[((threadIdx.x*48) + 47)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[60]*(float32*)kernel.shared[((threadIdx.x*48) + 44)]))
-            compute_3[11] = ((float32*)compute_3[11] + ((float32*)pad_temp.shared[69]*(float32*)kernel.shared[((threadIdx.x*48) + 47)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[61]*(float32*)kernel.shared[((threadIdx.x*48) + 44)]))
-            compute_3[12] = ((float32*)compute_3[12] + ((float32*)pad_temp.shared[70]*(float32*)kernel.shared[((threadIdx.x*48) + 47)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[62]*(float32*)kernel.shared[((threadIdx.x*48) + 44)]))
-            compute_3[13] = ((float32*)compute_3[13] + ((float32*)pad_temp.shared[71]*(float32*)kernel.shared[((threadIdx.x*48) + 47)]))
           }
         }
-        for (i1.inner: int32, 0, 2) {
-          for (i3.inner: int32, 0, 7) {
-            compute_2[(((((floordiv(blockIdx.x, 7)*6272) + (threadIdx.x*98)) + (i1.inner*49)) + (floormod(blockIdx.x, 7)*7)) + i3.inner)] = max(((float32*)compute_3[((i1.inner*7) + i3.inner)] + (float32*)bias_2[(((floordiv(blockIdx.x, 7)*128) + (threadIdx.x*2)) + i1.inner)]), 0f32)
-          }
+        for (i1.inner: int32, 0, 8) {
+          compute_2[((((blockIdx.x*784) + (floordiv(threadIdx.x, 49)*392)) + (i1.inner*49)) + floormod(threadIdx.x, 49))] = max(((float32*)conv2d_nchw[i1.inner] + (float32*)bias_2[(((blockIdx.x*16) + (floordiv(threadIdx.x, 49)*8)) + i1.inner)]), 0f32)
         }
       }
     }
@@ -745,7 +396,7 @@ We build the binary and check its correctness and performance.
 
  .. code-block:: none
 
-    Execution time of this operator: 0.266 ms
+    Execution time of this operator: 0.231 ms
 
 
 
@@ -781,53 +432,53 @@ They can be used for debugging and learning the behavior of the auto-scheduler.
 
     Equivalent python schedule:
     pad_temp_i0, pad_temp_i1, pad_temp_i2, pad_temp_i3 = tuple(pad_temp.op.axis) + tuple(pad_temp.op.reduce_axis)
-    compute_nn, compute_ff, compute_yy, compute_xx, compute_rc, compute_ry, compute_rx = tuple(compute.op.axis) + tuple(compute.op.reduce_axis)
+    conv2d_nchw_nn, conv2d_nchw_ff, conv2d_nchw_yy, conv2d_nchw_xx, conv2d_nchw_rc, conv2d_nchw_ry, conv2d_nchw_rx = tuple(conv2d_nchw.op.axis) + tuple(conv2d_nchw.op.reduce_axis)
     T_add_ax0, T_add_ax1, T_add_ax2, T_add_ax3 = tuple(T_add.op.axis) + tuple(T_add.op.reduce_axis)
     compute_i0, compute_i1, compute_i2, compute_i3 = tuple(compute.op.axis) + tuple(compute.op.reduce_axis)
     s[T_add].compute_inline()
-    compute_nn_o_i, compute_nn_i = s[compute].split(compute_nn, factor=1)
-    compute_nn_o_o_i, compute_nn_o_i = s[compute].split(compute_nn_o_i, factor=1)
-    compute_nn_o_o_o_i, compute_nn_o_o_i = s[compute].split(compute_nn_o_o_i, factor=1)
-    compute_nn_o_o_o_o, compute_nn_o_o_o_i = s[compute].split(compute_nn_o_o_o_i, factor=1)
-    compute_ff_o_i, compute_ff_i = s[compute].split(compute_ff, factor=1)
-    compute_ff_o_o_i, compute_ff_o_i = s[compute].split(compute_ff_o_i, factor=2)
-    compute_ff_o_o_o_i, compute_ff_o_o_i = s[compute].split(compute_ff_o_o_i, factor=64)
-    compute_ff_o_o_o_o, compute_ff_o_o_o_i = s[compute].split(compute_ff_o_o_o_i, factor=1)
-    compute_yy_o_i, compute_yy_i = s[compute].split(compute_yy, factor=1)
-    compute_yy_o_o_i, compute_yy_o_i = s[compute].split(compute_yy_o_i, factor=1)
-    compute_yy_o_o_o_i, compute_yy_o_o_i = s[compute].split(compute_yy_o_o_i, factor=1)
-    compute_yy_o_o_o_o, compute_yy_o_o_o_i = s[compute].split(compute_yy_o_o_o_i, factor=1)
-    compute_xx_o_i, compute_xx_i = s[compute].split(compute_xx, factor=1)
-    compute_xx_o_o_i, compute_xx_o_i = s[compute].split(compute_xx_o_i, factor=7)
-    compute_xx_o_o_o_i, compute_xx_o_o_i = s[compute].split(compute_xx_o_o_i, factor=1)
-    compute_xx_o_o_o_o, compute_xx_o_o_o_i = s[compute].split(compute_xx_o_o_o_i, factor=1)
-    compute_rc_o_i, compute_rc_i = s[compute].split(compute_rc, factor=2)
-    compute_rc_o_o, compute_rc_o_i = s[compute].split(compute_rc_o_i, factor=4)
-    compute_ry_o_i, compute_ry_i = s[compute].split(compute_ry, factor=1)
-    compute_ry_o_o, compute_ry_o_i = s[compute].split(compute_ry_o_i, factor=1)
-    compute_rx_o_i, compute_rx_i = s[compute].split(compute_rx, factor=1)
-    compute_rx_o_o, compute_rx_o_i = s[compute].split(compute_rx_o_i, factor=3)
-    s[compute].reorder(compute_nn_o_o_o_o, compute_ff_o_o_o_o, compute_yy_o_o_o_o, compute_xx_o_o_o_o, compute_nn_o_o_o_i, compute_ff_o_o_o_i, compute_yy_o_o_o_i, compute_xx_o_o_o_i, compute_nn_o_o_i, compute_ff_o_o_i, compute_yy_o_o_i, compute_xx_o_o_i, compute_rc_o_o, compute_ry_o_o, compute_rx_o_o, compute_rc_o_i, compute_ry_o_i, compute_rx_o_i, compute_nn_o_i, compute_ff_o_i, compute_yy_o_i, compute_xx_o_i, compute_rc_i, compute_ry_i, compute_rx_i, compute_nn_i, compute_ff_i, compute [...]
+    conv2d_nchw_nn_o_i, conv2d_nchw_nn_i = s[conv2d_nchw].split(conv2d_nchw_nn, factor=1)
+    conv2d_nchw_nn_o_o_i, conv2d_nchw_nn_o_i = s[conv2d_nchw].split(conv2d_nchw_nn_o_i, factor=1)
+    conv2d_nchw_nn_o_o_o_i, conv2d_nchw_nn_o_o_i = s[conv2d_nchw].split(conv2d_nchw_nn_o_o_i, factor=1)
+    conv2d_nchw_nn_o_o_o_o, conv2d_nchw_nn_o_o_o_i = s[conv2d_nchw].split(conv2d_nchw_nn_o_o_o_i, factor=1)
+    conv2d_nchw_ff_o_i, conv2d_nchw_ff_i = s[conv2d_nchw].split(conv2d_nchw_ff, factor=4)
+    conv2d_nchw_ff_o_o_i, conv2d_nchw_ff_o_i = s[conv2d_nchw].split(conv2d_nchw_ff_o_i, factor=2)
+    conv2d_nchw_ff_o_o_o_i, conv2d_nchw_ff_o_o_i = s[conv2d_nchw].split(conv2d_nchw_ff_o_o_i, factor=2)
+    conv2d_nchw_ff_o_o_o_o, conv2d_nchw_ff_o_o_o_i = s[conv2d_nchw].split(conv2d_nchw_ff_o_o_o_i, factor=1)
+    conv2d_nchw_yy_o_i, conv2d_nchw_yy_i = s[conv2d_nchw].split(conv2d_nchw_yy, factor=1)
+    conv2d_nchw_yy_o_o_i, conv2d_nchw_yy_o_i = s[conv2d_nchw].split(conv2d_nchw_yy_o_i, factor=1)
+    conv2d_nchw_yy_o_o_o_i, conv2d_nchw_yy_o_o_i = s[conv2d_nchw].split(conv2d_nchw_yy_o_o_i, factor=7)
+    conv2d_nchw_yy_o_o_o_o, conv2d_nchw_yy_o_o_o_i = s[conv2d_nchw].split(conv2d_nchw_yy_o_o_o_i, factor=1)
+    conv2d_nchw_xx_o_i, conv2d_nchw_xx_i = s[conv2d_nchw].split(conv2d_nchw_xx, factor=1)
+    conv2d_nchw_xx_o_o_i, conv2d_nchw_xx_o_i = s[conv2d_nchw].split(conv2d_nchw_xx_o_i, factor=1)
+    conv2d_nchw_xx_o_o_o_i, conv2d_nchw_xx_o_o_i = s[conv2d_nchw].split(conv2d_nchw_xx_o_o_i, factor=7)
+    conv2d_nchw_xx_o_o_o_o, conv2d_nchw_xx_o_o_o_i = s[conv2d_nchw].split(conv2d_nchw_xx_o_o_o_i, factor=1)
+    conv2d_nchw_rc_o_i, conv2d_nchw_rc_i = s[conv2d_nchw].split(conv2d_nchw_rc, factor=4)
+    conv2d_nchw_rc_o_o, conv2d_nchw_rc_o_i = s[conv2d_nchw].split(conv2d_nchw_rc_o_i, factor=2)
+    conv2d_nchw_ry_o_i, conv2d_nchw_ry_i = s[conv2d_nchw].split(conv2d_nchw_ry, factor=1)
+    conv2d_nchw_ry_o_o, conv2d_nchw_ry_o_i = s[conv2d_nchw].split(conv2d_nchw_ry_o_i, factor=3)
+    conv2d_nchw_rx_o_i, conv2d_nchw_rx_i = s[conv2d_nchw].split(conv2d_nchw_rx, factor=3)
+    conv2d_nchw_rx_o_o, conv2d_nchw_rx_o_i = s[conv2d_nchw].split(conv2d_nchw_rx_o_i, factor=1)
+    s[conv2d_nchw].reorder(conv2d_nchw_nn_o_o_o_o, conv2d_nchw_ff_o_o_o_o, conv2d_nchw_yy_o_o_o_o, conv2d_nchw_xx_o_o_o_o, conv2d_nchw_nn_o_o_o_i, conv2d_nchw_ff_o_o_o_i, conv2d_nchw_yy_o_o_o_i, conv2d_nchw_xx_o_o_o_i, conv2d_nchw_nn_o_o_i, conv2d_nchw_ff_o_o_i, conv2d_nchw_yy_o_o_i, conv2d_nchw_xx_o_o_i, conv2d_nchw_rc_o_o, conv2d_nchw_ry_o_o, conv2d_nchw_rx_o_o, conv2d_nchw_rc_o_i, conv2d_nchw_ry_o_i, conv2d_nchw_rx_o_i, conv2d_nchw_nn_o_i, conv2d_nchw_ff_o_i, conv2d_nchw_yy_o_i, conv2 [...]
     compute_i0_o_i, compute_i0_i = s[compute].split(compute_i0, factor=1)
     compute_i0_o_o_i, compute_i0_o_i = s[compute].split(compute_i0_o_i, factor=1)
     compute_i0_o_o_o, compute_i0_o_o_i = s[compute].split(compute_i0_o_o_i, factor=1)
-    compute_i1_o_i, compute_i1_i = s[compute].split(compute_i1, factor=2)
-    compute_i1_o_o_i, compute_i1_o_i = s[compute].split(compute_i1_o_i, factor=64)
+    compute_i1_o_i, compute_i1_i = s[compute].split(compute_i1, factor=8)
+    compute_i1_o_o_i, compute_i1_o_i = s[compute].split(compute_i1_o_i, factor=2)
     compute_i1_o_o_o, compute_i1_o_o_i = s[compute].split(compute_i1_o_o_i, factor=1)
     compute_i2_o_i, compute_i2_i = s[compute].split(compute_i2, factor=1)
-    compute_i2_o_o_i, compute_i2_o_i = s[compute].split(compute_i2_o_i, factor=1)
+    compute_i2_o_o_i, compute_i2_o_i = s[compute].split(compute_i2_o_i, factor=7)
     compute_i2_o_o_o, compute_i2_o_o_i = s[compute].split(compute_i2_o_o_i, factor=1)
-    compute_i3_o_i, compute_i3_i = s[compute].split(compute_i3, factor=7)
-    compute_i3_o_o_i, compute_i3_o_i = s[compute].split(compute_i3_o_i, factor=1)
+    compute_i3_o_i, compute_i3_i = s[compute].split(compute_i3, factor=1)
+    compute_i3_o_o_i, compute_i3_o_i = s[compute].split(compute_i3_o_i, factor=7)
     compute_i3_o_o_o, compute_i3_o_o_i = s[compute].split(compute_i3_o_o_i, factor=1)
     s[compute].reorder(compute_i0_o_o_o, compute_i1_o_o_o, compute_i2_o_o_o, compute_i3_o_o_o, compute_i0_o_o_i, compute_i1_o_o_i, compute_i2_o_o_i, compute_i3_o_o_i, compute_i0_o_i, compute_i1_o_i, compute_i2_o_i, compute_i3_o_i, compute_i0_i, compute_i1_i, compute_i2_i, compute_i3_i)
-    s[compute].compute_at(s[compute], compute_i3_o_i)
-    kernel_shared = s.cache_read(kernel, "shared", [compute])
+    s[conv2d_nchw].compute_at(s[compute], compute_i3_o_i)
+    kernel_shared = s.cache_read(kernel, "shared", [conv2d_nchw])
     kernel_shared_ax0, kernel_shared_ax1, kernel_shared_ax2, kernel_shared_ax3 = tuple(kernel_shared.op.axis)
-    s[kernel_shared].compute_at(s[compute], compute_rx_o_o)
-    pad_temp_shared = s.cache_read(pad_temp, "shared", [compute])
+    s[kernel_shared].compute_at(s[conv2d_nchw], conv2d_nchw_rx_o_o)
+    pad_temp_shared = s.cache_read(pad_temp, "shared", [conv2d_nchw])
     pad_temp_shared_ax0, pad_temp_shared_ax1, pad_temp_shared_ax2, pad_temp_shared_ax3 = tuple(pad_temp_shared.op.axis)
-    s[pad_temp_shared].compute_at(s[compute], compute_rx_o_o)
+    s[pad_temp_shared].compute_at(s[conv2d_nchw], conv2d_nchw_rx_o_o)
     s[pad_temp].compute_inline()
     compute_i0_o_o_o_i1_o_o_o_fused_i2_o_o_o_fused_i3_o_o_o_fused = s[compute].fuse(compute_i0_o_o_o, compute_i1_o_o_o, compute_i2_o_o_o, compute_i3_o_o_o)
     s[compute].bind(compute_i0_o_o_o_i1_o_o_o_fused_i2_o_o_o_fused_i3_o_o_o_fused, te.thread_axis("blockIdx.x"))
@@ -838,15 +489,15 @@ They can be used for debugging and learning the behavior of the auto-scheduler.
     kernel_shared_ax0_ax1_fused_ax2_fused_ax3_fused = s[kernel_shared].fuse(kernel_shared_ax0, kernel_shared_ax1, kernel_shared_ax2, kernel_shared_ax3)
     kernel_shared_ax0_ax1_fused_ax2_fused_ax3_fused_o, kernel_shared_ax0_ax1_fused_ax2_fused_ax3_fused_i = s[kernel_shared].split(kernel_shared_ax0_ax1_fused_ax2_fused_ax3_fused, factor=1)
     s[kernel_shared].vectorize(kernel_shared_ax0_ax1_fused_ax2_fused_ax3_fused_i)
-    kernel_shared_ax0_ax1_fused_ax2_fused_ax3_fused_o_o, kernel_shared_ax0_ax1_fused_ax2_fused_ax3_fused_o_i = s[kernel_shared].split(kernel_shared_ax0_ax1_fused_ax2_fused_ax3_fused_o, factor=64)
+    kernel_shared_ax0_ax1_fused_ax2_fused_ax3_fused_o_o, kernel_shared_ax0_ax1_fused_ax2_fused_ax3_fused_o_i = s[kernel_shared].split(kernel_shared_ax0_ax1_fused_ax2_fused_ax3_fused_o, factor=98)
     s[kernel_shared].bind(kernel_shared_ax0_ax1_fused_ax2_fused_ax3_fused_o_i, te.thread_axis("threadIdx.x"))
     pad_temp_shared_ax0_ax1_fused_ax2_fused_ax3_fused = s[pad_temp_shared].fuse(pad_temp_shared_ax0, pad_temp_shared_ax1, pad_temp_shared_ax2, pad_temp_shared_ax3)
-    pad_temp_shared_ax0_ax1_fused_ax2_fused_ax3_fused_o, pad_temp_shared_ax0_ax1_fused_ax2_fused_ax3_fused_i = s[pad_temp_shared].split(pad_temp_shared_ax0_ax1_fused_ax2_fused_ax3_fused, factor=4)
+    pad_temp_shared_ax0_ax1_fused_ax2_fused_ax3_fused_o, pad_temp_shared_ax0_ax1_fused_ax2_fused_ax3_fused_i = s[pad_temp_shared].split(pad_temp_shared_ax0_ax1_fused_ax2_fused_ax3_fused, factor=1)
     s[pad_temp_shared].vectorize(pad_temp_shared_ax0_ax1_fused_ax2_fused_ax3_fused_i)
-    pad_temp_shared_ax0_ax1_fused_ax2_fused_ax3_fused_o_o, pad_temp_shared_ax0_ax1_fused_ax2_fused_ax3_fused_o_i = s[pad_temp_shared].split(pad_temp_shared_ax0_ax1_fused_ax2_fused_ax3_fused_o, factor=64)
+    pad_temp_shared_ax0_ax1_fused_ax2_fused_ax3_fused_o_o, pad_temp_shared_ax0_ax1_fused_ax2_fused_ax3_fused_o_i = s[pad_temp_shared].split(pad_temp_shared_ax0_ax1_fused_ax2_fused_ax3_fused_o, factor=98)
     s[pad_temp_shared].bind(pad_temp_shared_ax0_ax1_fused_ax2_fused_ax3_fused_o_i, te.thread_axis("threadIdx.x"))
-    s[compute].pragma(compute_nn_o_o_o_o, "auto_unroll_max_step", 512)
-    s[compute].pragma(compute_nn_o_o_o_o, "unroll_explicit", True)
+    s[conv2d_nchw].pragma(conv2d_nchw_nn_o_o_o_o, "auto_unroll_max_step", 64)
+    s[conv2d_nchw].pragma(conv2d_nchw_nn_o_o_o_o, "unroll_explicit", True)
 
     CUDA source code:
 
@@ -863,430 +514,101 @@ They can be used for debugging and learning the behavior of the auto-scheduler.
       #define int64_t long long
       #define uint64_t unsigned long long
     #endif
-    extern "C" __global__ void __launch_bounds__(64) default_function_kernel0(float* __restrict__ data, float* __restrict__ kernel, float* __restrict__ compute, float* __restrict__ bias) {
-      float compute1[14];
-      __shared__ float pad_temp_shared[72];
-      __shared__ float kernel_shared[3072];
-      compute1[(0)] = 0.000000e+00f;
-      compute1[(1)] = 0.000000e+00f;
-      compute1[(2)] = 0.000000e+00f;
-      compute1[(3)] = 0.000000e+00f;
-      compute1[(4)] = 0.000000e+00f;
-      compute1[(5)] = 0.000000e+00f;
-      compute1[(6)] = 0.000000e+00f;
-      compute1[(7)] = 0.000000e+00f;
-      compute1[(8)] = 0.000000e+00f;
-      compute1[(9)] = 0.000000e+00f;
-      compute1[(10)] = 0.000000e+00f;
-      compute1[(11)] = 0.000000e+00f;
-      compute1[(12)] = 0.000000e+00f;
-      compute1[(13)] = 0.000000e+00f;
+    extern "C" __global__ void __launch_bounds__(98) default_function_kernel0(float* __restrict__ data, float* __restrict__ kernel, float* __restrict__ compute, float* __restrict__ bias) {
+      float conv2d_nchw[8];
+      __shared__ float pad_temp_shared[648];
+      __shared__ float kernel_shared[1152];
+      conv2d_nchw[(0)] = 0.000000e+00f;
+      conv2d_nchw[(1)] = 0.000000e+00f;
+      conv2d_nchw[(2)] = 0.000000e+00f;
+      conv2d_nchw[(3)] = 0.000000e+00f;
+      conv2d_nchw[(4)] = 0.000000e+00f;
+      conv2d_nchw[(5)] = 0.000000e+00f;
+      conv2d_nchw[(6)] = 0.000000e+00f;
+      conv2d_nchw[(7)] = 0.000000e+00f;
       for (int rc_outer_outer = 0; rc_outer_outer < 64; ++rc_outer_outer) {
-        for (int ry_outer_outer = 0; ry_outer_outer < 3; ++ry_outer_outer) {
-          __syncthreads();
-          if (((int)threadIdx.x) < 18) {
-            pad_temp_shared[((((int)threadIdx.x) * 4))] = (((((1 <= (ry_outer_outer + (((int)blockIdx.x) % 7))) && ((ry_outer_outer + (((int)blockIdx.x) % 7)) < 8)) && (1 <= ((((int)threadIdx.x) * 4) % 9))) && (((((int)threadIdx.x) * 4) % 9) < 8)) ? data[(((((((rc_outer_outer * 392) + (((((int)threadIdx.x) * 4) / 9) * 49)) + (ry_outer_outer * 7)) + ((((int)blockIdx.x) % 7) * 7)) + ((((int)threadIdx.x) * 4) % 9)) - 8))] : 0.000000e+00f);
-          }
-          if (((int)threadIdx.x) < 18) {
-            pad_temp_shared[(((((int)threadIdx.x) * 4) + 1))] = (((((1 <= (ry_outer_outer + (((int)blockIdx.x) % 7))) && ((ry_outer_outer + (((int)blockIdx.x) % 7)) < 8)) && (1 <= (((((int)threadIdx.x) * 4) + 1) % 9))) && ((((((int)threadIdx.x) * 4) + 1) % 9) < 8)) ? data[(((((((rc_outer_outer * 392) + ((((((int)threadIdx.x) * 4) + 1) / 9) * 49)) + (ry_outer_outer * 7)) + ((((int)blockIdx.x) % 7) * 7)) + (((((int)threadIdx.x) * 4) + 1) % 9)) - 8))] : 0.000000e+00f);
-          }
-          if (((int)threadIdx.x) < 18) {
-            pad_temp_shared[(((((int)threadIdx.x) * 4) + 2))] = (((((1 <= (ry_outer_outer + (((int)blockIdx.x) % 7))) && ((ry_outer_outer + (((int)blockIdx.x) % 7)) < 8)) && (1 <= (((((int)threadIdx.x) * 4) + 2) % 9))) && ((((((int)threadIdx.x) * 4) + 2) % 9) < 8)) ? data[(((((((rc_outer_outer * 392) + ((((((int)threadIdx.x) * 4) + 2) / 9) * 49)) + (ry_outer_outer * 7)) + ((((int)blockIdx.x) % 7) * 7)) + (((((int)threadIdx.x) * 4) + 2) % 9)) - 8))] : 0.000000e+00f);
-          }
-          if (((int)threadIdx.x) < 18) {
-            pad_temp_shared[(((((int)threadIdx.x) * 4) + 3))] = (((((1 <= (ry_outer_outer + (((int)blockIdx.x) % 7))) && ((ry_outer_outer + (((int)blockIdx.x) % 7)) < 8)) && (1 <= (((((int)threadIdx.x) * 4) + 3) % 9))) && ((((((int)threadIdx.x) * 4) + 3) % 9) < 8)) ? data[(((((((rc_outer_outer * 392) + ((((((int)threadIdx.x) * 4) + 3) / 9) * 49)) + (ry_outer_outer * 7)) + ((((int)blockIdx.x) % 7) * 7)) + (((((int)threadIdx.x) * 4) + 3) % 9)) - 8))] : 0.000000e+00f);
+        __syncthreads();
+        pad_temp_shared[(((int)threadIdx.x))] = (((((9 <= (((int)threadIdx.x) % 81)) && ((((int)threadIdx.x) % 81) < 72)) && (1 <= (((int)threadIdx.x) % 9))) && ((((int)threadIdx.x) % 9) < 8)) ? data[((((((rc_outer_outer * 392) + ((((int)threadIdx.x) / 81) * 49)) + (((((int)threadIdx.x) % 81) / 9) * 7)) + (((int)threadIdx.x) % 9)) - 8))] : 0.000000e+00f);
+        pad_temp_shared[((((int)threadIdx.x) + 98))] = (((((9 <= ((((int)threadIdx.x) + 17) % 81)) && (((((int)threadIdx.x) + 17) % 81) < 72)) && (1 <= ((((int)threadIdx.x) + 8) % 9))) && (((((int)threadIdx.x) + 8) % 9) < 8)) ? data[((((((rc_outer_outer * 392) + (((((int)threadIdx.x) + 98) / 81) * 49)) + ((((((int)threadIdx.x) + 17) % 81) / 9) * 7)) + ((((int)threadIdx.x) + 8) % 9)) - 8))] : 0.000000e+00f);
+        pad_temp_shared[((((int)threadIdx.x) + 196))] = (((((9 <= ((((int)threadIdx.x) + 34) % 81)) && (((((int)threadIdx.x) + 34) % 81) < 72)) && (1 <= ((((int)threadIdx.x) + 7) % 9))) && (((((int)threadIdx.x) + 7) % 9) < 8)) ? data[((((((rc_outer_outer * 392) + (((((int)threadIdx.x) + 196) / 81) * 49)) + ((((((int)threadIdx.x) + 34) % 81) / 9) * 7)) + ((((int)threadIdx.x) + 7) % 9)) - 8))] : 0.000000e+00f);
+        pad_temp_shared[((((int)threadIdx.x) + 294))] = (((((9 <= ((((int)threadIdx.x) + 51) % 81)) && (((((int)threadIdx.x) + 51) % 81) < 72)) && (1 <= ((((int)threadIdx.x) + 6) % 9))) && (((((int)threadIdx.x) + 6) % 9) < 8)) ? data[((((((rc_outer_outer * 392) + (((((int)threadIdx.x) + 294) / 81) * 49)) + ((((((int)threadIdx.x) + 51) % 81) / 9) * 7)) + ((((int)threadIdx.x) + 6) % 9)) - 8))] : 0.000000e+00f);
+        pad_temp_shared[((((int)threadIdx.x) + 392))] = (((((9 <= ((((int)threadIdx.x) + 68) % 81)) && (((((int)threadIdx.x) + 68) % 81) < 72)) && (1 <= ((((int)threadIdx.x) + 5) % 9))) && (((((int)threadIdx.x) + 5) % 9) < 8)) ? data[((((((rc_outer_outer * 392) + (((((int)threadIdx.x) + 392) / 81) * 49)) + ((((((int)threadIdx.x) + 68) % 81) / 9) * 7)) + ((((int)threadIdx.x) + 5) % 9)) - 8))] : 0.000000e+00f);
+        pad_temp_shared[((((int)threadIdx.x) + 490))] = (((((9 <= ((((int)threadIdx.x) + 4) % 81)) && (((((int)threadIdx.x) + 4) % 81) < 72)) && (1 <= ((((int)threadIdx.x) + 4) % 9))) && (((((int)threadIdx.x) + 4) % 9) < 8)) ? data[((((((rc_outer_outer * 392) + (((((int)threadIdx.x) + 490) / 81) * 49)) + ((((((int)threadIdx.x) + 4) % 81) / 9) * 7)) + ((((int)threadIdx.x) + 4) % 9)) - 8))] : 0.000000e+00f);
+        if (((int)threadIdx.x) < 60) {
+          pad_temp_shared[((((int)threadIdx.x) + 588))] = ((((((int)threadIdx.x) < 51) && (1 <= ((((int)threadIdx.x) + 3) % 9))) && (((((int)threadIdx.x) + 3) % 9) < 8)) ? data[((((((rc_outer_outer * 392) + (((((int)threadIdx.x) + 588) / 81) * 49)) + ((((((int)threadIdx.x) + 21) % 81) / 9) * 7)) + ((((int)threadIdx.x) + 3) % 9)) - 8))] : 0.000000e+00f);
+        }
+        kernel_shared[(((int)threadIdx.x))] = kernel[(((((((int)blockIdx.x) * 73728) + ((((int)threadIdx.x) / 72) * 4608)) + (rc_outer_outer * 72)) + (((int)threadIdx.x) % 72)))];
+        kernel_shared[((((int)threadIdx.x) + 98))] = kernel[(((((((int)blockIdx.x) * 73728) + (((((int)threadIdx.x) + 98) / 72) * 4608)) + (rc_outer_outer * 72)) + ((((int)threadIdx.x) + 26) % 72)))];
+        kernel_shared[((((int)threadIdx.x) + 196))] = kernel[(((((((int)blockIdx.x) * 73728) + (((((int)threadIdx.x) + 196) / 72) * 4608)) + (rc_outer_outer * 72)) + ((((int)threadIdx.x) + 52) % 72)))];
+        kernel_shared[((((int)threadIdx.x) + 294))] = kernel[(((((((int)blockIdx.x) * 73728) + (((((int)threadIdx.x) + 294) / 72) * 4608)) + (rc_outer_outer * 72)) + ((((int)threadIdx.x) + 6) % 72)))];
+        kernel_shared[((((int)threadIdx.x) + 392))] = kernel[(((((((int)blockIdx.x) * 73728) + (((((int)threadIdx.x) + 392) / 72) * 4608)) + (rc_outer_outer * 72)) + ((((int)threadIdx.x) + 32) % 72)))];
+        kernel_shared[((((int)threadIdx.x) + 490))] = kernel[(((((((int)blockIdx.x) * 73728) + (((((int)threadIdx.x) + 490) / 72) * 4608)) + (rc_outer_outer * 72)) + ((((int)threadIdx.x) + 58) % 72)))];
+        kernel_shared[((((int)threadIdx.x) + 588))] = kernel[(((((((int)blockIdx.x) * 73728) + (((((int)threadIdx.x) + 588) / 72) * 4608)) + (rc_outer_outer * 72)) + ((((int)threadIdx.x) + 12) % 72)))];
+        kernel_shared[((((int)threadIdx.x) + 686))] = kernel[(((((((int)blockIdx.x) * 73728) + (((((int)threadIdx.x) + 686) / 72) * 4608)) + (rc_outer_outer * 72)) + ((((int)threadIdx.x) + 38) % 72)))];
+        kernel_shared[((((int)threadIdx.x) + 784))] = kernel[(((((((int)blockIdx.x) * 73728) + (((((int)threadIdx.x) + 784) / 72) * 4608)) + (rc_outer_outer * 72)) + ((((int)threadIdx.x) + 64) % 72)))];
+        kernel_shared[((((int)threadIdx.x) + 882))] = kernel[(((((((int)blockIdx.x) * 73728) + (((((int)threadIdx.x) + 882) / 72) * 4608)) + (rc_outer_outer * 72)) + ((((int)threadIdx.x) + 18) % 72)))];
+        kernel_shared[((((int)threadIdx.x) + 980))] = kernel[(((((((int)blockIdx.x) * 73728) + (((((int)threadIdx.x) + 980) / 72) * 4608)) + (rc_outer_outer * 72)) + ((((int)threadIdx.x) + 44) % 72)))];
+        if (((int)threadIdx.x) < 74) {
+          kernel_shared[((((int)threadIdx.x) + 1078))] = kernel[(((((((int)blockIdx.x) * 73728) + (((((int)threadIdx.x) + 1078) / 72) * 4608)) + (rc_outer_outer * 72)) + ((((int)threadIdx.x) + 70) % 72)))];
+        }
+        __syncthreads();
+        for (int rc_outer_inner = 0; rc_outer_inner < 2; ++rc_outer_inner) {
+          for (int ry_outer_inner = 0; ry_outer_inner < 3; ++ry_outer_inner) {
+            for (int ff_outer_inner = 0; ff_outer_inner < 2; ++ff_outer_inner) {
+              conv2d_nchw[((ff_outer_inner * 4))] = (conv2d_nchw[((ff_outer_inner * 4))] + (pad_temp_shared[(((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)))] * kernel_shared[((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 1))] = (conv2d_nchw[(((ff_outer_inner * 4) + 1))] + (pad_temp_shared[(((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 72))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 2))] = (conv2d_nchw[(((ff_outer_inner * 4) + 2))] + (pad_temp_shared[(((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 144))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 3))] = (conv2d_nchw[(((ff_outer_inner * 4) + 3))] + (pad_temp_shared[(((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 216))]));
+              conv2d_nchw[((ff_outer_inner * 4))] = (conv2d_nchw[((ff_outer_inner * 4))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 1))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 1))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 1))] = (conv2d_nchw[(((ff_outer_inner * 4) + 1))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 1))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 73))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 2))] = (conv2d_nchw[(((ff_outer_inner * 4) + 2))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 1))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 145))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 3))] = (conv2d_nchw[(((ff_outer_inner * 4) + 3))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 1))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 217))]));
+              conv2d_nchw[((ff_outer_inner * 4))] = (conv2d_nchw[((ff_outer_inner * 4))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 2))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 2))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 1))] = (conv2d_nchw[(((ff_outer_inner * 4) + 1))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 2))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 74))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 2))] = (conv2d_nchw[(((ff_outer_inner * 4) + 2))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 2))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 146))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 3))] = (conv2d_nchw[(((ff_outer_inner * 4) + 3))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 2))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 218))]));
+              conv2d_nchw[((ff_outer_inner * 4))] = (conv2d_nchw[((ff_outer_inner * 4))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 81))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 9))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 1))] = (conv2d_nchw[(((ff_outer_inner * 4) + 1))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 81))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 81))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 2))] = (conv2d_nchw[(((ff_outer_inner * 4) + 2))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 81))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 153))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 3))] = (conv2d_nchw[(((ff_outer_inner * 4) + 3))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 81))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 225))]));
+              conv2d_nchw[((ff_outer_inner * 4))] = (conv2d_nchw[((ff_outer_inner * 4))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 82))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 10))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 1))] = (conv2d_nchw[(((ff_outer_inner * 4) + 1))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 82))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 82))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 2))] = (conv2d_nchw[(((ff_outer_inner * 4) + 2))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 82))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 154))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 3))] = (conv2d_nchw[(((ff_outer_inner * 4) + 3))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 82))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 226))]));
+              conv2d_nchw[((ff_outer_inner * 4))] = (conv2d_nchw[((ff_outer_inner * 4))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 83))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 11))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 1))] = (conv2d_nchw[(((ff_outer_inner * 4) + 1))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 83))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 83))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 2))] = (conv2d_nchw[(((ff_outer_inner * 4) + 2))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 83))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 155))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 3))] = (conv2d_nchw[(((ff_outer_inner * 4) + 3))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 83))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 227))]));
+              conv2d_nchw[((ff_outer_inner * 4))] = (conv2d_nchw[((ff_outer_inner * 4))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 162))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 18))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 1))] = (conv2d_nchw[(((ff_outer_inner * 4) + 1))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 162))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 90))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 2))] = (conv2d_nchw[(((ff_outer_inner * 4) + 2))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 162))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 162))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 3))] = (conv2d_nchw[(((ff_outer_inner * 4) + 3))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 162))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 234))]));
+              conv2d_nchw[((ff_outer_inner * 4))] = (conv2d_nchw[((ff_outer_inner * 4))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 163))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 19))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 1))] = (conv2d_nchw[(((ff_outer_inner * 4) + 1))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 163))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 91))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 2))] = (conv2d_nchw[(((ff_outer_inner * 4) + 2))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 163))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 163))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 3))] = (conv2d_nchw[(((ff_outer_inner * 4) + 3))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 163))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 235))]));
+              conv2d_nchw[((ff_outer_inner * 4))] = (conv2d_nchw[((ff_outer_inner * 4))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 164))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 20))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 1))] = (conv2d_nchw[(((ff_outer_inner * 4) + 1))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 164))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 92))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 2))] = (conv2d_nchw[(((ff_outer_inner * 4) + 2))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 164))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 164))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 3))] = (conv2d_nchw[(((ff_outer_inner * 4) + 3))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 164))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 236))]));
+              conv2d_nchw[((ff_outer_inner * 4))] = (conv2d_nchw[((ff_outer_inner * 4))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 243))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 27))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 1))] = (conv2d_nchw[(((ff_outer_inner * 4) + 1))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 243))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 99))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 2))] = (conv2d_nchw[(((ff_outer_inner * 4) + 2))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 243))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 171))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 3))] = (conv2d_nchw[(((ff_outer_inner * 4) + 3))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 243))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 243))]));
+              conv2d_nchw[((ff_outer_inner * 4))] = (conv2d_nchw[((ff_outer_inner * 4))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 244))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 28))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 1))] = (conv2d_nchw[(((ff_outer_inner * 4) + 1))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 244))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 100))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 2))] = (conv2d_nchw[(((ff_outer_inner * 4) + 2))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 244))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 172))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 3))] = (conv2d_nchw[(((ff_outer_inner * 4) + 3))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 244))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 244))]));
+              conv2d_nchw[((ff_outer_inner * 4))] = (conv2d_nchw[((ff_outer_inner * 4))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 245))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 29))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 1))] = (conv2d_nchw[(((ff_outer_inner * 4) + 1))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 245))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 101))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 2))] = (conv2d_nchw[(((ff_outer_inner * 4) + 2))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 245))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 173))]));
+              conv2d_nchw[(((ff_outer_inner * 4) + 3))] = (conv2d_nchw[(((ff_outer_inner * 4) + 3))] + (pad_temp_shared[((((((rc_outer_inner * 324) + (((((int)threadIdx.x) % 49) / 7) * 9)) + (ry_outer_inner * 9)) + (((int)threadIdx.x) % 7)) + 245))] * kernel_shared[(((((((((int)threadIdx.x) / 49) * 576) + (ff_outer_inner * 288)) + (rc_outer_inner * 36)) + (ry_outer_inner * 3)) + 245))]));
+            }
           }
-          kernel_shared[(((int)threadIdx.x))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + ((((int)threadIdx.x) / 24) * 4608)) + (rc_outer_outer * 72)) + (((((int)threadIdx.x) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + (((int)threadIdx.x) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 64))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 64) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 16) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 1) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 128))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 128) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 8) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 2) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 192))] = kernel[(((((((((((int)blockIdx.x) / 7) * 589824) + ((((int)threadIdx.x) / 24) * 4608)) + (rc_outer_outer * 72)) + (((((int)threadIdx.x) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + (((int)threadIdx.x) % 3)) + 36864))];
-          kernel_shared[((((int)threadIdx.x) + 256))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 256) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 16) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 1) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 320))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 320) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 8) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 2) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 384))] = kernel[(((((((((((int)blockIdx.x) / 7) * 589824) + ((((int)threadIdx.x) / 24) * 4608)) + (rc_outer_outer * 72)) + (((((int)threadIdx.x) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + (((int)threadIdx.x) % 3)) + 73728))];
-          kernel_shared[((((int)threadIdx.x) + 448))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 448) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 16) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 1) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 512))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 512) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 8) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 2) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 576))] = kernel[(((((((((((int)blockIdx.x) / 7) * 589824) + ((((int)threadIdx.x) / 24) * 4608)) + (rc_outer_outer * 72)) + (((((int)threadIdx.x) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + (((int)threadIdx.x) % 3)) + 110592))];
-          kernel_shared[((((int)threadIdx.x) + 640))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 640) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 16) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 1) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 704))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 704) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 8) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 2) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 768))] = kernel[(((((((((((int)blockIdx.x) / 7) * 589824) + ((((int)threadIdx.x) / 24) * 4608)) + (rc_outer_outer * 72)) + (((((int)threadIdx.x) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + (((int)threadIdx.x) % 3)) + 147456))];
-          kernel_shared[((((int)threadIdx.x) + 832))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 832) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 16) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 1) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 896))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 896) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 8) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 2) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 960))] = kernel[(((((((((((int)blockIdx.x) / 7) * 589824) + ((((int)threadIdx.x) / 24) * 4608)) + (rc_outer_outer * 72)) + (((((int)threadIdx.x) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + (((int)threadIdx.x) % 3)) + 184320))];
-          kernel_shared[((((int)threadIdx.x) + 1024))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 1024) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 16) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 1) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 1088))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 1088) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 8) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 2) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 1152))] = kernel[(((((((((((int)blockIdx.x) / 7) * 589824) + ((((int)threadIdx.x) / 24) * 4608)) + (rc_outer_outer * 72)) + (((((int)threadIdx.x) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + (((int)threadIdx.x) % 3)) + 221184))];
-          kernel_shared[((((int)threadIdx.x) + 1216))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 1216) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 16) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 1) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 1280))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 1280) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 8) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 2) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 1344))] = kernel[(((((((((((int)blockIdx.x) / 7) * 589824) + ((((int)threadIdx.x) / 24) * 4608)) + (rc_outer_outer * 72)) + (((((int)threadIdx.x) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + (((int)threadIdx.x) % 3)) + 258048))];
-          kernel_shared[((((int)threadIdx.x) + 1408))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 1408) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 16) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 1) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 1472))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 1472) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 8) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 2) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 1536))] = kernel[(((((((((((int)blockIdx.x) / 7) * 589824) + ((((int)threadIdx.x) / 24) * 4608)) + (rc_outer_outer * 72)) + (((((int)threadIdx.x) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + (((int)threadIdx.x) % 3)) + 294912))];
-          kernel_shared[((((int)threadIdx.x) + 1600))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 1600) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 16) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 1) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 1664))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 1664) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 8) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 2) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 1728))] = kernel[(((((((((((int)blockIdx.x) / 7) * 589824) + ((((int)threadIdx.x) / 24) * 4608)) + (rc_outer_outer * 72)) + (((((int)threadIdx.x) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + (((int)threadIdx.x) % 3)) + 331776))];
-          kernel_shared[((((int)threadIdx.x) + 1792))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 1792) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 16) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 1) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 1856))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 1856) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 8) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 2) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 1920))] = kernel[(((((((((((int)blockIdx.x) / 7) * 589824) + ((((int)threadIdx.x) / 24) * 4608)) + (rc_outer_outer * 72)) + (((((int)threadIdx.x) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + (((int)threadIdx.x) % 3)) + 368640))];
-          kernel_shared[((((int)threadIdx.x) + 1984))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 1984) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 16) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 1) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 2048))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 2048) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 8) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 2) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 2112))] = kernel[(((((((((((int)blockIdx.x) / 7) * 589824) + ((((int)threadIdx.x) / 24) * 4608)) + (rc_outer_outer * 72)) + (((((int)threadIdx.x) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + (((int)threadIdx.x) % 3)) + 405504))];
-          kernel_shared[((((int)threadIdx.x) + 2176))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 2176) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 16) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 1) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 2240))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 2240) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 8) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 2) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 2304))] = kernel[(((((((((((int)blockIdx.x) / 7) * 589824) + ((((int)threadIdx.x) / 24) * 4608)) + (rc_outer_outer * 72)) + (((((int)threadIdx.x) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + (((int)threadIdx.x) % 3)) + 442368))];
-          kernel_shared[((((int)threadIdx.x) + 2368))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 2368) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 16) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 1) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 2432))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 2432) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 8) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 2) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 2496))] = kernel[(((((((((((int)blockIdx.x) / 7) * 589824) + ((((int)threadIdx.x) / 24) * 4608)) + (rc_outer_outer * 72)) + (((((int)threadIdx.x) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + (((int)threadIdx.x) % 3)) + 479232))];
-          kernel_shared[((((int)threadIdx.x) + 2560))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 2560) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 16) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 1) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 2624))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 2624) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 8) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 2) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 2688))] = kernel[(((((((((((int)blockIdx.x) / 7) * 589824) + ((((int)threadIdx.x) / 24) * 4608)) + (rc_outer_outer * 72)) + (((((int)threadIdx.x) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + (((int)threadIdx.x) % 3)) + 516096))];
-          kernel_shared[((((int)threadIdx.x) + 2752))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 2752) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 16) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 1) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 2816))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 2816) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 8) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 2) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 2880))] = kernel[(((((((((((int)blockIdx.x) / 7) * 589824) + ((((int)threadIdx.x) / 24) * 4608)) + (rc_outer_outer * 72)) + (((((int)threadIdx.x) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + (((int)threadIdx.x) % 3)) + 552960))];
-          kernel_shared[((((int)threadIdx.x) + 2944))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 2944) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 16) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 1) % 3)))];
-          kernel_shared[((((int)threadIdx.x) + 3008))] = kernel[((((((((((int)blockIdx.x) / 7) * 589824) + (((((int)threadIdx.x) + 3008) / 24) * 4608)) + (rc_outer_outer * 72)) + ((((((int)threadIdx.x) + 8) % 24) / 3) * 9)) + (ry_outer_outer * 3)) + ((((int)threadIdx.x) + 2) % 3)))];
-          __syncthreads();
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(0)] * kernel_shared[((((int)threadIdx.x) * 48))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(9)] * kernel_shared[(((((int)threadIdx.x) * 48) + 3))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(1)] * kernel_shared[((((int)threadIdx.x) * 48))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(10)] * kernel_shared[(((((int)threadIdx.x) * 48) + 3))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(2)] * kernel_shared[((((int)threadIdx.x) * 48))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(11)] * kernel_shared[(((((int)threadIdx.x) * 48) + 3))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(3)] * kernel_shared[((((int)threadIdx.x) * 48))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(12)] * kernel_shared[(((((int)threadIdx.x) * 48) + 3))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(4)] * kernel_shared[((((int)threadIdx.x) * 48))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(13)] * kernel_shared[(((((int)threadIdx.x) * 48) + 3))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(5)] * kernel_shared[((((int)threadIdx.x) * 48))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(14)] * kernel_shared[(((((int)threadIdx.x) * 48) + 3))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(6)] * kernel_shared[((((int)threadIdx.x) * 48))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(15)] * kernel_shared[(((((int)threadIdx.x) * 48) + 3))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(0)] * kernel_shared[(((((int)threadIdx.x) * 48) + 24))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(9)] * kernel_shared[(((((int)threadIdx.x) * 48) + 27))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(1)] * kernel_shared[(((((int)threadIdx.x) * 48) + 24))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(10)] * kernel_shared[(((((int)threadIdx.x) * 48) + 27))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(2)] * kernel_shared[(((((int)threadIdx.x) * 48) + 24))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(11)] * kernel_shared[(((((int)threadIdx.x) * 48) + 27))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(3)] * kernel_shared[(((((int)threadIdx.x) * 48) + 24))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(12)] * kernel_shared[(((((int)threadIdx.x) * 48) + 27))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(4)] * kernel_shared[(((((int)threadIdx.x) * 48) + 24))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(13)] * kernel_shared[(((((int)threadIdx.x) * 48) + 27))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(5)] * kernel_shared[(((((int)threadIdx.x) * 48) + 24))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(14)] * kernel_shared[(((((int)threadIdx.x) * 48) + 27))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(6)] * kernel_shared[(((((int)threadIdx.x) * 48) + 24))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(15)] * kernel_shared[(((((int)threadIdx.x) * 48) + 27))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(1)] * kernel_shared[(((((int)threadIdx.x) * 48) + 1))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(10)] * kernel_shared[(((((int)threadIdx.x) * 48) + 4))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(2)] * kernel_shared[(((((int)threadIdx.x) * 48) + 1))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(11)] * kernel_shared[(((((int)threadIdx.x) * 48) + 4))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(3)] * kernel_shared[(((((int)threadIdx.x) * 48) + 1))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(12)] * kernel_shared[(((((int)threadIdx.x) * 48) + 4))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(4)] * kernel_shared[(((((int)threadIdx.x) * 48) + 1))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(13)] * kernel_shared[(((((int)threadIdx.x) * 48) + 4))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(5)] * kernel_shared[(((((int)threadIdx.x) * 48) + 1))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(14)] * kernel_shared[(((((int)threadIdx.x) * 48) + 4))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(6)] * kernel_shared[(((((int)threadIdx.x) * 48) + 1))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(15)] * kernel_shared[(((((int)threadIdx.x) * 48) + 4))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(7)] * kernel_shared[(((((int)threadIdx.x) * 48) + 1))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(16)] * kernel_shared[(((((int)threadIdx.x) * 48) + 4))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(1)] * kernel_shared[(((((int)threadIdx.x) * 48) + 25))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(10)] * kernel_shared[(((((int)threadIdx.x) * 48) + 28))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(2)] * kernel_shared[(((((int)threadIdx.x) * 48) + 25))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(11)] * kernel_shared[(((((int)threadIdx.x) * 48) + 28))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(3)] * kernel_shared[(((((int)threadIdx.x) * 48) + 25))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(12)] * kernel_shared[(((((int)threadIdx.x) * 48) + 28))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(4)] * kernel_shared[(((((int)threadIdx.x) * 48) + 25))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(13)] * kernel_shared[(((((int)threadIdx.x) * 48) + 28))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(5)] * kernel_shared[(((((int)threadIdx.x) * 48) + 25))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(14)] * kernel_shared[(((((int)threadIdx.x) * 48) + 28))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(6)] * kernel_shared[(((((int)threadIdx.x) * 48) + 25))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(15)] * kernel_shared[(((((int)threadIdx.x) * 48) + 28))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(7)] * kernel_shared[(((((int)threadIdx.x) * 48) + 25))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(16)] * kernel_shared[(((((int)threadIdx.x) * 48) + 28))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(2)] * kernel_shared[(((((int)threadIdx.x) * 48) + 2))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(11)] * kernel_shared[(((((int)threadIdx.x) * 48) + 5))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(3)] * kernel_shared[(((((int)threadIdx.x) * 48) + 2))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(12)] * kernel_shared[(((((int)threadIdx.x) * 48) + 5))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(4)] * kernel_shared[(((((int)threadIdx.x) * 48) + 2))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(13)] * kernel_shared[(((((int)threadIdx.x) * 48) + 5))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(5)] * kernel_shared[(((((int)threadIdx.x) * 48) + 2))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(14)] * kernel_shared[(((((int)threadIdx.x) * 48) + 5))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(6)] * kernel_shared[(((((int)threadIdx.x) * 48) + 2))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(15)] * kernel_shared[(((((int)threadIdx.x) * 48) + 5))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(7)] * kernel_shared[(((((int)threadIdx.x) * 48) + 2))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(16)] * kernel_shared[(((((int)threadIdx.x) * 48) + 5))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(8)] * kernel_shared[(((((int)threadIdx.x) * 48) + 2))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(17)] * kernel_shared[(((((int)threadIdx.x) * 48) + 5))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(2)] * kernel_shared[(((((int)threadIdx.x) * 48) + 26))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(11)] * kernel_shared[(((((int)threadIdx.x) * 48) + 29))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(3)] * kernel_shared[(((((int)threadIdx.x) * 48) + 26))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(12)] * kernel_shared[(((((int)threadIdx.x) * 48) + 29))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(4)] * kernel_shared[(((((int)threadIdx.x) * 48) + 26))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(13)] * kernel_shared[(((((int)threadIdx.x) * 48) + 29))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(5)] * kernel_shared[(((((int)threadIdx.x) * 48) + 26))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(14)] * kernel_shared[(((((int)threadIdx.x) * 48) + 29))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(6)] * kernel_shared[(((((int)threadIdx.x) * 48) + 26))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(15)] * kernel_shared[(((((int)threadIdx.x) * 48) + 29))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(7)] * kernel_shared[(((((int)threadIdx.x) * 48) + 26))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(16)] * kernel_shared[(((((int)threadIdx.x) * 48) + 29))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(8)] * kernel_shared[(((((int)threadIdx.x) * 48) + 26))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(17)] * kernel_shared[(((((int)threadIdx.x) * 48) + 29))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(18)] * kernel_shared[(((((int)threadIdx.x) * 48) + 6))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(27)] * kernel_shared[(((((int)threadIdx.x) * 48) + 9))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(19)] * kernel_shared[(((((int)threadIdx.x) * 48) + 6))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(28)] * kernel_shared[(((((int)threadIdx.x) * 48) + 9))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(20)] * kernel_shared[(((((int)threadIdx.x) * 48) + 6))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(29)] * kernel_shared[(((((int)threadIdx.x) * 48) + 9))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(21)] * kernel_shared[(((((int)threadIdx.x) * 48) + 6))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(30)] * kernel_shared[(((((int)threadIdx.x) * 48) + 9))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(22)] * kernel_shared[(((((int)threadIdx.x) * 48) + 6))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(31)] * kernel_shared[(((((int)threadIdx.x) * 48) + 9))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(23)] * kernel_shared[(((((int)threadIdx.x) * 48) + 6))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(32)] * kernel_shared[(((((int)threadIdx.x) * 48) + 9))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(24)] * kernel_shared[(((((int)threadIdx.x) * 48) + 6))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(33)] * kernel_shared[(((((int)threadIdx.x) * 48) + 9))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(18)] * kernel_shared[(((((int)threadIdx.x) * 48) + 30))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(27)] * kernel_shared[(((((int)threadIdx.x) * 48) + 33))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(19)] * kernel_shared[(((((int)threadIdx.x) * 48) + 30))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(28)] * kernel_shared[(((((int)threadIdx.x) * 48) + 33))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(20)] * kernel_shared[(((((int)threadIdx.x) * 48) + 30))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(29)] * kernel_shared[(((((int)threadIdx.x) * 48) + 33))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(21)] * kernel_shared[(((((int)threadIdx.x) * 48) + 30))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(30)] * kernel_shared[(((((int)threadIdx.x) * 48) + 33))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(22)] * kernel_shared[(((((int)threadIdx.x) * 48) + 30))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(31)] * kernel_shared[(((((int)threadIdx.x) * 48) + 33))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(23)] * kernel_shared[(((((int)threadIdx.x) * 48) + 30))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(32)] * kernel_shared[(((((int)threadIdx.x) * 48) + 33))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(24)] * kernel_shared[(((((int)threadIdx.x) * 48) + 30))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(33)] * kernel_shared[(((((int)threadIdx.x) * 48) + 33))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(19)] * kernel_shared[(((((int)threadIdx.x) * 48) + 7))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(28)] * kernel_shared[(((((int)threadIdx.x) * 48) + 10))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(20)] * kernel_shared[(((((int)threadIdx.x) * 48) + 7))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(29)] * kernel_shared[(((((int)threadIdx.x) * 48) + 10))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(21)] * kernel_shared[(((((int)threadIdx.x) * 48) + 7))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(30)] * kernel_shared[(((((int)threadIdx.x) * 48) + 10))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(22)] * kernel_shared[(((((int)threadIdx.x) * 48) + 7))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(31)] * kernel_shared[(((((int)threadIdx.x) * 48) + 10))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(23)] * kernel_shared[(((((int)threadIdx.x) * 48) + 7))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(32)] * kernel_shared[(((((int)threadIdx.x) * 48) + 10))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(24)] * kernel_shared[(((((int)threadIdx.x) * 48) + 7))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(33)] * kernel_shared[(((((int)threadIdx.x) * 48) + 10))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(25)] * kernel_shared[(((((int)threadIdx.x) * 48) + 7))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(34)] * kernel_shared[(((((int)threadIdx.x) * 48) + 10))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(19)] * kernel_shared[(((((int)threadIdx.x) * 48) + 31))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(28)] * kernel_shared[(((((int)threadIdx.x) * 48) + 34))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(20)] * kernel_shared[(((((int)threadIdx.x) * 48) + 31))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(29)] * kernel_shared[(((((int)threadIdx.x) * 48) + 34))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(21)] * kernel_shared[(((((int)threadIdx.x) * 48) + 31))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(30)] * kernel_shared[(((((int)threadIdx.x) * 48) + 34))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(22)] * kernel_shared[(((((int)threadIdx.x) * 48) + 31))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(31)] * kernel_shared[(((((int)threadIdx.x) * 48) + 34))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(23)] * kernel_shared[(((((int)threadIdx.x) * 48) + 31))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(32)] * kernel_shared[(((((int)threadIdx.x) * 48) + 34))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(24)] * kernel_shared[(((((int)threadIdx.x) * 48) + 31))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(33)] * kernel_shared[(((((int)threadIdx.x) * 48) + 34))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(25)] * kernel_shared[(((((int)threadIdx.x) * 48) + 31))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(34)] * kernel_shared[(((((int)threadIdx.x) * 48) + 34))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(20)] * kernel_shared[(((((int)threadIdx.x) * 48) + 8))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(29)] * kernel_shared[(((((int)threadIdx.x) * 48) + 11))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(21)] * kernel_shared[(((((int)threadIdx.x) * 48) + 8))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(30)] * kernel_shared[(((((int)threadIdx.x) * 48) + 11))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(22)] * kernel_shared[(((((int)threadIdx.x) * 48) + 8))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(31)] * kernel_shared[(((((int)threadIdx.x) * 48) + 11))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(23)] * kernel_shared[(((((int)threadIdx.x) * 48) + 8))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(32)] * kernel_shared[(((((int)threadIdx.x) * 48) + 11))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(24)] * kernel_shared[(((((int)threadIdx.x) * 48) + 8))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(33)] * kernel_shared[(((((int)threadIdx.x) * 48) + 11))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(25)] * kernel_shared[(((((int)threadIdx.x) * 48) + 8))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(34)] * kernel_shared[(((((int)threadIdx.x) * 48) + 11))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(26)] * kernel_shared[(((((int)threadIdx.x) * 48) + 8))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(35)] * kernel_shared[(((((int)threadIdx.x) * 48) + 11))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(20)] * kernel_shared[(((((int)threadIdx.x) * 48) + 32))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(29)] * kernel_shared[(((((int)threadIdx.x) * 48) + 35))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(21)] * kernel_shared[(((((int)threadIdx.x) * 48) + 32))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(30)] * kernel_shared[(((((int)threadIdx.x) * 48) + 35))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(22)] * kernel_shared[(((((int)threadIdx.x) * 48) + 32))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(31)] * kernel_shared[(((((int)threadIdx.x) * 48) + 35))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(23)] * kernel_shared[(((((int)threadIdx.x) * 48) + 32))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(32)] * kernel_shared[(((((int)threadIdx.x) * 48) + 35))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(24)] * kernel_shared[(((((int)threadIdx.x) * 48) + 32))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(33)] * kernel_shared[(((((int)threadIdx.x) * 48) + 35))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(25)] * kernel_shared[(((((int)threadIdx.x) * 48) + 32))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(34)] * kernel_shared[(((((int)threadIdx.x) * 48) + 35))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(26)] * kernel_shared[(((((int)threadIdx.x) * 48) + 32))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(35)] * kernel_shared[(((((int)threadIdx.x) * 48) + 35))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(36)] * kernel_shared[(((((int)threadIdx.x) * 48) + 12))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(45)] * kernel_shared[(((((int)threadIdx.x) * 48) + 15))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(37)] * kernel_shared[(((((int)threadIdx.x) * 48) + 12))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(46)] * kernel_shared[(((((int)threadIdx.x) * 48) + 15))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(38)] * kernel_shared[(((((int)threadIdx.x) * 48) + 12))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(47)] * kernel_shared[(((((int)threadIdx.x) * 48) + 15))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(39)] * kernel_shared[(((((int)threadIdx.x) * 48) + 12))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(48)] * kernel_shared[(((((int)threadIdx.x) * 48) + 15))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(40)] * kernel_shared[(((((int)threadIdx.x) * 48) + 12))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(49)] * kernel_shared[(((((int)threadIdx.x) * 48) + 15))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(41)] * kernel_shared[(((((int)threadIdx.x) * 48) + 12))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(50)] * kernel_shared[(((((int)threadIdx.x) * 48) + 15))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(42)] * kernel_shared[(((((int)threadIdx.x) * 48) + 12))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(51)] * kernel_shared[(((((int)threadIdx.x) * 48) + 15))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(36)] * kernel_shared[(((((int)threadIdx.x) * 48) + 36))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(45)] * kernel_shared[(((((int)threadIdx.x) * 48) + 39))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(37)] * kernel_shared[(((((int)threadIdx.x) * 48) + 36))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(46)] * kernel_shared[(((((int)threadIdx.x) * 48) + 39))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(38)] * kernel_shared[(((((int)threadIdx.x) * 48) + 36))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(47)] * kernel_shared[(((((int)threadIdx.x) * 48) + 39))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(39)] * kernel_shared[(((((int)threadIdx.x) * 48) + 36))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(48)] * kernel_shared[(((((int)threadIdx.x) * 48) + 39))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(40)] * kernel_shared[(((((int)threadIdx.x) * 48) + 36))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(49)] * kernel_shared[(((((int)threadIdx.x) * 48) + 39))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(41)] * kernel_shared[(((((int)threadIdx.x) * 48) + 36))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(50)] * kernel_shared[(((((int)threadIdx.x) * 48) + 39))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(42)] * kernel_shared[(((((int)threadIdx.x) * 48) + 36))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(51)] * kernel_shared[(((((int)threadIdx.x) * 48) + 39))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(37)] * kernel_shared[(((((int)threadIdx.x) * 48) + 13))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(46)] * kernel_shared[(((((int)threadIdx.x) * 48) + 16))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(38)] * kernel_shared[(((((int)threadIdx.x) * 48) + 13))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(47)] * kernel_shared[(((((int)threadIdx.x) * 48) + 16))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(39)] * kernel_shared[(((((int)threadIdx.x) * 48) + 13))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(48)] * kernel_shared[(((((int)threadIdx.x) * 48) + 16))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(40)] * kernel_shared[(((((int)threadIdx.x) * 48) + 13))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(49)] * kernel_shared[(((((int)threadIdx.x) * 48) + 16))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(41)] * kernel_shared[(((((int)threadIdx.x) * 48) + 13))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(50)] * kernel_shared[(((((int)threadIdx.x) * 48) + 16))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(42)] * kernel_shared[(((((int)threadIdx.x) * 48) + 13))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(51)] * kernel_shared[(((((int)threadIdx.x) * 48) + 16))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(43)] * kernel_shared[(((((int)threadIdx.x) * 48) + 13))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(52)] * kernel_shared[(((((int)threadIdx.x) * 48) + 16))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(37)] * kernel_shared[(((((int)threadIdx.x) * 48) + 37))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(46)] * kernel_shared[(((((int)threadIdx.x) * 48) + 40))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(38)] * kernel_shared[(((((int)threadIdx.x) * 48) + 37))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(47)] * kernel_shared[(((((int)threadIdx.x) * 48) + 40))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(39)] * kernel_shared[(((((int)threadIdx.x) * 48) + 37))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(48)] * kernel_shared[(((((int)threadIdx.x) * 48) + 40))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(40)] * kernel_shared[(((((int)threadIdx.x) * 48) + 37))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(49)] * kernel_shared[(((((int)threadIdx.x) * 48) + 40))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(41)] * kernel_shared[(((((int)threadIdx.x) * 48) + 37))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(50)] * kernel_shared[(((((int)threadIdx.x) * 48) + 40))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(42)] * kernel_shared[(((((int)threadIdx.x) * 48) + 37))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(51)] * kernel_shared[(((((int)threadIdx.x) * 48) + 40))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(43)] * kernel_shared[(((((int)threadIdx.x) * 48) + 37))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(52)] * kernel_shared[(((((int)threadIdx.x) * 48) + 40))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(38)] * kernel_shared[(((((int)threadIdx.x) * 48) + 14))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(47)] * kernel_shared[(((((int)threadIdx.x) * 48) + 17))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(39)] * kernel_shared[(((((int)threadIdx.x) * 48) + 14))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(48)] * kernel_shared[(((((int)threadIdx.x) * 48) + 17))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(40)] * kernel_shared[(((((int)threadIdx.x) * 48) + 14))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(49)] * kernel_shared[(((((int)threadIdx.x) * 48) + 17))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(41)] * kernel_shared[(((((int)threadIdx.x) * 48) + 14))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(50)] * kernel_shared[(((((int)threadIdx.x) * 48) + 17))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(42)] * kernel_shared[(((((int)threadIdx.x) * 48) + 14))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(51)] * kernel_shared[(((((int)threadIdx.x) * 48) + 17))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(43)] * kernel_shared[(((((int)threadIdx.x) * 48) + 14))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(52)] * kernel_shared[(((((int)threadIdx.x) * 48) + 17))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(44)] * kernel_shared[(((((int)threadIdx.x) * 48) + 14))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(53)] * kernel_shared[(((((int)threadIdx.x) * 48) + 17))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(38)] * kernel_shared[(((((int)threadIdx.x) * 48) + 38))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(47)] * kernel_shared[(((((int)threadIdx.x) * 48) + 41))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(39)] * kernel_shared[(((((int)threadIdx.x) * 48) + 38))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(48)] * kernel_shared[(((((int)threadIdx.x) * 48) + 41))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(40)] * kernel_shared[(((((int)threadIdx.x) * 48) + 38))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(49)] * kernel_shared[(((((int)threadIdx.x) * 48) + 41))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(41)] * kernel_shared[(((((int)threadIdx.x) * 48) + 38))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(50)] * kernel_shared[(((((int)threadIdx.x) * 48) + 41))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(42)] * kernel_shared[(((((int)threadIdx.x) * 48) + 38))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(51)] * kernel_shared[(((((int)threadIdx.x) * 48) + 41))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(43)] * kernel_shared[(((((int)threadIdx.x) * 48) + 38))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(52)] * kernel_shared[(((((int)threadIdx.x) * 48) + 41))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(44)] * kernel_shared[(((((int)threadIdx.x) * 48) + 38))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(53)] * kernel_shared[(((((int)threadIdx.x) * 48) + 41))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(54)] * kernel_shared[(((((int)threadIdx.x) * 48) + 18))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(63)] * kernel_shared[(((((int)threadIdx.x) * 48) + 21))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(55)] * kernel_shared[(((((int)threadIdx.x) * 48) + 18))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(64)] * kernel_shared[(((((int)threadIdx.x) * 48) + 21))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(56)] * kernel_shared[(((((int)threadIdx.x) * 48) + 18))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(65)] * kernel_shared[(((((int)threadIdx.x) * 48) + 21))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(57)] * kernel_shared[(((((int)threadIdx.x) * 48) + 18))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(66)] * kernel_shared[(((((int)threadIdx.x) * 48) + 21))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(58)] * kernel_shared[(((((int)threadIdx.x) * 48) + 18))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(67)] * kernel_shared[(((((int)threadIdx.x) * 48) + 21))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(59)] * kernel_shared[(((((int)threadIdx.x) * 48) + 18))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(68)] * kernel_shared[(((((int)threadIdx.x) * 48) + 21))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(60)] * kernel_shared[(((((int)threadIdx.x) * 48) + 18))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(69)] * kernel_shared[(((((int)threadIdx.x) * 48) + 21))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(54)] * kernel_shared[(((((int)threadIdx.x) * 48) + 42))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(63)] * kernel_shared[(((((int)threadIdx.x) * 48) + 45))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(55)] * kernel_shared[(((((int)threadIdx.x) * 48) + 42))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(64)] * kernel_shared[(((((int)threadIdx.x) * 48) + 45))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(56)] * kernel_shared[(((((int)threadIdx.x) * 48) + 42))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(65)] * kernel_shared[(((((int)threadIdx.x) * 48) + 45))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(57)] * kernel_shared[(((((int)threadIdx.x) * 48) + 42))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(66)] * kernel_shared[(((((int)threadIdx.x) * 48) + 45))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(58)] * kernel_shared[(((((int)threadIdx.x) * 48) + 42))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(67)] * kernel_shared[(((((int)threadIdx.x) * 48) + 45))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(59)] * kernel_shared[(((((int)threadIdx.x) * 48) + 42))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(68)] * kernel_shared[(((((int)threadIdx.x) * 48) + 45))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(60)] * kernel_shared[(((((int)threadIdx.x) * 48) + 42))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(69)] * kernel_shared[(((((int)threadIdx.x) * 48) + 45))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(55)] * kernel_shared[(((((int)threadIdx.x) * 48) + 19))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(64)] * kernel_shared[(((((int)threadIdx.x) * 48) + 22))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(56)] * kernel_shared[(((((int)threadIdx.x) * 48) + 19))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(65)] * kernel_shared[(((((int)threadIdx.x) * 48) + 22))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(57)] * kernel_shared[(((((int)threadIdx.x) * 48) + 19))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(66)] * kernel_shared[(((((int)threadIdx.x) * 48) + 22))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(58)] * kernel_shared[(((((int)threadIdx.x) * 48) + 19))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(67)] * kernel_shared[(((((int)threadIdx.x) * 48) + 22))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(59)] * kernel_shared[(((((int)threadIdx.x) * 48) + 19))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(68)] * kernel_shared[(((((int)threadIdx.x) * 48) + 22))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(60)] * kernel_shared[(((((int)threadIdx.x) * 48) + 19))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(69)] * kernel_shared[(((((int)threadIdx.x) * 48) + 22))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(61)] * kernel_shared[(((((int)threadIdx.x) * 48) + 19))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(70)] * kernel_shared[(((((int)threadIdx.x) * 48) + 22))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(55)] * kernel_shared[(((((int)threadIdx.x) * 48) + 43))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(64)] * kernel_shared[(((((int)threadIdx.x) * 48) + 46))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(56)] * kernel_shared[(((((int)threadIdx.x) * 48) + 43))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(65)] * kernel_shared[(((((int)threadIdx.x) * 48) + 46))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(57)] * kernel_shared[(((((int)threadIdx.x) * 48) + 43))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(66)] * kernel_shared[(((((int)threadIdx.x) * 48) + 46))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(58)] * kernel_shared[(((((int)threadIdx.x) * 48) + 43))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(67)] * kernel_shared[(((((int)threadIdx.x) * 48) + 46))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(59)] * kernel_shared[(((((int)threadIdx.x) * 48) + 43))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(68)] * kernel_shared[(((((int)threadIdx.x) * 48) + 46))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(60)] * kernel_shared[(((((int)threadIdx.x) * 48) + 43))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(69)] * kernel_shared[(((((int)threadIdx.x) * 48) + 46))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(61)] * kernel_shared[(((((int)threadIdx.x) * 48) + 43))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(70)] * kernel_shared[(((((int)threadIdx.x) * 48) + 46))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(56)] * kernel_shared[(((((int)threadIdx.x) * 48) + 20))]));
-          compute1[(0)] = (compute1[(0)] + (pad_temp_shared[(65)] * kernel_shared[(((((int)threadIdx.x) * 48) + 23))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(57)] * kernel_shared[(((((int)threadIdx.x) * 48) + 20))]));
-          compute1[(1)] = (compute1[(1)] + (pad_temp_shared[(66)] * kernel_shared[(((((int)threadIdx.x) * 48) + 23))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(58)] * kernel_shared[(((((int)threadIdx.x) * 48) + 20))]));
-          compute1[(2)] = (compute1[(2)] + (pad_temp_shared[(67)] * kernel_shared[(((((int)threadIdx.x) * 48) + 23))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(59)] * kernel_shared[(((((int)threadIdx.x) * 48) + 20))]));
-          compute1[(3)] = (compute1[(3)] + (pad_temp_shared[(68)] * kernel_shared[(((((int)threadIdx.x) * 48) + 23))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(60)] * kernel_shared[(((((int)threadIdx.x) * 48) + 20))]));
-          compute1[(4)] = (compute1[(4)] + (pad_temp_shared[(69)] * kernel_shared[(((((int)threadIdx.x) * 48) + 23))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(61)] * kernel_shared[(((((int)threadIdx.x) * 48) + 20))]));
-          compute1[(5)] = (compute1[(5)] + (pad_temp_shared[(70)] * kernel_shared[(((((int)threadIdx.x) * 48) + 23))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(62)] * kernel_shared[(((((int)threadIdx.x) * 48) + 20))]));
-          compute1[(6)] = (compute1[(6)] + (pad_temp_shared[(71)] * kernel_shared[(((((int)threadIdx.x) * 48) + 23))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(56)] * kernel_shared[(((((int)threadIdx.x) * 48) + 44))]));
-          compute1[(7)] = (compute1[(7)] + (pad_temp_shared[(65)] * kernel_shared[(((((int)threadIdx.x) * 48) + 47))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(57)] * kernel_shared[(((((int)threadIdx.x) * 48) + 44))]));
-          compute1[(8)] = (compute1[(8)] + (pad_temp_shared[(66)] * kernel_shared[(((((int)threadIdx.x) * 48) + 47))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(58)] * kernel_shared[(((((int)threadIdx.x) * 48) + 44))]));
-          compute1[(9)] = (compute1[(9)] + (pad_temp_shared[(67)] * kernel_shared[(((((int)threadIdx.x) * 48) + 47))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(59)] * kernel_shared[(((((int)threadIdx.x) * 48) + 44))]));
-          compute1[(10)] = (compute1[(10)] + (pad_temp_shared[(68)] * kernel_shared[(((((int)threadIdx.x) * 48) + 47))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(60)] * kernel_shared[(((((int)threadIdx.x) * 48) + 44))]));
-          compute1[(11)] = (compute1[(11)] + (pad_temp_shared[(69)] * kernel_shared[(((((int)threadIdx.x) * 48) + 47))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(61)] * kernel_shared[(((((int)threadIdx.x) * 48) + 44))]));
-          compute1[(12)] = (compute1[(12)] + (pad_temp_shared[(70)] * kernel_shared[(((((int)threadIdx.x) * 48) + 47))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(62)] * kernel_shared[(((((int)threadIdx.x) * 48) + 44))]));
-          compute1[(13)] = (compute1[(13)] + (pad_temp_shared[(71)] * kernel_shared[(((((int)threadIdx.x) * 48) + 47))]));
         }
       }
-      for (int i1_inner = 0; i1_inner < 2; ++i1_inner) {
-        for (int i3_inner = 0; i3_inner < 7; ++i3_inner) {
-          compute[(((((((((int)blockIdx.x) / 7) * 6272) + (((int)threadIdx.x) * 98)) + (i1_inner * 49)) + ((((int)blockIdx.x) % 7) * 7)) + i3_inner))] = max((compute1[(((i1_inner * 7) + i3_inner))] + bias[(((((((int)blockIdx.x) / 7) * 128) + (((int)threadIdx.x) * 2)) + i1_inner))]), 0.000000e+00f);
-        }
+      for (int i1_inner = 0; i1_inner < 8; ++i1_inner) {
+        compute[(((((((int)blockIdx.x) * 784) + ((((int)threadIdx.x) / 49) * 392)) + (i1_inner * 49)) + (((int)threadIdx.x) % 49)))] = max((conv2d_nchw[(i1_inner)] + bias[((((((int)blockIdx.x) * 16) + ((((int)threadIdx.x) / 49) * 8)) + i1_inner))]), 0.000000e+00f);
       }
     }
 
@@ -1343,6 +665,11 @@ In the example below we resume the status and do more 5 trials.
 
 
 
+.. rst-class:: sphx-glr-timing
+
+   **Total running time of the script:** ( 2 minutes  11.914 seconds)
+
+
 .. _sphx_glr_download_how_to_tune_with_autoscheduler_tune_conv2d_layer_cuda.py:
 
 
diff --git a/docs/_sources/how_to/tune_with_autoscheduler/tune_network_arm.rst.txt b/docs/_sources/how_to/tune_with_autoscheduler/tune_network_arm.rst.txt
index 8bd09be..a2f080a 100644
--- a/docs/_sources/how_to/tune_with_autoscheduler/tune_network_arm.rst.txt
+++ b/docs/_sources/how_to/tune_with_autoscheduler/tune_network_arm.rst.txt
@@ -304,22 +304,22 @@ The task scheduler will just optimize this objective.
 
     Get model...
     Extract tasks...
-    ========== Task 0  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 7, 7, 1024], [1, 1, 1024, 1024], [1, 1, 1, 1024], [1, 7, 7, 1024]]) ==========
+    ========== Task 0  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 7, 7, 1024], [1, 1, 1024, 1024], [1, 1, 1, 1024], [1, 7, 7, 1024]]) ==========
     placeholder = PLACEHOLDER [1, 7, 7, 1024]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 1024, 1024]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 1024]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 1  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 14, 14, 256], [1, 1, 256, 512], [1, 1, 1, 512], [1, 14, 14, 512]]) ==========
+    ========== Task 1  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 14, 14, 256], [1, 1, 256, 512], [1, 1, 1, 512], [1, 14, 14, 512]]) ==========
     placeholder = PLACEHOLDER [1, 14, 14, 256]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 256, 512]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 512]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
     ========== Task 2  (workload key: ["06fce76bd84cb904eee50b905ca9449a", [1, 28, 28, 256], [3, 3, 256, 1], [1, 1, 1, 256], [1, 28, 28, 256]]) ==========
@@ -331,13 +331,13 @@ The task scheduler will just optimize this objective.
     T_add(ax0, ax1, ax2, ax3) = (DepthwiseConv2d[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 3  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 28, 28, 128], [1, 1, 128, 256], [1, 1, 1, 256], [1, 28, 28, 256]]) ==========
+    ========== Task 3  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 28, 28, 128], [1, 1, 128, 256], [1, 1, 1, 256], [1, 28, 28, 256]]) ==========
     placeholder = PLACEHOLDER [1, 28, 28, 128]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 128, 256]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 256]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
     ========== Task 4  (workload key: ["d7b65649a4dd54becea0a52aabbc5af5", [1, 1000], [1, 1000]]) ==========
@@ -352,13 +352,13 @@ The task scheduler will just optimize this objective.
     tensor(ax0, ax1, ax2, ax3) += placeholder[ax0, ((ax1*7) + rv0), ((ax2*7) + rv1), ax3]
     tensor(ax0, ax1, ax2, ax3) = (tensor[ax0, ax1, ax2, ax3]/(float32((select((bool)1, ((ax1 + 1)*7), (((ax1 + 1)*7) + 1)) - (ax1*7)))*float32((select((bool)1, ((ax2 + 1)*7), (((ax2 + 1)*7) + 1)) - (ax2*7)))))
 
-    ========== Task 6  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 7, 7, 512], [1, 1, 512, 1024], [1, 1, 1, 1024], [1, 7, 7, 1024]]) ==========
+    ========== Task 6  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 7, 7, 512], [1, 1, 512, 1024], [1, 1, 1, 1024], [1, 7, 7, 1024]]) ==========
     placeholder = PLACEHOLDER [1, 7, 7, 512]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 512, 1024]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 1024]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
     ========== Task 7  (workload key: ["c87ba68bc180312f5716af09a77ca15b", [1, 56, 56, 128], [3, 3, 128, 1], [1, 1, 1, 128], [1, 28, 28, 128]]) ==========
@@ -406,31 +406,31 @@ The task scheduler will just optimize this objective.
     T_add(ax0, ax1, ax2, ax3) = (DepthwiseConv2d[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 12  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 28, 28, 256], [1, 1, 256, 256], [1, 1, 1, 256], [1, 28, 28, 256]]) ==========
+    ========== Task 12  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 28, 28, 256], [1, 1, 256, 256], [1, 1, 1, 256], [1, 28, 28, 256]]) ==========
     placeholder = PLACEHOLDER [1, 28, 28, 256]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 256, 256]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 256]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 13  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 56, 56, 128], [1, 1, 128, 128], [1, 1, 1, 128], [1, 56, 56, 128]]) ==========
+    ========== Task 13  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 56, 56, 128], [1, 1, 128, 128], [1, 1, 1, 128], [1, 56, 56, 128]]) ==========
     placeholder = PLACEHOLDER [1, 56, 56, 128]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 128, 128]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 128]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 14  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 14, 14, 512], [1, 1, 512, 512], [1, 1, 1, 512], [1, 14, 14, 512]]) ==========
+    ========== Task 14  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 14, 14, 512], [1, 1, 512, 512], [1, 1, 1, 512], [1, 14, 14, 512]]) ==========
     placeholder = PLACEHOLDER [1, 14, 14, 512]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 512, 512]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 512]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
     ========== Task 15  (workload key: ["06fce76bd84cb904eee50b905ca9449a", [1, 112, 112, 32], [3, 3, 32, 1], [1, 1, 1, 32], [1, 112, 112, 32]]) ==========
@@ -442,24 +442,24 @@ The task scheduler will just optimize this objective.
     T_add(ax0, ax1, ax2, ax3) = (DepthwiseConv2d[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 16  (workload key: ["98418eda02701ddd175ad50e364a0638", [1, 224, 224, 3], [3, 3, 3, 32], [1, 112, 1, 1], [1, 112, 1, 1], [1, 112, 112, 32]]) ==========
+    ========== Task 16  (workload key: ["2ca148ecea6508ce625f85719021344f", [1, 224, 224, 3], [3, 3, 3, 32], [1, 112, 1, 1], [1, 112, 1, 1], [1, 112, 112, 32]]) ==========
     placeholder = PLACEHOLDER [1, 224, 224, 3]
-    PaddedInput(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 225)) && (i2 >= 1)) && (i2 < 225)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
+    pad_temp(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 225)) && (i2 >= 1)) && (i2 < 225)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
     placeholder = PLACEHOLDER [3, 3, 3, 32]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 112, 1, 1]
-    T_multiply(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3]*placeholder[ax0, ax1, 0, 0])
+    T_multiply(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3]*placeholder[ax0, ax1, 0, 0])
     placeholder = PLACEHOLDER [1, 112, 1, 1]
     T_add(ax0, ax1, ax2, ax3) = (T_multiply[ax0, ax1, ax2, ax3] + placeholder[ax0, ax1, 0, 0])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 17  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 56, 56, 64], [1, 1, 64, 128], [1, 1, 1, 128], [1, 56, 56, 128]]) ==========
+    ========== Task 17  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 56, 56, 64], [1, 1, 64, 128], [1, 1, 1, 128], [1, 56, 56, 128]]) ==========
     placeholder = PLACEHOLDER [1, 56, 56, 64]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 64, 128]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 128]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
     ========== Task 18  (workload key: ["7d44c6e3c81cd80f61ff2265b2bae89a", [1, 1024], [1000, 1024], [1, 1000], [1, 1000]]) ==========
@@ -487,13 +487,13 @@ The task scheduler will just optimize this objective.
     T_add(ax0, ax1, ax2, ax3) = (DepthwiseConv2d[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 21  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 112, 112, 32], [1, 1, 32, 64], [1, 1, 1, 64], [1, 112, 112, 64]]) ==========
+    ========== Task 21  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 112, 112, 32], [1, 1, 32, 64], [1, 1, 1, 64], [1, 112, 112, 64]]) ==========
     placeholder = PLACEHOLDER [1, 112, 112, 32]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 32, 64]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 64]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
 
diff --git a/docs/_sources/how_to/tune_with_autoscheduler/tune_network_cuda.rst.txt b/docs/_sources/how_to/tune_with_autoscheduler/tune_network_cuda.rst.txt
index 2bb8990..9a16fda 100644
--- a/docs/_sources/how_to/tune_with_autoscheduler/tune_network_cuda.rst.txt
+++ b/docs/_sources/how_to/tune_with_autoscheduler/tune_network_cuda.rst.txt
@@ -182,11 +182,11 @@ The task scheduler will just optimize this objective.
  .. code-block:: none
 
     Extract tasks...
-    ========== Task 0  (workload key: ["7006235cfc29b73be524cf390ed5a977", [1, 56, 56, 64], [1, 1, 64, 64], [1, 56, 56, 64]]) ==========
+    ========== Task 0  (workload key: ["8654f16aeddf785bad9f028164b3a48d", [1, 56, 56, 64], [1, 1, 64, 64], [1, 56, 56, 64]]) ==========
     placeholder = PLACEHOLDER [1, 56, 56, 64]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 64, 64]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
 
     ========== Task 1  (workload key: ["c4500b4e2fd04e695c32d2f31bbdc14a", [1, 28, 28, 128], [4, 4, 128, 128], [1, 28, 28, 128], [1, 1, 1, 128], [1, 28, 28, 128]]) ==========
     placeholder = PLACEHOLDER [1, 28, 28, 128]
@@ -205,11 +205,11 @@ The task scheduler will just optimize this objective.
     T_add(ax0, ax1, ax2, ax3) = (T_add[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 2  (workload key: ["f4380bb1dc62422a69ad4a1a9771f927", [1, 56, 56, 64], [1, 1, 64, 128], [1, 28, 28, 128]]) ==========
+    ========== Task 2  (workload key: ["06f578e6519a86e85028eecf4de64b25", [1, 56, 56, 64], [1, 1, 64, 128], [1, 28, 28, 128]]) ==========
     placeholder = PLACEHOLDER [1, 56, 56, 64]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 64, 128]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
 
     ========== Task 3  (workload key: ["b8b52b9be9df6102466a22a014c44c1f", [1, 14, 14, 256], [4, 4, 256, 256], [1, 1, 1, 256], [1, 14, 14, 256]]) ==========
     placeholder = PLACEHOLDER [1, 14, 14, 256]
@@ -270,7 +270,26 @@ The task scheduler will just optimize this objective.
     T_add(ax0, ax1, ax2, ax3) = (conv2d_winograd[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 7  (workload key: ["f3b6c10fcc6ce01ff01add933e4d21e9", [1, 14, 14, 256], [4, 4, 256, 256], [1, 14, 14, 256], [1, 1, 1, 256], [1, 14, 14, 256]]) ==========
+    ========== Task 7  (workload key: ["ad6cecbf5d85cb1cda3c2bb7af170211", [1, 7, 7, 512], [4, 4, 512, 512], [1, 7, 7, 512], [1, 1, 1, 512], [1, 1, 1, 512], [1, 7, 7, 512]]) ==========
+    placeholder = PLACEHOLDER [1, 7, 7, 512]
+    data_pad(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 8)) && (i2 >= 1)) && (i2 < 8)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
+    input_tile(eps, nu, p, ci) = data_pad[floordiv(p, 16), ((floormod(floordiv(p, 4), 4)*2) + eps), ((floormod(p, 4)*2) + nu), ci]
+    B(i, j) = select(((floormod(i, 4) == 3) && (floormod(j, 4) == 3)), 1f, select(((floormod(i, 4) == 3) && (floormod(j, 4) == 2)),  ..(OMITTED).. ormod(i, 4) == 0) && (floormod(j, 4) == 1)), 0f, select(((floormod(i, 4) == 0) && (floormod(j, 4) == 0)), 1f, 0f))))))))))))))))
+    data_pack(eps, nu, p, ci) += ((input_tile[r_a, r_b, p, ci]*B[r_a, eps])*B[r_b, nu])
+    placeholder = PLACEHOLDER [4, 4, 512, 512]
+    bgemm(eps, nu, p, co) += (data_pack[eps, nu, p, ci]*placeholder[eps, nu, co, ci])
+    A(i, j) = select(((floormod(i, 4) == 3) && (floormod(j, 2) == 1)), 1f, select(((floormod(i, 4) == 3) && (floormod(j, 2) == 0)),  ..(OMITTED).. ct(((floormod(i, 4) == 0) && (floormod(j, 2) == 1)), 0f, select(((floormod(i, 4) == 0) && (floormod(j, 2) == 0)), 1f, 0f))))))))
+    inverse(vh, vw, p, co) += ((bgemm[r_a, r_b, p, co]*A[r_a, vh])*A[r_b, vw])
+    conv2d_winograd(n, h, w, co) = inverse[floormod(h, 2), floormod(w, 2), ((((n*4)*4) + (floordiv(h, 2)*4)) + floordiv(w, 2)), co]
+    placeholder = PLACEHOLDER [1, 7, 7, 512]
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_winograd[ax0, ax1, ax2, ax3] + placeholder[ax0, ax1, ax2, ax3])
+    placeholder = PLACEHOLDER [1, 1, 1, 512]
+    T_multiply(ax0, ax1, ax2, ax3) = (T_add[ax0, ax1, ax2, ax3]*placeholder[ax0, 0, 0, ax3])
+    placeholder = PLACEHOLDER [1, 1, 1, 512]
+    T_add(ax0, ax1, ax2, ax3) = (T_multiply[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
+
+    ========== Task 8  (workload key: ["f3b6c10fcc6ce01ff01add933e4d21e9", [1, 14, 14, 256], [4, 4, 256, 256], [1, 14, 14, 256], [1, 1, 1, 256], [1, 14, 14, 256]]) ==========
     placeholder = PLACEHOLDER [1, 14, 14, 256]
     data_pad(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 15)) && (i2 >= 1)) && (i2 < 15)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
     input_tile(eps, nu, p, ci) = data_pad[floordiv(p, 49), ((floormod(floordiv(p, 7), 7)*2) + eps), ((floormod(p, 7)*2) + nu), ci]
@@ -287,32 +306,13 @@ The task scheduler will just optimize this objective.
     T_add(ax0, ax1, ax2, ax3) = (T_add[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 8  (workload key: ["d7b65649a4dd54becea0a52aabbc5af5", [1, 1000], [1, 1000]]) ==========
+    ========== Task 9  (workload key: ["d7b65649a4dd54becea0a52aabbc5af5", [1, 1000], [1, 1000]]) ==========
     placeholder = PLACEHOLDER [1, 1000]
     T_softmax_maxelem(i0) max= placeholder[i0, k]
     T_softmax_exp(i0, i1) = tir.exp((placeholder[i0, i1] - T_softmax_maxelem[i0]))
     T_softmax_expsum(i0) += T_softmax_exp[i0, k]
     T_softmax_norm(i0, i1) = (T_softmax_exp[i0, i1]/T_softmax_expsum[i0])
 
-    ========== Task 9  (workload key: ["ad6cecbf5d85cb1cda3c2bb7af170211", [1, 7, 7, 512], [4, 4, 512, 512], [1, 7, 7, 512], [1, 1, 1, 512], [1, 1, 1, 512], [1, 7, 7, 512]]) ==========
-    placeholder = PLACEHOLDER [1, 7, 7, 512]
-    data_pad(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 8)) && (i2 >= 1)) && (i2 < 8)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
-    input_tile(eps, nu, p, ci) = data_pad[floordiv(p, 16), ((floormod(floordiv(p, 4), 4)*2) + eps), ((floormod(p, 4)*2) + nu), ci]
-    B(i, j) = select(((floormod(i, 4) == 3) && (floormod(j, 4) == 3)), 1f, select(((floormod(i, 4) == 3) && (floormod(j, 4) == 2)),  ..(OMITTED).. ormod(i, 4) == 0) && (floormod(j, 4) == 1)), 0f, select(((floormod(i, 4) == 0) && (floormod(j, 4) == 0)), 1f, 0f))))))))))))))))
-    data_pack(eps, nu, p, ci) += ((input_tile[r_a, r_b, p, ci]*B[r_a, eps])*B[r_b, nu])
-    placeholder = PLACEHOLDER [4, 4, 512, 512]
-    bgemm(eps, nu, p, co) += (data_pack[eps, nu, p, ci]*placeholder[eps, nu, co, ci])
-    A(i, j) = select(((floormod(i, 4) == 3) && (floormod(j, 2) == 1)), 1f, select(((floormod(i, 4) == 3) && (floormod(j, 2) == 0)),  ..(OMITTED).. ct(((floormod(i, 4) == 0) && (floormod(j, 2) == 1)), 0f, select(((floormod(i, 4) == 0) && (floormod(j, 2) == 0)), 1f, 0f))))))))
-    inverse(vh, vw, p, co) += ((bgemm[r_a, r_b, p, co]*A[r_a, vh])*A[r_b, vw])
-    conv2d_winograd(n, h, w, co) = inverse[floormod(h, 2), floormod(w, 2), ((((n*4)*4) + (floordiv(h, 2)*4)) + floordiv(w, 2)), co]
-    placeholder = PLACEHOLDER [1, 7, 7, 512]
-    T_add(ax0, ax1, ax2, ax3) = (conv2d_winograd[ax0, ax1, ax2, ax3] + placeholder[ax0, ax1, ax2, ax3])
-    placeholder = PLACEHOLDER [1, 1, 1, 512]
-    T_multiply(ax0, ax1, ax2, ax3) = (T_add[ax0, ax1, ax2, ax3]*placeholder[ax0, 0, 0, ax3])
-    placeholder = PLACEHOLDER [1, 1, 1, 512]
-    T_add(ax0, ax1, ax2, ax3) = (T_multiply[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
-    T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
-
     ========== Task 10  (workload key: ["69115f188984ae34ede37c3b8ca40b43", [1, 7, 7, 512], [1, 1, 1, 512]]) ==========
     placeholder = PLACEHOLDER [1, 7, 7, 512]
     tensor(ax0, ax1, ax2, ax3) += placeholder[ax0, ((ax1*7) + rv0), ((ax2*7) + rv1), ax3]
@@ -333,19 +333,19 @@ The task scheduler will just optimize this objective.
     T_add(ax0, ax1, ax2, ax3) = (conv2d_winograd[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 12  (workload key: ["f4380bb1dc62422a69ad4a1a9771f927", [1, 28, 28, 128], [1, 1, 128, 256], [1, 14, 14, 256]]) ==========
+    ========== Task 12  (workload key: ["06f578e6519a86e85028eecf4de64b25", [1, 28, 28, 128], [1, 1, 128, 256], [1, 14, 14, 256]]) ==========
     placeholder = PLACEHOLDER [1, 28, 28, 128]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 128, 256]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
 
-    ========== Task 13  (workload key: ["12b88bedece6984af589a28b43e0f3c4", [1, 14, 14, 256], [3, 3, 256, 512], [1, 1, 1, 512], [1, 7, 7, 512]]) ==========
+    ========== Task 13  (workload key: ["96daaa9daa1b41bc383b7c05ce8b58de", [1, 14, 14, 256], [3, 3, 256, 512], [1, 1, 1, 512], [1, 7, 7, 512]]) ==========
     placeholder = PLACEHOLDER [1, 14, 14, 256]
-    PaddedInput(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 15)) && (i2 >= 1)) && (i2 < 15)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
+    pad_temp(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 15)) && (i2 >= 1)) && (i2 < 15)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
     placeholder = PLACEHOLDER [3, 3, 256, 512]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 512]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
     ========== Task 14  (workload key: ["dac19035dd5fe9424ee8617421b9c817", [1, 28, 28, 128], [4, 4, 128, 128], [1, 28, 28, 128], [1, 28, 28, 128]]) ==========
@@ -362,13 +362,13 @@ The task scheduler will just optimize this objective.
     placeholder = PLACEHOLDER [1, 28, 28, 128]
     T_add(ax0, ax1, ax2, ax3) = (conv2d_winograd[ax0, ax1, ax2, ax3] + placeholder[ax0, ax1, ax2, ax3])
 
-    ========== Task 15  (workload key: ["12b88bedece6984af589a28b43e0f3c4", [1, 28, 28, 128], [3, 3, 128, 256], [1, 1, 1, 256], [1, 14, 14, 256]]) ==========
+    ========== Task 15  (workload key: ["96daaa9daa1b41bc383b7c05ce8b58de", [1, 28, 28, 128], [3, 3, 128, 256], [1, 1, 1, 256], [1, 14, 14, 256]]) ==========
     placeholder = PLACEHOLDER [1, 28, 28, 128]
-    PaddedInput(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 29)) && (i2 >= 1)) && (i2 < 29)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
+    pad_temp(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 29)) && (i2 >= 1)) && (i2 < 29)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
     placeholder = PLACEHOLDER [3, 3, 128, 256]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 256]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
     ========== Task 16  (workload key: ["1e3c4211ffd2f2db91078ae4d04b779d", [1, 56, 56, 64], [6, 6, 64, 64], [1, 56, 56, 64], [1, 1, 1, 64], [1, 56, 56, 64]]) ==========
@@ -388,13 +388,13 @@ The task scheduler will just optimize this objective.
     T_add(ax0, ax1, ax2, ax3) = (T_add[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 17  (workload key: ["12b88bedece6984af589a28b43e0f3c4", [1, 224, 224, 3], [7, 7, 3, 64], [1, 1, 1, 64], [1, 112, 112, 64]]) ==========
+    ========== Task 17  (workload key: ["96daaa9daa1b41bc383b7c05ce8b58de", [1, 224, 224, 3], [7, 7, 3, 64], [1, 1, 1, 64], [1, 112, 112, 64]]) ==========
     placeholder = PLACEHOLDER [1, 224, 224, 3]
-    PaddedInput(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 3) && (i1 < 227)) && (i2 >= 3)) && (i2 < 227)), placeholder[i0, (i1 - 3), (i2 - 3), i3], 0f)
+    pad_temp(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 3) && (i1 < 227)) && (i2 >= 3)) && (i2 < 227)), placeholder[i0, (i1 - 3), (i2 - 3), i3], 0f)
     placeholder = PLACEHOLDER [7, 7, 3, 64]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 64]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
     ========== Task 18  (workload key: ["3ea73fb9b0364374730d09e068821f95", [1, 56, 56, 64], [6, 6, 64, 64], [1, 56, 56, 64], [1, 56, 56, 64]]) ==========
@@ -433,11 +433,11 @@ The task scheduler will just optimize this objective.
     T_add(ax0, ax1, ax2, ax3) = (tensor[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 21  (workload key: ["f4380bb1dc62422a69ad4a1a9771f927", [1, 14, 14, 256], [1, 1, 256, 512], [1, 7, 7, 512]]) ==========
+    ========== Task 21  (workload key: ["06f578e6519a86e85028eecf4de64b25", [1, 14, 14, 256], [1, 1, 256, 512], [1, 7, 7, 512]]) ==========
     placeholder = PLACEHOLDER [1, 14, 14, 256]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 256, 512]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
 
     ========== Task 22  (workload key: ["7d44c6e3c81cd80f61ff2265b2bae89a", [1, 512], [1000, 512], [1, 1000], [1, 1000]]) ==========
     placeholder = PLACEHOLDER [1, 512]
@@ -446,13 +446,13 @@ The task scheduler will just optimize this objective.
     placeholder = PLACEHOLDER [1, 1000]
     T_add(ax0, ax1) = (T_matmul_NT[ax0, ax1] + placeholder[ax0, ax1])
 
-    ========== Task 23  (workload key: ["12b88bedece6984af589a28b43e0f3c4", [1, 56, 56, 64], [3, 3, 64, 128], [1, 1, 1, 128], [1, 28, 28, 128]]) ==========
+    ========== Task 23  (workload key: ["96daaa9daa1b41bc383b7c05ce8b58de", [1, 56, 56, 64], [3, 3, 64, 128], [1, 1, 1, 128], [1, 28, 28, 128]]) ==========
     placeholder = PLACEHOLDER [1, 56, 56, 64]
-    PaddedInput(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 57)) && (i2 >= 1)) && (i2 < 57)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
+    pad_temp(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 57)) && (i2 >= 1)) && (i2 < 57)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
     placeholder = PLACEHOLDER [3, 3, 64, 128]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 128]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
 
@@ -614,7 +614,7 @@ so we can read the log file and load the best schedules.
     Evaluate inference time cost...
     Execution time summary:
      mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)  
-       1.6781       1.6775       1.6800       1.6768       0.0014   
+       9.7203       9.7139       9.7465       9.7004       0.0194   
                
 
 
diff --git a/docs/_sources/how_to/tune_with_autoscheduler/tune_network_mali.rst.txt b/docs/_sources/how_to/tune_with_autoscheduler/tune_network_mali.rst.txt
index b05d286..987c85e 100644
--- a/docs/_sources/how_to/tune_with_autoscheduler/tune_network_mali.rst.txt
+++ b/docs/_sources/how_to/tune_with_autoscheduler/tune_network_mali.rst.txt
@@ -207,22 +207,22 @@ The task scheduler will just optimize this objective.
  .. code-block:: none
 
     Extract tasks...
-    ========== Task 0  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 7, 7, 1024], [1, 1, 1024, 1024], [1, 1, 1, 1024], [1, 7, 7, 1024]]) ==========
+    ========== Task 0  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 7, 7, 1024], [1, 1, 1024, 1024], [1, 1, 1, 1024], [1, 7, 7, 1024]]) ==========
     placeholder = PLACEHOLDER [1, 7, 7, 1024]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 1024, 1024]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 1024]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 1  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 14, 14, 256], [1, 1, 256, 512], [1, 1, 1, 512], [1, 14, 14, 512]]) ==========
+    ========== Task 1  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 14, 14, 256], [1, 1, 256, 512], [1, 1, 1, 512], [1, 14, 14, 512]]) ==========
     placeholder = PLACEHOLDER [1, 14, 14, 256]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 256, 512]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 512]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
     ========== Task 2  (workload key: ["06fce76bd84cb904eee50b905ca9449a", [1, 28, 28, 256], [3, 3, 256, 1], [1, 1, 1, 256], [1, 28, 28, 256]]) ==========
@@ -234,13 +234,13 @@ The task scheduler will just optimize this objective.
     T_add(ax0, ax1, ax2, ax3) = (DepthwiseConv2d[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 3  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 28, 28, 128], [1, 1, 128, 256], [1, 1, 1, 256], [1, 28, 28, 256]]) ==========
+    ========== Task 3  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 28, 28, 128], [1, 1, 128, 256], [1, 1, 1, 256], [1, 28, 28, 256]]) ==========
     placeholder = PLACEHOLDER [1, 28, 28, 128]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 128, 256]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 256]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
     ========== Task 4  (workload key: ["d7b65649a4dd54becea0a52aabbc5af5", [1, 1000], [1, 1000]]) ==========
@@ -255,13 +255,13 @@ The task scheduler will just optimize this objective.
     tensor(ax0, ax1, ax2, ax3) += placeholder[ax0, ((ax1*7) + rv0), ((ax2*7) + rv1), ax3]
     tensor(ax0, ax1, ax2, ax3) = (tensor[ax0, ax1, ax2, ax3]/(float32((select((bool)1, ((ax1 + 1)*7), (((ax1 + 1)*7) + 1)) - (ax1*7)))*float32((select((bool)1, ((ax2 + 1)*7), (((ax2 + 1)*7) + 1)) - (ax2*7)))))
 
-    ========== Task 6  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 7, 7, 512], [1, 1, 512, 1024], [1, 1, 1, 1024], [1, 7, 7, 1024]]) ==========
+    ========== Task 6  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 7, 7, 512], [1, 1, 512, 1024], [1, 1, 1, 1024], [1, 7, 7, 1024]]) ==========
     placeholder = PLACEHOLDER [1, 7, 7, 512]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 512, 1024]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 1024]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
     ========== Task 7  (workload key: ["c87ba68bc180312f5716af09a77ca15b", [1, 56, 56, 128], [3, 3, 128, 1], [1, 1, 1, 128], [1, 28, 28, 128]]) ==========
@@ -309,22 +309,22 @@ The task scheduler will just optimize this objective.
     T_add(ax0, ax1, ax2, ax3) = (DepthwiseConv2d[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 12  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 56, 56, 64], [1, 1, 64, 128], [1, 1, 1, 128], [1, 56, 56, 128]]) ==========
+    ========== Task 12  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 56, 56, 64], [1, 1, 64, 128], [1, 1, 1, 128], [1, 56, 56, 128]]) ==========
     placeholder = PLACEHOLDER [1, 56, 56, 64]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 64, 128]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 128]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 13  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 56, 56, 128], [1, 1, 128, 128], [1, 1, 1, 128], [1, 56, 56, 128]]) ==========
+    ========== Task 13  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 56, 56, 128], [1, 1, 128, 128], [1, 1, 1, 128], [1, 56, 56, 128]]) ==========
     placeholder = PLACEHOLDER [1, 56, 56, 128]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 128, 128]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 128]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
     ========== Task 14  (workload key: ["06fce76bd84cb904eee50b905ca9449a", [1, 112, 112, 32], [3, 3, 32, 1], [1, 1, 1, 32], [1, 112, 112, 32]]) ==========
@@ -336,33 +336,33 @@ The task scheduler will just optimize this objective.
     T_add(ax0, ax1, ax2, ax3) = (DepthwiseConv2d[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 15  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 28, 28, 256], [1, 1, 256, 256], [1, 1, 1, 256], [1, 28, 28, 256]]) ==========
+    ========== Task 15  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 28, 28, 256], [1, 1, 256, 256], [1, 1, 1, 256], [1, 28, 28, 256]]) ==========
     placeholder = PLACEHOLDER [1, 28, 28, 256]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 256, 256]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 256]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 16  (workload key: ["98418eda02701ddd175ad50e364a0638", [1, 224, 224, 3], [3, 3, 3, 32], [1, 112, 1, 1], [1, 112, 1, 1], [1, 112, 112, 32]]) ==========
+    ========== Task 16  (workload key: ["2ca148ecea6508ce625f85719021344f", [1, 224, 224, 3], [3, 3, 3, 32], [1, 112, 1, 1], [1, 112, 1, 1], [1, 112, 112, 32]]) ==========
     placeholder = PLACEHOLDER [1, 224, 224, 3]
-    PaddedInput(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 225)) && (i2 >= 1)) && (i2 < 225)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
+    pad_temp(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 225)) && (i2 >= 1)) && (i2 < 225)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
     placeholder = PLACEHOLDER [3, 3, 3, 32]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 112, 1, 1]
-    T_multiply(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3]*placeholder[ax0, ax1, 0, 0])
+    T_multiply(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3]*placeholder[ax0, ax1, 0, 0])
     placeholder = PLACEHOLDER [1, 112, 1, 1]
     T_add(ax0, ax1, ax2, ax3) = (T_multiply[ax0, ax1, ax2, ax3] + placeholder[ax0, ax1, 0, 0])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 17  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 14, 14, 512], [1, 1, 512, 512], [1, 1, 1, 512], [1, 14, 14, 512]]) ==========
+    ========== Task 17  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 14, 14, 512], [1, 1, 512, 512], [1, 1, 1, 512], [1, 14, 14, 512]]) ==========
     placeholder = PLACEHOLDER [1, 14, 14, 512]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 512, 512]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 512]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
     ========== Task 18  (workload key: ["7d44c6e3c81cd80f61ff2265b2bae89a", [1, 1024], [1000, 1024], [1, 1000], [1, 1000]]) ==========
@@ -390,13 +390,13 @@ The task scheduler will just optimize this objective.
     T_add(ax0, ax1, ax2, ax3) = (DepthwiseConv2d[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 21  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 112, 112, 32], [1, 1, 32, 64], [1, 1, 1, 64], [1, 112, 112, 64]]) ==========
+    ========== Task 21  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 112, 112, 32], [1, 1, 32, 64], [1, 1, 1, 64], [1, 112, 112, 64]]) ==========
     placeholder = PLACEHOLDER [1, 112, 112, 32]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 32, 64]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 64]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
 
diff --git a/docs/_sources/how_to/tune_with_autoscheduler/tune_network_x86.rst.txt b/docs/_sources/how_to/tune_with_autoscheduler/tune_network_x86.rst.txt
index 6e30882..0b08372 100644
--- a/docs/_sources/how_to/tune_with_autoscheduler/tune_network_x86.rst.txt
+++ b/docs/_sources/how_to/tune_with_autoscheduler/tune_network_x86.rst.txt
@@ -205,45 +205,45 @@ The task scheduler will just optimize this objective.
 
     Get model...
     Extract tasks...
-    ========== Task 0  (workload key: ["7006235cfc29b73be524cf390ed5a977", [1, 56, 56, 64], [1, 1, 64, 256], [1, 56, 56, 256]]) ==========
+    ========== Task 0  (workload key: ["8654f16aeddf785bad9f028164b3a48d", [1, 56, 56, 64], [1, 1, 64, 256], [1, 56, 56, 256]]) ==========
     placeholder = PLACEHOLDER [1, 56, 56, 64]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 64, 256]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
 
-    ========== Task 1  (workload key: ["1b524af89dd867d26059e1f621cf987c", [1, 14, 14, 256], [1, 1, 256, 1024], [1, 14, 14, 1024], [1, 1, 1, 1024], [1, 14, 14, 1024]]) ==========
+    ========== Task 1  (workload key: ["b9a4f9bd1416ba25810cb3de27628ace", [1, 14, 14, 256], [1, 1, 256, 1024], [1, 14, 14, 1024], [1, 1, 1, 1024], [1, 14, 14, 1024]]) ==========
     placeholder = PLACEHOLDER [1, 14, 14, 256]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 256, 1024]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 14, 14, 1024]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, ax1, ax2, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, ax1, ax2, ax3])
     placeholder = PLACEHOLDER [1, 1, 1, 1024]
     T_add(ax0, ax1, ax2, ax3) = (T_add[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 2  (workload key: ["1cc666833c122282e3fcf3595901b12b", [1, 14, 14, 256], [1, 1, 256, 1024], [1, 14, 14, 1024], [1, 14, 14, 1024]]) ==========
+    ========== Task 2  (workload key: ["12cb81d4ad0a81be02dedf09d1ac8391", [1, 14, 14, 256], [1, 1, 256, 1024], [1, 14, 14, 1024], [1, 14, 14, 1024]]) ==========
     placeholder = PLACEHOLDER [1, 14, 14, 256]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 256, 1024]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 14, 14, 1024]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, ax1, ax2, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, ax1, ax2, ax3])
 
-    ========== Task 3  (workload key: ["de7d1695278cf52778b038e6573d7626", [1, 14, 14, 1024], [1, 1, 1024, 512], [1, 1, 1, 512], [1, 7, 7, 512]]) ==========
+    ========== Task 3  (workload key: ["56af7508fbcdf6d851892b1e8434667b", [1, 14, 14, 1024], [1, 1, 1024, 512], [1, 1, 1, 512], [1, 7, 7, 512]]) ==========
     placeholder = PLACEHOLDER [1, 14, 14, 1024]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 1024, 512]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 512]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 4  (workload key: ["f4380bb1dc62422a69ad4a1a9771f927", [1, 56, 56, 256], [1, 1, 256, 512], [1, 28, 28, 512]]) ==========
+    ========== Task 4  (workload key: ["06f578e6519a86e85028eecf4de64b25", [1, 56, 56, 256], [1, 1, 256, 512], [1, 28, 28, 512]]) ==========
     placeholder = PLACEHOLDER [1, 56, 56, 256]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 256, 512]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
 
     ========== Task 5  (workload key: ["c68f92478eb18145106184c587d212b6", [1, 14, 14, 256], [6, 6, 256, 256], [1, 1, 1, 256], [1, 14, 14, 256]]) ==========
     placeholder = PLACEHOLDER [1, 14, 14, 256]
@@ -260,30 +260,30 @@ The task scheduler will just optimize this objective.
     T_add(ax0, ax1, ax2, ax3) = (conv2d_winograd[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 6  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 14, 14, 1024], [1, 1, 1024, 256], [1, 1, 1, 256], [1, 14, 14, 256]]) ==========
+    ========== Task 6  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 14, 14, 1024], [1, 1, 1024, 256], [1, 1, 1, 256], [1, 14, 14, 256]]) ==========
     placeholder = PLACEHOLDER [1, 14, 14, 1024]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 1024, 256]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 256]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 7  (workload key: ["1cc666833c122282e3fcf3595901b12b", [1, 28, 28, 128], [1, 1, 128, 512], [1, 28, 28, 512], [1, 28, 28, 512]]) ==========
+    ========== Task 7  (workload key: ["12cb81d4ad0a81be02dedf09d1ac8391", [1, 28, 28, 128], [1, 1, 128, 512], [1, 28, 28, 512], [1, 28, 28, 512]]) ==========
     placeholder = PLACEHOLDER [1, 28, 28, 128]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 128, 512]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 28, 28, 512]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, ax1, ax2, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, ax1, ax2, ax3])
 
-    ========== Task 8  (workload key: ["1cc666833c122282e3fcf3595901b12b", [1, 56, 56, 64], [1, 1, 64, 256], [1, 56, 56, 256], [1, 56, 56, 256]]) ==========
+    ========== Task 8  (workload key: ["12cb81d4ad0a81be02dedf09d1ac8391", [1, 56, 56, 64], [1, 1, 64, 256], [1, 56, 56, 256], [1, 56, 56, 256]]) ==========
     placeholder = PLACEHOLDER [1, 56, 56, 64]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 64, 256]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 56, 56, 256]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, ax1, ax2, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, ax1, ax2, ax3])
 
     ========== Task 9  (workload key: ["ecec634b4882c5731f86cce3109db636", [1, 28, 28, 128], [6, 6, 128, 128], [1, 1, 1, 128], [1, 28, 28, 128]]) ==========
     placeholder = PLACEHOLDER [1, 28, 28, 128]
@@ -312,132 +312,132 @@ The task scheduler will just optimize this objective.
     tensor(ax0, ax1, ax2, ax3) += placeholder[ax0, ((ax1*7) + rv0), ((ax2*7) + rv1), ax3]
     tensor(ax0, ax1, ax2, ax3) = (tensor[ax0, ax1, ax2, ax3]/(float32((select((bool)1, ((ax1 + 1)*7), (((ax1 + 1)*7) + 1)) - (ax1*7)))*float32((select((bool)1, ((ax2 + 1)*7), (((ax2 + 1)*7) + 1)) - (ax2*7)))))
 
-    ========== Task 12  (workload key: ["1cc666833c122282e3fcf3595901b12b", [1, 7, 7, 512], [1, 1, 512, 2048], [1, 7, 7, 2048], [1, 7, 7, 2048]]) ==========
+    ========== Task 12  (workload key: ["12cb81d4ad0a81be02dedf09d1ac8391", [1, 7, 7, 512], [1, 1, 512, 2048], [1, 7, 7, 2048], [1, 7, 7, 2048]]) ==========
     placeholder = PLACEHOLDER [1, 7, 7, 512]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 512, 2048]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 7, 7, 2048]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, ax1, ax2, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, ax1, ax2, ax3])
 
-    ========== Task 13  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 28, 28, 512], [1, 1, 512, 128], [1, 1, 1, 128], [1, 28, 28, 128]]) ==========
+    ========== Task 13  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 28, 28, 512], [1, 1, 512, 128], [1, 1, 1, 128], [1, 28, 28, 128]]) ==========
     placeholder = PLACEHOLDER [1, 28, 28, 512]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 512, 128]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 128]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 14  (workload key: ["de7d1695278cf52778b038e6573d7626", [1, 28, 28, 512], [1, 1, 512, 256], [1, 1, 1, 256], [1, 14, 14, 256]]) ==========
+    ========== Task 14  (workload key: ["56af7508fbcdf6d851892b1e8434667b", [1, 28, 28, 512], [1, 1, 512, 256], [1, 1, 1, 256], [1, 14, 14, 256]]) ==========
     placeholder = PLACEHOLDER [1, 28, 28, 512]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 512, 256]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 256]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 15  (workload key: ["f4380bb1dc62422a69ad4a1a9771f927", [1, 28, 28, 512], [1, 1, 512, 1024], [1, 14, 14, 1024]]) ==========
+    ========== Task 15  (workload key: ["06f578e6519a86e85028eecf4de64b25", [1, 28, 28, 512], [1, 1, 512, 1024], [1, 14, 14, 1024]]) ==========
     placeholder = PLACEHOLDER [1, 28, 28, 512]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 512, 1024]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
 
-    ========== Task 16  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 7, 7, 2048], [1, 1, 2048, 512], [1, 1, 1, 512], [1, 7, 7, 512]]) ==========
+    ========== Task 16  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 7, 7, 2048], [1, 1, 2048, 512], [1, 1, 1, 512], [1, 7, 7, 512]]) ==========
     placeholder = PLACEHOLDER [1, 7, 7, 2048]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 2048, 512]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 512]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 17  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 56, 56, 256], [1, 1, 256, 64], [1, 1, 1, 64], [1, 56, 56, 64]]) ==========
+    ========== Task 17  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 56, 56, 256], [1, 1, 256, 64], [1, 1, 1, 64], [1, 56, 56, 64]]) ==========
     placeholder = PLACEHOLDER [1, 56, 56, 256]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 256, 64]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 64]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 18  (workload key: ["1b524af89dd867d26059e1f621cf987c", [1, 56, 56, 64], [1, 1, 64, 256], [1, 56, 56, 256], [1, 1, 1, 256], [1, 56, 56, 256]]) ==========
+    ========== Task 18  (workload key: ["b9a4f9bd1416ba25810cb3de27628ace", [1, 56, 56, 64], [1, 1, 64, 256], [1, 56, 56, 256], [1, 1, 1, 256], [1, 56, 56, 256]]) ==========
     placeholder = PLACEHOLDER [1, 56, 56, 64]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 64, 256]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 56, 56, 256]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, ax1, ax2, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, ax1, ax2, ax3])
     placeholder = PLACEHOLDER [1, 1, 1, 256]
     T_add(ax0, ax1, ax2, ax3) = (T_add[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 19  (workload key: ["1b524af89dd867d26059e1f621cf987c", [1, 28, 28, 128], [1, 1, 128, 512], [1, 28, 28, 512], [1, 1, 1, 512], [1, 28, 28, 512]]) ==========
+    ========== Task 19  (workload key: ["b9a4f9bd1416ba25810cb3de27628ace", [1, 28, 28, 128], [1, 1, 128, 512], [1, 28, 28, 512], [1, 1, 1, 512], [1, 28, 28, 512]]) ==========
     placeholder = PLACEHOLDER [1, 28, 28, 128]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 128, 512]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 28, 28, 512]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, ax1, ax2, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, ax1, ax2, ax3])
     placeholder = PLACEHOLDER [1, 1, 1, 512]
     T_add(ax0, ax1, ax2, ax3) = (T_add[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 20  (workload key: ["2350d19dc42a0665244368384c66b3a5", [1, 7, 7, 512], [3, 3, 512, 512], [1, 1, 1, 512], [1, 7, 7, 512]]) ==========
+    ========== Task 20  (workload key: ["86551f1a74663d3ceafd5884659d3478", [1, 7, 7, 512], [3, 3, 512, 512], [1, 1, 1, 512], [1, 7, 7, 512]]) ==========
     placeholder = PLACEHOLDER [1, 7, 7, 512]
-    PaddedInput(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 8)) && (i2 >= 1)) && (i2 < 8)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
+    pad_temp(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 8)) && (i2 >= 1)) && (i2 < 8)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
     placeholder = PLACEHOLDER [3, 3, 512, 512]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 512]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 21  (workload key: ["2350d19dc42a0665244368384c66b3a5", [1, 56, 56, 64], [3, 3, 64, 64], [1, 1, 1, 64], [1, 56, 56, 64]]) ==========
+    ========== Task 21  (workload key: ["86551f1a74663d3ceafd5884659d3478", [1, 56, 56, 64], [3, 3, 64, 64], [1, 1, 1, 64], [1, 56, 56, 64]]) ==========
     placeholder = PLACEHOLDER [1, 56, 56, 64]
-    PaddedInput(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 57)) && (i2 >= 1)) && (i2 < 57)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
+    pad_temp(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 1) && (i1 < 57)) && (i2 >= 1)) && (i2 < 57)), placeholder[i0, (i1 - 1), (i2 - 1), i3], 0f)
     placeholder = PLACEHOLDER [3, 3, 64, 64]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 64]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 22  (workload key: ["de7d1695278cf52778b038e6573d7626", [1, 56, 56, 256], [1, 1, 256, 128], [1, 1, 1, 128], [1, 28, 28, 128]]) ==========
+    ========== Task 22  (workload key: ["56af7508fbcdf6d851892b1e8434667b", [1, 56, 56, 256], [1, 1, 256, 128], [1, 1, 1, 128], [1, 28, 28, 128]]) ==========
     placeholder = PLACEHOLDER [1, 56, 56, 256]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 256, 128]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 128]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 23  (workload key: ["875556d12d0be2269206a7775d5296a6", [1, 7, 7, 512], [1, 1, 512, 2048], [1, 7, 7, 2048], [1, 1, 1, 2048], [1, 1, 1, 2048], [1, 7, 7, 2048]]) ==========
+    ========== Task 23  (workload key: ["ff5ea7f814e5c497bb685e7385cf7159", [1, 7, 7, 512], [1, 1, 512, 2048], [1, 7, 7, 2048], [1, 1, 1, 2048], [1, 1, 1, 2048], [1, 7, 7, 2048]]) ==========
     placeholder = PLACEHOLDER [1, 7, 7, 512]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 512, 2048]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 7, 7, 2048]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, ax1, ax2, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, ax1, ax2, ax3])
     placeholder = PLACEHOLDER [1, 1, 1, 2048]
     T_multiply(ax0, ax1, ax2, ax3) = (T_add[ax0, ax1, ax2, ax3]*placeholder[ax0, 0, 0, ax3])
     placeholder = PLACEHOLDER [1, 1, 1, 2048]
     T_add(ax0, ax1, ax2, ax3) = (T_multiply[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 24  (workload key: ["12b88bedece6984af589a28b43e0f3c4", [1, 224, 224, 3], [7, 7, 3, 64], [1, 1, 1, 64], [1, 112, 112, 64]]) ==========
+    ========== Task 24  (workload key: ["96daaa9daa1b41bc383b7c05ce8b58de", [1, 224, 224, 3], [7, 7, 3, 64], [1, 1, 1, 64], [1, 112, 112, 64]]) ==========
     placeholder = PLACEHOLDER [1, 224, 224, 3]
-    PaddedInput(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 3) && (i1 < 227)) && (i2 >= 3)) && (i2 < 227)), placeholder[i0, (i1 - 3), (i2 - 3), i3], 0f)
+    pad_temp(i0, i1, i2, i3) = tir.if_then_else(((((i1 >= 3) && (i1 < 227)) && (i2 >= 3)) && (i2 < 227)), placeholder[i0, (i1 - 3), (i2 - 3), i3], 0f)
     placeholder = PLACEHOLDER [7, 7, 3, 64]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 64]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
-    ========== Task 25  (workload key: ["f4380bb1dc62422a69ad4a1a9771f927", [1, 14, 14, 1024], [1, 1, 1024, 2048], [1, 7, 7, 2048]]) ==========
+    ========== Task 25  (workload key: ["06f578e6519a86e85028eecf4de64b25", [1, 14, 14, 1024], [1, 1, 1024, 2048], [1, 7, 7, 2048]]) ==========
     placeholder = PLACEHOLDER [1, 14, 14, 1024]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 1024, 2048]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, ((yy*2) + ry), ((xx*2) + rx), rc]*placeholder[ry, rx, rc, ff])
 
     ========== Task 26  (workload key: ["64b98c71af70a904fdbb81d7d4188d84", [1, 112, 112, 64], [1, 1, 1, 64], [1, 56, 56, 64]]) ==========
     placeholder = PLACEHOLDER [1, 112, 112, 64]
@@ -454,13 +454,13 @@ The task scheduler will just optimize this objective.
     placeholder = PLACEHOLDER [1, 1000]
     T_add(ax0, ax1) = (T_matmul_NT[ax0, ax1] + placeholder[ax0, ax1])
 
-    ========== Task 28  (workload key: ["6b7583cf23c7c37d3212cad9d06e58c1", [1, 56, 56, 64], [1, 1, 64, 64], [1, 1, 1, 64], [1, 56, 56, 64]]) ==========
+    ========== Task 28  (workload key: ["1037be767e8e18197e87653d81c34558", [1, 56, 56, 64], [1, 1, 64, 64], [1, 1, 1, 64], [1, 56, 56, 64]]) ==========
     placeholder = PLACEHOLDER [1, 56, 56, 64]
-    PaddedInput(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
+    pad_temp(i0, i1, i2, i3) = placeholder[i0, i1, i2, i3]
     placeholder = PLACEHOLDER [1, 1, 64, 64]
-    Conv2dOutput(nn, yy, xx, ff) += (PaddedInput[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
+    conv2d_nhwc(nn, yy, xx, ff) += (pad_temp[nn, (yy + ry), (xx + rx), rc]*placeholder[ry, rx, rc, ff])
     placeholder = PLACEHOLDER [1, 1, 1, 64]
-    T_add(ax0, ax1, ax2, ax3) = (Conv2dOutput[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
+    T_add(ax0, ax1, ax2, ax3) = (conv2d_nhwc[ax0, ax1, ax2, ax3] + placeholder[ax0, 0, 0, ax3])
     T_relu(ax0, ax1, ax2, ax3) = max(T_add[ax0, ax1, ax2, ax3], 0f)
 
 
@@ -633,7 +633,7 @@ so we can read the log file and load the best schedules.
     Evaluate inference time cost...
     Execution time summary:
      mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)  
-      561.6075     561.6978     561.7312     561.3936      0.1519   
+      723.3195     725.0324     729.4568     715.4694      5.8373   
                
 
 
@@ -656,6 +656,11 @@ Other Tips
    with :any:`auto_scheduler.RPCRunner`.
 
 
+.. rst-class:: sphx-glr-timing
+
+   **Total running time of the script:** ( 1 minutes  17.218 seconds)
+
+
 .. _sphx_glr_download_how_to_tune_with_autoscheduler_tune_network_x86.py:
 
 
diff --git a/docs/_sources/how_to/tune_with_autoscheduler/tune_sparse_x86.rst.txt b/docs/_sources/how_to/tune_with_autoscheduler/tune_sparse_x86.rst.txt
index 9d5807a..831b034 100644
--- a/docs/_sources/how_to/tune_with_autoscheduler/tune_sparse_x86.rst.txt
+++ b/docs/_sources/how_to/tune_with_autoscheduler/tune_sparse_x86.rst.txt
@@ -330,6 +330,7 @@ file and apply it.
 
 
 
+
 We can lower the schedule to see the IR after auto-scheduling.
 The auto-scheduler correctly performs optimizations including multi-level tiling,
 layout transformation, parallelization, vectorization, unrolling, and operator fusion.
@@ -355,56 +356,35 @@ layout transformation, parallelization, vectorization, unrolling, and operator f
     @main = primfn(placeholder_5: handle, placeholder_6: handle, placeholder_7: handle, placeholder_8: handle, placeholder_9: handle, compute_1: handle) -> ()
       attr = {"from_legacy_te_schedule": True, "global_symbol": "main", "tir.noalias": True}
       buffers = {placeholder_3: Buffer(placeholder_10: Pointer(float32), float32, [4916, 16, 1], []),
-                 placeholder_4: Buffer(placeholder_11: Pointer(int32), int32, [33], []),
+                 placeholder_4: Buffer(placeholder_11: Pointer(int32), int32, [4916], []),
                  compute: Buffer(compute_2: Pointer(float32), float32, [128, 512], []),
-                 placeholder_2: Buffer(placeholder_12: Pointer(int32), int32, [4916], []),
+                 placeholder_2: Buffer(placeholder_12: Pointer(float32), float32, [128, 512], []),
                  placeholder: Buffer(placeholder_13: Pointer(float32), float32, [128, 256], []),
-                 placeholder_1: Buffer(placeholder_14: Pointer(float32), float32, [128, 512], [])}
-      buffer_map = {placeholder_5: placeholder, placeholder_9: placeholder_1, placeholder_7: placeholder_2, compute_1: compute, placeholder_6: placeholder_3, placeholder_8: placeholder_4} {
+                 placeholder_1: Buffer(placeholder_14: Pointer(int32), int32, [33], [])}
+      buffer_map = {placeholder_5: placeholder, placeholder_8: placeholder_1, placeholder_9: placeholder_2, compute_1: compute, placeholder_6: placeholder_3, placeholder_7: placeholder_4} {
       for (i0.outer.i1.outer.fused: int32, 0, 32) "parallel" {
         allocate(compute_3: Pointer(global float32), float32, [2048]), storage_scope = global {
-          for (i.outer.inner: int32, 0, 2) {
+          for (nb_j.inner: int32, 0, 2) {
             for (i.inner.init: int32, 0, 64) {
-              compute_3[((i.outer.inner*1024) + (i.inner.init*16))] = 0f32
-              compute_3[(((i.outer.inner*1024) + (i.inner.init*16)) + 1)] = 0f32
-              compute_3[(((i.outer.inner*1024) + (i.inner.init*16)) + 2)] = 0f32
-              compute_3[(((i.outer.inner*1024) + (i.inner.init*16)) + 3)] = 0f32
-              compute_3[(((i.outer.inner*1024) + (i.inner.init*16)) + 4)] = 0f32
-              compute_3[(((i.outer.inner*1024) + (i.inner.init*16)) + 5)] = 0f32
-              compute_3[(((i.outer.inner*1024) + (i.inner.init*16)) + 6)] = 0f32
-              compute_3[(((i.outer.inner*1024) + (i.inner.init*16)) + 7)] = 0f32
-              compute_3[(((i.outer.inner*1024) + (i.inner.init*16)) + 8)] = 0f32
-              compute_3[(((i.outer.inner*1024) + (i.inner.init*16)) + 9)] = 0f32
-              compute_3[(((i.outer.inner*1024) + (i.inner.init*16)) + 10)] = 0f32
-              compute_3[(((i.outer.inner*1024) + (i.inner.init*16)) + 11)] = 0f32
-              compute_3[(((i.outer.inner*1024) + (i.inner.init*16)) + 12)] = 0f32
-              compute_3[(((i.outer.inner*1024) + (i.inner.init*16)) + 13)] = 0f32
-              compute_3[(((i.outer.inner*1024) + (i.inner.init*16)) + 14)] = 0f32
-              compute_3[(((i.outer.inner*1024) + (i.inner.init*16)) + 15)] = 0f32
+              for (j.init: int32, 0, 16) {
+                compute_3[(((i.inner.init*32) + (nb_j.inner*16)) + j.init)] = 0f32
+              }
             }
-            for (elem_idx: int32, 0, ((int32*)placeholder_11[(i0.outer.i1.outer.fused + 1)] - (int32*)placeholder_11[i0.outer.i1.outer.fused])) {
+            for (elem_idx: int32, 0, let cse_var_1: int32 = ((floormod(i0.outer.i1.outer.fused, 16)*2) + nb_j.inner) in ((int32*)placeholder_14[(cse_var_1 + 1)] - (int32*)placeholder_14[cse_var_1])) {
               for (i.inner: int32, 0, 64) {
-                compute_3[((i.outer.inner*1024) + (i.inner*16))] = ((float32*)compute_3[((i.outer.inner*1024) + (i.inner*16))] + ((float32*)placeholder_10[(((int32*)placeholder_11[i0.outer.i1.outer.fused]*16) + (elem_idx*16))]*max((float32*)placeholder_13[(((i.outer.inner*16384) + (i.inner*256)) + (int32*)placeholder_12[((int32*)placeholder_11[i0.outer.i1.outer.fused] + elem_idx)])], 0f32)))
-                compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 1)] = ((float32*)compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 1)] + ((float32*)placeholder_10[((((int32*)placeholder_11[i0.outer.i1.outer.fused]*16) + (elem_idx*16)) + 1)]*max((float32*)placeholder_13[(((i.outer.inner*16384) + (i.inner*256)) + (int32*)placeholder_12[((int32*)placeholder_11[i0.outer.i1.outer.fused] + elem_idx)])], 0f32)))
-                compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 2)] = ((float32*)compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 2)] + ((float32*)placeholder_10[((((int32*)placeholder_11[i0.outer.i1.outer.fused]*16) + (elem_idx*16)) + 2)]*max((float32*)placeholder_13[(((i.outer.inner*16384) + (i.inner*256)) + (int32*)placeholder_12[((int32*)placeholder_11[i0.outer.i1.outer.fused] + elem_idx)])], 0f32)))
-                compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 3)] = ((float32*)compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 3)] + ((float32*)placeholder_10[((((int32*)placeholder_11[i0.outer.i1.outer.fused]*16) + (elem_idx*16)) + 3)]*max((float32*)placeholder_13[(((i.outer.inner*16384) + (i.inner*256)) + (int32*)placeholder_12[((int32*)placeholder_11[i0.outer.i1.outer.fused] + elem_idx)])], 0f32)))
-                compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 4)] = ((float32*)compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 4)] + ((float32*)placeholder_10[((((int32*)placeholder_11[i0.outer.i1.outer.fused]*16) + (elem_idx*16)) + 4)]*max((float32*)placeholder_13[(((i.outer.inner*16384) + (i.inner*256)) + (int32*)placeholder_12[((int32*)placeholder_11[i0.outer.i1.outer.fused] + elem_idx)])], 0f32)))
-                compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 5)] = ((float32*)compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 5)] + ((float32*)placeholder_10[((((int32*)placeholder_11[i0.outer.i1.outer.fused]*16) + (elem_idx*16)) + 5)]*max((float32*)placeholder_13[(((i.outer.inner*16384) + (i.inner*256)) + (int32*)placeholder_12[((int32*)placeholder_11[i0.outer.i1.outer.fused] + elem_idx)])], 0f32)))
-                compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 6)] = ((float32*)compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 6)] + ((float32*)placeholder_10[((((int32*)placeholder_11[i0.outer.i1.outer.fused]*16) + (elem_idx*16)) + 6)]*max((float32*)placeholder_13[(((i.outer.inner*16384) + (i.inner*256)) + (int32*)placeholder_12[((int32*)placeholder_11[i0.outer.i1.outer.fused] + elem_idx)])], 0f32)))
-                compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 7)] = ((float32*)compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 7)] + ((float32*)placeholder_10[((((int32*)placeholder_11[i0.outer.i1.outer.fused]*16) + (elem_idx*16)) + 7)]*max((float32*)placeholder_13[(((i.outer.inner*16384) + (i.inner*256)) + (int32*)placeholder_12[((int32*)placeholder_11[i0.outer.i1.outer.fused] + elem_idx)])], 0f32)))
-                compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 8)] = ((float32*)compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 8)] + ((float32*)placeholder_10[((((int32*)placeholder_11[i0.outer.i1.outer.fused]*16) + (elem_idx*16)) + 8)]*max((float32*)placeholder_13[(((i.outer.inner*16384) + (i.inner*256)) + (int32*)placeholder_12[((int32*)placeholder_11[i0.outer.i1.outer.fused] + elem_idx)])], 0f32)))
-                compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 9)] = ((float32*)compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 9)] + ((float32*)placeholder_10[((((int32*)placeholder_11[i0.outer.i1.outer.fused]*16) + (elem_idx*16)) + 9)]*max((float32*)placeholder_13[(((i.outer.inner*16384) + (i.inner*256)) + (int32*)placeholder_12[((int32*)placeholder_11[i0.outer.i1.outer.fused] + elem_idx)])], 0f32)))
-                compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 10)] = ((float32*)compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 10)] + ((float32*)placeholder_10[((((int32*)placeholder_11[i0.outer.i1.outer.fused]*16) + (elem_idx*16)) + 10)]*max((float32*)placeholder_13[(((i.outer.inner*16384) + (i.inner*256)) + (int32*)placeholder_12[((int32*)placeholder_11[i0.outer.i1.outer.fused] + elem_idx)])], 0f32)))
-                compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 11)] = ((float32*)compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 11)] + ((float32*)placeholder_10[((((int32*)placeholder_11[i0.outer.i1.outer.fused]*16) + (elem_idx*16)) + 11)]*max((float32*)placeholder_13[(((i.outer.inner*16384) + (i.inner*256)) + (int32*)placeholder_12[((int32*)placeholder_11[i0.outer.i1.outer.fused] + elem_idx)])], 0f32)))
-                compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 12)] = ((float32*)compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 12)] + ((float32*)placeholder_10[((((int32*)placeholder_11[i0.outer.i1.outer.fused]*16) + (elem_idx*16)) + 12)]*max((float32*)placeholder_13[(((i.outer.inner*16384) + (i.inner*256)) + (int32*)placeholder_12[((int32*)placeholder_11[i0.outer.i1.outer.fused] + elem_idx)])], 0f32)))
-                compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 13)] = ((float32*)compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 13)] + ((float32*)placeholder_10[((((int32*)placeholder_11[i0.outer.i1.outer.fused]*16) + (elem_idx*16)) + 13)]*max((float32*)placeholder_13[(((i.outer.inner*16384) + (i.inner*256)) + (int32*)placeholder_12[((int32*)placeholder_11[i0.outer.i1.outer.fused] + elem_idx)])], 0f32)))
-                compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 14)] = ((float32*)compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 14)] + ((float32*)placeholder_10[((((int32*)placeholder_11[i0.outer.i1.outer.fused]*16) + (elem_idx*16)) + 14)]*max((float32*)placeholder_13[(((i.outer.inner*16384) + (i.inner*256)) + (int32*)placeholder_12[((int32*)placeholder_11[i0.outer.i1.outer.fused] + elem_idx)])], 0f32)))
-                compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 15)] = ((float32*)compute_3[(((i.outer.inner*1024) + (i.inner*16)) + 15)] + ((float32*)placeholder_10[((((int32*)placeholder_11[i0.outer.i1.outer.fused]*16) + (elem_idx*16)) + 15)]*max((float32*)placeholder_13[(((i.outer.inner*16384) + (i.inner*256)) + (int32*)placeholder_12[((int32*)placeholder_11[i0.outer.i1.outer.fused] + elem_idx)])], 0f32)))
+                for (j: int32, 0, 16) {
+                  let cse_var_3: int32 = ((floormod(i0.outer.i1.outer.fused, 16)*2) + nb_j.inner)
+                  let cse_var_2: int32 = (((i.inner*32) + (nb_j.inner*16)) + j)
+                  compute_3[cse_var_2] = ((float32*)compute_3[cse_var_2] + ((float32*)placeholder_10[((((int32*)placeholder_14[cse_var_3]*16) + (elem_idx*16)) + j)]*max((float32*)placeholder_13[(((floordiv(i0.outer.i1.outer.fused, 16)*16384) + (i.inner*256)) + (int32*)placeholder_11[((int32*)placeholder_14[cse_var_3] + elem_idx)])], 0f32)))
+                }
               }
             }
           }
-          for (i0.inner: int32, 0, 128) {
-            compute_2[ramp(((i0.inner*512) + (i0.outer.i1.outer.fused*16)), 1, 16)] = max(((float32x16*)compute_3[ramp((i0.inner*16), 1, 16)] + (float32x16*)placeholder_14[ramp(((i0.inner*512) + (i0.outer.i1.outer.fused*16)), 1, 16)]), broadcast(0f32, 16))
+          for (i0.inner: int32, 0, 64) {
+            for (i1.inner: int32, 0, 32) {
+              let cse_var_4: int32 = ((((floordiv(i0.outer.i1.outer.fused, 16)*32768) + (i0.inner*512)) + (floormod(i0.outer.i1.outer.fused, 16)*32)) + i1.inner)
+              compute_2[cse_var_4] = max(((float32*)compute_3[((i0.inner*32) + i1.inner)] + (float32*)placeholder_12[cse_var_4]), 0f32)
+            }
           }
         }
       }
@@ -458,7 +438,7 @@ We build the binary and check its correctness and performance.
 
  .. code-block:: none
 
-    Execution time of this operator: 0.999 ms
+    Execution time of this operator: 1.539 ms
 
 
 
diff --git a/docs/_sources/how_to/tune_with_autotvm/sg_execution_times.rst.txt b/docs/_sources/how_to/tune_with_autotvm/sg_execution_times.rst.txt
index 289d00a..9eb9adf 100644
--- a/docs/_sources/how_to/tune_with_autotvm/sg_execution_times.rst.txt
+++ b/docs/_sources/how_to/tune_with_autotvm/sg_execution_times.rst.txt
@@ -5,10 +5,10 @@
 
 Computation times
 =================
-**00:40.869** total execution time for **how_to_tune_with_autotvm** files:
+**00:44.115** total execution time for **how_to_tune_with_autotvm** files:
 
-- **00:40.206**: :ref:`sphx_glr_how_to_tune_with_autotvm_tune_conv2d_cuda.py` (``tune_conv2d_cuda.py``)
-- **00:00.176**: :ref:`sphx_glr_how_to_tune_with_autotvm_tune_relay_x86.py` (``tune_relay_x86.py``)
-- **00:00.164**: :ref:`sphx_glr_how_to_tune_with_autotvm_tune_relay_mobile_gpu.py` (``tune_relay_mobile_gpu.py``)
-- **00:00.162**: :ref:`sphx_glr_how_to_tune_with_autotvm_tune_relay_cuda.py` (``tune_relay_cuda.py``)
-- **00:00.161**: :ref:`sphx_glr_how_to_tune_with_autotvm_tune_relay_arm.py` (``tune_relay_arm.py``)
+- **00:43.277**: :ref:`sphx_glr_how_to_tune_with_autotvm_tune_conv2d_cuda.py` (``tune_conv2d_cuda.py``)
+- **00:00.227**: :ref:`sphx_glr_how_to_tune_with_autotvm_tune_relay_x86.py` (``tune_relay_x86.py``)
+- **00:00.209**: :ref:`sphx_glr_how_to_tune_with_autotvm_tune_relay_mobile_gpu.py` (``tune_relay_mobile_gpu.py``)
+- **00:00.203**: :ref:`sphx_glr_how_to_tune_with_autotvm_tune_relay_cuda.py` (``tune_relay_cuda.py``)
+- **00:00.199**: :ref:`sphx_glr_how_to_tune_with_autotvm_tune_relay_arm.py` (``tune_relay_arm.py``)
diff --git a/docs/_sources/how_to/tune_with_autotvm/tune_conv2d_cuda.rst.txt b/docs/_sources/how_to/tune_with_autotvm/tune_conv2d_cuda.rst.txt
index ac2409a..f6133ce 100644
--- a/docs/_sources/how_to/tune_with_autotvm/tune_conv2d_cuda.rst.txt
+++ b/docs/_sources/how_to/tune_with_autotvm/tune_conv2d_cuda.rst.txt
@@ -241,27 +241,29 @@ for this template
        6 auto_unroll_max_step: OtherOption([0, 512, 1500]) len=3
        7 unroll_explicit: OtherOption([0, 1]) len=2
     )
+    waiting for device...
+    device available
     Get devices for measurement successfully!
-    No: 1   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  24: TVMFuncCall\n        at /home/areusch/ws/tvm3/src/runtime/c_runtime_api.cc:475\n  23: tvm::runtime::PackedFunc::CallPacked(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const\n        at /home/areusch/ws/tvm3/include/tvm/runtime/packed_func.h:1151\n  22: std::function<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()(tvm::runtime::TVMArgs [...]
-    No: 2   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  24: TVMFuncCall\n        at /home/areusch/ws/tvm3/src/runtime/c_runtime_api.cc:475\n  23: tvm::runtime::PackedFunc::CallPacked(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const\n        at /home/areusch/ws/tvm3/include/tvm/runtime/packed_func.h:1151\n  22: std::function<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()(tvm::runtime::TVMArgs [...]
-    No: 3   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  24: TVMFuncCall\n        at /home/areusch/ws/tvm3/src/runtime/c_runtime_api.cc:475\n  23: tvm::runtime::PackedFunc::CallPacked(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const\n        at /home/areusch/ws/tvm3/include/tvm/runtime/packed_func.h:1151\n  22: std::function<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()(tvm::runtime::TVMArgs [...]
-    No: 4   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  24: TVMFuncCall\n        at /home/areusch/ws/tvm3/src/runtime/c_runtime_api.cc:475\n  23: tvm::runtime::PackedFunc::CallPacked(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const\n        at /home/areusch/ws/tvm3/include/tvm/runtime/packed_func.h:1151\n  22: std::function<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()(tvm::runtime::TVMArgs [...]
-    No: 5   GFLOPS: 0.00/0.00       result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  24: TVMFuncCall\n        at /home/areusch/ws/tvm3/src/runtime/c_runtime_api.cc:475\n  23: tvm::runtime::PackedFunc::CallPacked(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const\n        at /home/areusch/ws/tvm3/include/tvm/runtime/packed_func.h:1151\n  22: std::function<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()(tvm::runtime::TVMArgs [...]
-    No: 6   GFLOPS: 135.66/135.66   result: MeasureResult(costs=(0.0017064824406779662,), error_no=MeasureErrorNo.NO_ERROR, all_cost=1.7707798480987549, timestamp=1639589674.3083484)      [('tile_f', [-1, 1, 1, 1]), ('tile_y', [-1, 1, 1, 1]), ('tile_x', [-1, 1, 7, 1]), ('tile_rc', [-1, 4, 4]), ('tile_ry', [-1, 3, 1]), ('tile_rx', [-1, 1, 1]), ('auto_unroll_max_step', 1500), ('unroll_explicit', 0)],None,3754080
-    No: 7   GFLOPS: 0.00/135.66     result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  24: TVMFuncCall\n        at /home/areusch/ws/tvm3/src/runtime/c_runtime_api.cc:475\n  23: tvm::runtime::PackedFunc::CallPacked(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const\n        at /home/areusch/ws/tvm3/include/tvm/runtime/packed_func.h:1151\n  22: std::function<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()(tvm::runtime::TVMArgs [...]
-    No: 8   GFLOPS: 0.00/135.66     result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  24: TVMFuncCall\n        at /home/areusch/ws/tvm3/src/runtime/c_runtime_api.cc:475\n  23: tvm::runtime::PackedFunc::CallPacked(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const\n        at /home/areusch/ws/tvm3/include/tvm/runtime/packed_func.h:1151\n  22: std::function<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()(tvm::runtime::TVMArgs [...]
-    No: 9   GFLOPS: 0.00/135.66     result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  24: TVMFuncCall\n        at /home/areusch/ws/tvm3/src/runtime/c_runtime_api.cc:475\n  23: tvm::runtime::PackedFunc::CallPacked(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const\n        at /home/areusch/ws/tvm3/include/tvm/runtime/packed_func.h:1151\n  22: std::function<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()(tvm::runtime::TVMArgs [...]
-    No: 10  GFLOPS: 0.00/135.66     result: MeasureResult(costs=(TimeoutError(),), error_no=MeasureErrorNo.BUILD_TIMEOUT, all_cost=10, timestamp=1639589669.2889323)        [('tile_f', [-1, 32, 2, 4]), ('tile_y', [-1, 1, 7, 1]), ('tile_x', [-1, 1, 1, 7]), ('tile_rc', [-1, 4, 2]), ('tile_ry', [-1, 1, 1]), ('tile_rx', [-1, 1, 3]), ('auto_unroll_max_step', 1500), ('unroll_explicit', 0)],None,4691833
-    No: 11  GFLOPS: 0.00/135.66     result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  24: TVMFuncCall\n        at /home/areusch/ws/tvm3/src/runtime/c_runtime_api.cc:475\n  23: tvm::runtime::PackedFunc::CallPacked(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const\n        at /home/areusch/ws/tvm3/include/tvm/runtime/packed_func.h:1151\n  22: std::function<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()(tvm::runtime::TVMArgs [...]
-    No: 12  GFLOPS: 0.00/135.66     result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  24: TVMFuncCall\n        at /home/areusch/ws/tvm3/src/runtime/c_runtime_api.cc:475\n  23: tvm::runtime::PackedFunc::CallPacked(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const\n        at /home/areusch/ws/tvm3/include/tvm/runtime/packed_func.h:1151\n  22: std::function<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()(tvm::runtime::TVMArgs [...]
-    No: 13  GFLOPS: 0.00/135.66     result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  24: TVMFuncCall\n        at /home/areusch/ws/tvm3/src/runtime/c_runtime_api.cc:475\n  23: tvm::runtime::PackedFunc::CallPacked(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const\n        at /home/areusch/ws/tvm3/include/tvm/runtime/packed_func.h:1151\n  22: std::function<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()(tvm::runtime::TVMArgs [...]
-    No: 14  GFLOPS: 0.00/135.66     result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  24: TVMFuncCall\n        at /home/areusch/ws/tvm3/src/runtime/c_runtime_api.cc:475\n  23: tvm::runtime::PackedFunc::CallPacked(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const\n        at /home/areusch/ws/tvm3/include/tvm/runtime/packed_func.h:1151\n  22: std::function<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()(tvm::runtime::TVMArgs [...]
-    No: 15  GFLOPS: 0.00/135.66     result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  24: TVMFuncCall\n        at /home/areusch/ws/tvm3/src/runtime/c_runtime_api.cc:475\n  23: tvm::runtime::PackedFunc::CallPacked(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const\n        at /home/areusch/ws/tvm3/include/tvm/runtime/packed_func.h:1151\n  22: std::function<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()(tvm::runtime::TVMArgs [...]
-    No: 16  GFLOPS: 0.00/135.66     result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  24: TVMFuncCall\n        at /home/areusch/ws/tvm3/src/runtime/c_runtime_api.cc:475\n  23: tvm::runtime::PackedFunc::CallPacked(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const\n        at /home/areusch/ws/tvm3/include/tvm/runtime/packed_func.h:1151\n  22: std::function<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()(tvm::runtime::TVMArgs [...]
-    No: 17  GFLOPS: 0.00/135.66     result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  24: TVMFuncCall\n        at /home/areusch/ws/tvm3/src/runtime/c_runtime_api.cc:475\n  23: tvm::runtime::PackedFunc::CallPacked(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const\n        at /home/areusch/ws/tvm3/include/tvm/runtime/packed_func.h:1151\n  22: std::function<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()(tvm::runtime::TVMArgs [...]
-    No: 18  GFLOPS: 0.00/135.66     result: MeasureResult(costs=(InstantiationError('Traceback (most recent call last):\n  24: TVMFuncCall\n        at /home/areusch/ws/tvm3/src/runtime/c_runtime_api.cc:475\n  23: tvm::runtime::PackedFunc::CallPacked(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const\n        at /home/areusch/ws/tvm3/include/tvm/runtime/packed_func.h:1151\n  22: std::function<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()(tvm::runtime::TVMArgs [...]
-    No: 19  GFLOPS: 0.87/135.66     result: MeasureResult(costs=(0.266569387,), error_no=MeasureErrorNo.NO_ERROR, all_cost=7.209880590438843, timestamp=1639589682.7777386) [('tile_f', [-1, 8, 2, 16]), ('tile_y', [-1, 7, 1, 1]), ('tile_x', [-1, 7, 1, 1]), ('tile_rc', [-1, 1, 1]), ('tile_ry', [-1, 1, 1]), ('tile_rx', [-1, 1, 3]), ('auto_unroll_max_step', 0), ('unroll_explicit', 1)],None,6390073
-    No: 20  GFLOPS: 304.34/304.34   result: MeasureResult(costs=(0.0007606542511848341,), error_no=MeasureErrorNo.NO_ERROR, all_cost=1.440046787261963, timestamp=1639589683.789189)        [('tile_f', [-1, 1, 4, 1]), ('tile_y', [-1, 1, 1, 1]), ('tile_x', [-1, 7, 1, 1]), ('tile_rc', [-1, 4, 1]), ('tile_ry', [-1, 1, 1]), ('tile_rx', [-1, 1, 3]), ('auto_unroll_max_step', 1500), ('unroll_explicit', 1)],None,9881539
+    No: 1   GFLOPS: 0.00/0.00       result: MeasureResult(costs=('Traceback (most recent call last):\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 571, in __call__\n    func, arg_info = _build_func_common(measure_input, self.runtime, **kwargs)\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 523, in _build_func_common\n    func = build(s, args, target_host=task.target_host, runtime=runtime)\n  File "/workspace/python/tvm/driver/build_mod [...]
+    No: 2   GFLOPS: 0.00/0.00       result: MeasureResult(costs=('Traceback (most recent call last):\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 571, in __call__\n    func, arg_info = _build_func_common(measure_input, self.runtime, **kwargs)\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 523, in _build_func_common\n    func = build(s, args, target_host=task.target_host, runtime=runtime)\n  File "/workspace/python/tvm/driver/build_mod [...]
+    No: 3   GFLOPS: 0.00/0.00       result: MeasureResult(costs=('Traceback (most recent call last):\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 571, in __call__\n    func, arg_info = _build_func_common(measure_input, self.runtime, **kwargs)\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 523, in _build_func_common\n    func = build(s, args, target_host=task.target_host, runtime=runtime)\n  File "/workspace/python/tvm/driver/build_mod [...]
+    No: 4   GFLOPS: 0.00/0.00       result: MeasureResult(costs=('Traceback (most recent call last):\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 571, in __call__\n    func, arg_info = _build_func_common(measure_input, self.runtime, **kwargs)\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 523, in _build_func_common\n    func = build(s, args, target_host=task.target_host, runtime=runtime)\n  File "/workspace/python/tvm/driver/build_mod [...]
+    No: 5   GFLOPS: 0.00/0.00       result: MeasureResult(costs=('Traceback (most recent call last):\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 571, in __call__\n    func, arg_info = _build_func_common(measure_input, self.runtime, **kwargs)\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 523, in _build_func_common\n    func = build(s, args, target_host=task.target_host, runtime=runtime)\n  File "/workspace/python/tvm/driver/build_mod [...]
+    No: 6   GFLOPS: 61.16/61.16     result: MeasureResult(costs=(0.0037853952666666666,), error_no=MeasureErrorNo.NO_ERROR, all_cost=1.7209014892578125, timestamp=1646086713.4698336)      [('tile_f', [-1, 1, 1, 1]), ('tile_y', [-1, 1, 1, 1]), ('tile_x', [-1, 1, 7, 1]), ('tile_rc', [-1, 4, 4]), ('tile_ry', [-1, 3, 1]), ('tile_rx', [-1, 1, 1]), ('auto_unroll_max_step', 1500), ('unroll_explicit', 0)],None,3754080
+    No: 7   GFLOPS: 0.00/61.16      result: MeasureResult(costs=('Traceback (most recent call last):\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 571, in __call__\n    func, arg_info = _build_func_common(measure_input, self.runtime, **kwargs)\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 523, in _build_func_common\n    func = build(s, args, target_host=task.target_host, runtime=runtime)\n  File "/workspace/python/tvm/driver/build_mod [...]
+    No: 8   GFLOPS: 0.00/61.16      result: MeasureResult(costs=('Traceback (most recent call last):\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 571, in __call__\n    func, arg_info = _build_func_common(measure_input, self.runtime, **kwargs)\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 523, in _build_func_common\n    func = build(s, args, target_host=task.target_host, runtime=runtime)\n  File "/workspace/python/tvm/driver/build_mod [...]
+    No: 9   GFLOPS: 0.00/61.16      result: MeasureResult(costs=('Traceback (most recent call last):\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 571, in __call__\n    func, arg_info = _build_func_common(measure_input, self.runtime, **kwargs)\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 523, in _build_func_common\n    func = build(s, args, target_host=task.target_host, runtime=runtime)\n  File "/workspace/python/tvm/driver/build_mod [...]
+    No: 10  GFLOPS: 0.00/61.16      result: MeasureResult(costs=('Traceback (most recent call last):\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 142, in build\n    res = future.result()\n  File "/usr/lib/python3.6/concurrent/futures/_base.py", line 432, in result\n    return self.__get_result()\n  File "/usr/lib/python3.6/concurrent/futures/_base.py", line 384, in __get_result\n    raise self._exception\n  File "/usr/lib/python3.6/concurrent/futures/thread.py [...]
+    No: 11  GFLOPS: 0.00/61.16      result: MeasureResult(costs=('Traceback (most recent call last):\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 571, in __call__\n    func, arg_info = _build_func_common(measure_input, self.runtime, **kwargs)\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 523, in _build_func_common\n    func = build(s, args, target_host=task.target_host, runtime=runtime)\n  File "/workspace/python/tvm/driver/build_mod [...]
+    No: 12  GFLOPS: 0.00/61.16      result: MeasureResult(costs=('Traceback (most recent call last):\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 571, in __call__\n    func, arg_info = _build_func_common(measure_input, self.runtime, **kwargs)\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 523, in _build_func_common\n    func = build(s, args, target_host=task.target_host, runtime=runtime)\n  File "/workspace/python/tvm/driver/build_mod [...]
+    No: 13  GFLOPS: 0.00/61.16      result: MeasureResult(costs=('Traceback (most recent call last):\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 571, in __call__\n    func, arg_info = _build_func_common(measure_input, self.runtime, **kwargs)\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 523, in _build_func_common\n    func = build(s, args, target_host=task.target_host, runtime=runtime)\n  File "/workspace/python/tvm/driver/build_mod [...]
+    No: 14  GFLOPS: 0.00/61.16      result: MeasureResult(costs=('Traceback (most recent call last):\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 571, in __call__\n    func, arg_info = _build_func_common(measure_input, self.runtime, **kwargs)\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 523, in _build_func_common\n    func = build(s, args, target_host=task.target_host, runtime=runtime)\n  File "/workspace/python/tvm/driver/build_mod [...]
+    No: 15  GFLOPS: 0.00/61.16      result: MeasureResult(costs=('Traceback (most recent call last):\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 571, in __call__\n    func, arg_info = _build_func_common(measure_input, self.runtime, **kwargs)\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 523, in _build_func_common\n    func = build(s, args, target_host=task.target_host, runtime=runtime)\n  File "/workspace/python/tvm/driver/build_mod [...]
+    No: 16  GFLOPS: 0.00/61.16      result: MeasureResult(costs=('Traceback (most recent call last):\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 571, in __call__\n    func, arg_info = _build_func_common(measure_input, self.runtime, **kwargs)\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 523, in _build_func_common\n    func = build(s, args, target_host=task.target_host, runtime=runtime)\n  File "/workspace/python/tvm/driver/build_mod [...]
+    No: 17  GFLOPS: 0.00/61.16      result: MeasureResult(costs=('Traceback (most recent call last):\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 571, in __call__\n    func, arg_info = _build_func_common(measure_input, self.runtime, **kwargs)\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 523, in _build_func_common\n    func = build(s, args, target_host=task.target_host, runtime=runtime)\n  File "/workspace/python/tvm/driver/build_mod [...]
+    No: 18  GFLOPS: 0.00/61.16      result: MeasureResult(costs=('Traceback (most recent call last):\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 571, in __call__\n    func, arg_info = _build_func_common(measure_input, self.runtime, **kwargs)\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 523, in _build_func_common\n    func = build(s, args, target_host=task.target_host, runtime=runtime)\n  File "/workspace/python/tvm/driver/build_mod [...]
+    No: 19  GFLOPS: 0.00/61.16      result: MeasureResult(costs=('Traceback (most recent call last):\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 721, in __call__\n    yield remote, remote.load_module(os.path.split(build_result.filename)[1])\n  File "/workspace/python/tvm/autotvm/measure/measure_methods.py", line 685, in run_through_rpc\n    costs = time_f(*args).results\n  File "/workspace/python/tvm/runtime/module.py", line 297, in evaluator\n    blob = feva [...]
+    No: 20  GFLOPS: 144.90/144.90   result: MeasureResult(costs=(0.0015976684199999998,), error_no=MeasureErrorNo.NO_ERROR, all_cost=1.39886474609375, timestamp=1646086737.836721) [('tile_f', [-1, 1, 4, 1]), ('tile_y', [-1, 1, 1, 1]), ('tile_x', [-1, 7, 1, 1]), ('tile_rc', [-1, 4, 1]), ('tile_ry', [-1, 1, 1]), ('tile_rx', [-1, 1, 3]), ('auto_unroll_max_step', 1500), ('unroll_explicit', 1)],None,9881539
 
 
 
@@ -314,7 +316,7 @@ and measure running time.
 
     Best config:
     [('tile_f', [-1, 1, 4, 1]), ('tile_y', [-1, 1, 1, 1]), ('tile_x', [-1, 7, 1, 1]), ('tile_rc', [-1, 4, 1]), ('tile_ry', [-1, 1, 1]), ('tile_rx', [-1, 1, 3]), ('auto_unroll_max_step', 1500), ('unroll_explicit', 1)],None,9881539
-    Time cost of this operator: 0.000898
+    Time cost of this operator: 0.001956
 
 
 
diff --git a/docs/_sources/how_to/tune_with_autotvm/tune_relay_cuda.rst.txt b/docs/_sources/how_to/tune_with_autotvm/tune_relay_cuda.rst.txt
index 9b2d436..6c2f0c5 100644
--- a/docs/_sources/how_to/tune_with_autotvm/tune_relay_cuda.rst.txt
+++ b/docs/_sources/how_to/tune_with_autotvm/tune_relay_cuda.rst.txt
@@ -164,7 +164,7 @@ Before tuning, we apply some configurations.
 
  .. code-block:: none
 
-    /home/areusch/ws/tvm3/python/tvm/target/target.py:259: UserWarning: Try specifying cuda arch by adding 'arch=sm_xx' to your target.
+    /workspace/python/tvm/target/target.py:282: UserWarning: Try specifying cuda arch by adding 'arch=sm_xx' to your target.
       warnings.warn("Try specifying cuda arch by adding 'arch=sm_xx' to your target.")
 
 
diff --git a/docs/_sources/how_to/work_with_microtvm/index.rst.txt b/docs/_sources/how_to/work_with_microtvm/index.rst.txt
index fea6cdb..2353d2e 100644
--- a/docs/_sources/how_to/work_with_microtvm/index.rst.txt
+++ b/docs/_sources/how_to/work_with_microtvm/index.rst.txt
@@ -93,6 +93,26 @@ demonstrate how to tune and deploy models with microTVM.
    :hidden:
 
    /how_to/work_with_microtvm/micro_tflite
+
+.. raw:: html
+
+    <div class="sphx-glr-thumbcontainer" tooltip="This tutorial explains how to compile a tiny model for a micro device, build a program on Zephy...">
+
+.. only:: html
+
+    .. figure:: /how_to/work_with_microtvm/images/thumb/sphx_glr_micro_tvmc_thumb.png
+
+        :ref:`sphx_glr_how_to_work_with_microtvm_micro_tvmc.py`
+
+.. raw:: html
+
+    </div>
+
+
+.. toctree::
+   :hidden:
+
+   /how_to/work_with_microtvm/micro_tvmc
 .. raw:: html
 
     <div style='clear:both'></div>
diff --git a/docs/_sources/how_to/work_with_microtvm/micro_autotune.rst.txt b/docs/_sources/how_to/work_with_microtvm/micro_autotune.rst.txt
index 84a6886..6380bb6 100644
--- a/docs/_sources/how_to/work_with_microtvm/micro_autotune.rst.txt
+++ b/docs/_sources/how_to/work_with_microtvm/micro_autotune.rst.txt
@@ -9,7 +9,7 @@
 
 .. _tutorial-micro-autotune:
 
-Autotuning with micro TVM
+Autotuning with microTVM
 =========================
 **Authors**:
 `Andrew Reusch <https://github.com/areusch>`_,
@@ -21,12 +21,15 @@ This tutorial explains how to autotune a model using the C runtime.
 .. code-block:: default
 
 
+    import os
+    import json
     import numpy as np
-    import subprocess
     import pathlib
 
     import tvm
-    from tvm.relay.backend import Executor, Runtime
+    from tvm.relay.backend import Runtime
+
+    use_physical_hw = bool(os.getenv("TVM_MICRO_USE_HW"))
 
 
 
@@ -75,7 +78,7 @@ Defining the model
 
 
 
-Defining the target #
+Defining the target
 ######################
  Now we define the TVM target that describes the execution environment. This looks very similar
  to target definitions from other microTVM tutorials. Alongside this we pick the C Runtime to code
@@ -90,6 +93,7 @@ Defining the target #
 
 .. code-block:: default
 
+
     RUNTIME = Runtime("crt", {"system-lib": True})
     TARGET = tvm.target.target.micro("host")
 
@@ -97,9 +101,14 @@ Defining the target #
     # --------------------------------------------------------------------------
     #  When running on physical hardware, choose a TARGET and a BOARD that describe the hardware. The
     #  STM32L4R5ZI Nucleo target and board is chosen in the example below.
-    #
-    #    TARGET = tvm.target.target.micro("stm32l4r5zi")
-    #    BOARD = "nucleo_l4r5zi"
+    if use_physical_hw:
+        boards_file = pathlib.Path(tvm.micro.get_microtvm_template_projects("zephyr")) / "boards.json"
+        with open(boards_file) as f:
+            boards = json.load(f)
+
+        BOARD = os.getenv("TVM_MICRO_BOARD", default="nucleo_l4r5zi")
+        TARGET = tvm.target.target.micro(boards[BOARD]["model"])
+
 
 
 
@@ -117,6 +126,7 @@ Extracting tuning tasks
  transformation passes; we'll apply the same configuration later on during autotuning.
 
 
+
 .. code-block:: default
 
 
@@ -146,7 +156,6 @@ Configuring microTVM
 .. code-block:: default
 
 
-
     module_loader = tvm.micro.AutoTvmModuleLoader(
         template_project_dir=pathlib.Path(tvm.micro.get_microtvm_template_projects("crt")),
         project_options={"verbose": False},
@@ -163,30 +172,45 @@ Configuring microTVM
     measure_option = tvm.autotvm.measure_option(builder=builder, runner=runner)
 
     # Compiling for physical hardware
-    # --------------------------------------------------------------------------
-    #    module_loader = tvm.micro.AutoTvmModuleLoader(
-    #        template_project_dir=pathlib.Path(tvm.micro.get_microtvm_template_projects("zephyr")),
-    #        project_options={
-    #            "zephyr_board": BOARD,
-    #            "west_cmd": "west",
-    #            "verbose": False,
-    #            "project_type": "host_driven",
-    #        },
-    #    )
-    #    builder = tvm.autotvm.LocalBuilder(
-    #        n_parallel=1,
-    #        build_kwargs={"build_option": {"tir.disable_vectorize": True}},
-    #        do_fork=False,
-    #        build_func=tvm.micro.autotvm_build_func,
-    #    )
-    #    runner = tvm.autotvm.LocalRunner(number=1, repeat=1, timeout=100, module_loader=module_loader)
-    #
-    #    measure_option = tvm.autotvm.measure_option(builder=builder, runner=runner)
-
-    ################
-    # Run Autotuning
-    ################
-    # Now we can run autotuning separately on each extracted task.
+    if use_physical_hw:
+        module_loader = tvm.micro.AutoTvmModuleLoader(
+            template_project_dir=pathlib.Path(tvm.micro.get_microtvm_template_projects("zephyr")),
+            project_options={
+                "zephyr_board": BOARD,
+                "west_cmd": "west",
+                "verbose": False,
+                "project_type": "host_driven",
+            },
+        )
+        builder = tvm.autotvm.LocalBuilder(
+            n_parallel=1,
+            build_kwargs={"build_option": {"tir.disable_vectorize": True}},
+            do_fork=False,
+            build_func=tvm.micro.autotvm_build_func,
+            runtime=RUNTIME,
+        )
+        runner = tvm.autotvm.LocalRunner(number=1, repeat=1, timeout=100, module_loader=module_loader)
+
+        measure_option = tvm.autotvm.measure_option(builder=builder, runner=runner)
+
+
+
+
+
+
+
+Run Autotuning
+#########################
+ Now we can run autotuning separately on each extracted task on microTVM device.
+
+
+
+.. code-block:: default
+
+
+    autotune_log_file = pathlib.Path("microtvm_autotune.log.txt")
+    if os.path.exists(autotune_log_file):
+        os.remove(autotune_log_file)
 
     num_trials = 10
     for task in tasks:
@@ -195,7 +219,7 @@ Configuring microTVM
             n_trial=num_trials,
             measure_option=measure_option,
             callbacks=[
-                tvm.autotvm.callback.log_to_file("microtvm_autotune.log.txt"),
+                tvm.autotvm.callback.log_to_file(str(autotune_log_file)),
                 tvm.autotvm.callback.progress_bar(num_trials, si_prefix="M"),
             ],
             si_prefix="M",
@@ -214,6 +238,7 @@ Timing the untuned program
  the tuned operator.
 
 
+
 .. code-block:: default
 
 
@@ -221,7 +246,6 @@ Timing the untuned program
         lowered = tvm.relay.build(relay_mod, target=TARGET, runtime=RUNTIME, params=params)
 
     temp_dir = tvm.contrib.utils.tempdir()
-
     project = tvm.micro.generate_project(
         str(tvm.micro.get_microtvm_template_projects("crt")),
         lowered,
@@ -230,18 +254,19 @@ Timing the untuned program
     )
 
     # Compiling for physical hardware
-    # --------------------------------------------------------------------------
-    #    project = tvm.micro.generate_project(
-    #        str(tvm.micro.get_microtvm_template_projects("zephyr")),
-    #        lowered,
-    #        temp_dir / "project",
-    #        {
-    #            "zephyr_board": BOARD,
-    #            "west_cmd": "west",
-    #            "verbose": False,
-    #            "project_type": "host_driven",
-    #        },
-    #    )
+    if use_physical_hw:
+        temp_dir = tvm.contrib.utils.tempdir()
+        project = tvm.micro.generate_project(
+            str(tvm.micro.get_microtvm_template_projects("zephyr")),
+            lowered,
+            temp_dir / "project",
+            {
+                "zephyr_board": BOARD,
+                "west_cmd": "west",
+                "verbose": False,
+                "project_type": "host_driven",
+            },
+        )
 
     project.build()
     project.flash()
@@ -267,10 +292,10 @@ Timing the untuned program
     ########## Build without Autotuning ##########
     Node Name                                     Ops                                           Time(us)  Time(%)  Shape              Inputs  Outputs  
     ---------                                     ---                                           --------  -------  -----              ------  -------  
-    tvmgen_default_fused_nn_contrib_conv2d_NCHWc  tvmgen_default_fused_nn_contrib_conv2d_NCHWc  613.2     98.379   (1, 2, 10, 10, 3)  2       1        
-    tvmgen_default_fused_layout_transform_1       tvmgen_default_fused_layout_transform_1       6.7       1.075    (1, 6, 10, 10)     1       1        
-    tvmgen_default_fused_layout_transform         tvmgen_default_fused_layout_transform         3.403     0.546    (1, 1, 10, 10, 3)  1       1        
-    Total_time                                    -                                             623.303   -        -                  -       -        
+    tvmgen_default_fused_nn_contrib_conv2d_NCHWc  tvmgen_default_fused_nn_contrib_conv2d_NCHWc  302.9     98.73    (1, 2, 10, 10, 3)  2       1        
+    tvmgen_default_fused_layout_transform_1       tvmgen_default_fused_layout_transform_1       2.976     0.97     (1, 6, 10, 10)     1       1        
+    tvmgen_default_fused_layout_transform         tvmgen_default_fused_layout_transform         0.92      0.3      (1, 1, 10, 10, 3)  1       1        
+    Total_time                                    -                                             306.797   -        -                  -       -        
 
 
 
@@ -282,12 +307,11 @@ Timing the tuned program
 .. code-block:: default
 
 
-    with tvm.autotvm.apply_history_best("microtvm_autotune.log.txt"):
+    with tvm.autotvm.apply_history_best(str(autotune_log_file)):
         with pass_context:
             lowered_tuned = tvm.relay.build(relay_mod, target=TARGET, runtime=RUNTIME, params=params)
 
     temp_dir = tvm.contrib.utils.tempdir()
-
     project = tvm.micro.generate_project(
         str(tvm.micro.get_microtvm_template_projects("crt")),
         lowered_tuned,
@@ -296,18 +320,19 @@ Timing the tuned program
     )
 
     # Compiling for physical hardware
-    # --------------------------------------------------------------------------
-    #    project = tvm.micro.generate_project(
-    #        str(tvm.micro.get_microtvm_template_projects("zephyr")),
-    #        lowered_tuned,
-    #        temp_dir / "project",
-    #        {
-    #            "zephyr_board": BOARD,
-    #            "west_cmd": "west",
-    #            "verbose": False,
-    #            "project_type": "host_driven",
-    #        },
-    #    )
+    if use_physical_hw:
+        temp_dir = tvm.contrib.utils.tempdir()
+        project = tvm.micro.generate_project(
+            str(tvm.micro.get_microtvm_template_projects("zephyr")),
+            lowered_tuned,
+            temp_dir / "project",
+            {
+                "zephyr_board": BOARD,
+                "west_cmd": "west",
+                "verbose": False,
+                "project_type": "host_driven",
+            },
+        )
 
     project.build()
     project.flash()
@@ -332,10 +357,10 @@ Timing the tuned program
     ########## Build with Autotuning ##########
     Node Name                                     Ops                                           Time(us)  Time(%)  Shape              Inputs  Outputs  
     ---------                                     ---                                           --------  -------  -----              ------  -------  
-    tvmgen_default_fused_nn_contrib_conv2d_NCHWc  tvmgen_default_fused_nn_contrib_conv2d_NCHWc  320.2     97.793   (1, 6, 10, 10, 1)  2       1        
-    tvmgen_default_fused_layout_transform_1       tvmgen_default_fused_layout_transform_1       4.709     1.438    (1, 6, 10, 10)     1       1        
-    tvmgen_default_fused_layout_transform         tvmgen_default_fused_layout_transform         2.518     0.769    (1, 1, 10, 10, 3)  1       1        
-    Total_time                                    -                                             327.427   -        -                  -       -        
+    tvmgen_default_fused_nn_contrib_conv2d_NCHWc  tvmgen_default_fused_nn_contrib_conv2d_NCHWc  79.6      96.785   (1, 6, 10, 10, 1)  2       1        
+    tvmgen_default_fused_layout_transform_1       tvmgen_default_fused_layout_transform_1       1.7       2.067    (1, 6, 10, 10)     1       1        
+    tvmgen_default_fused_layout_transform         tvmgen_default_fused_layout_transform         0.944     1.148    (1, 1, 10, 10, 3)  1       1        
+    Total_time                                    -                                             82.244    -        -                  -       -        
 
 
 
diff --git a/docs/_sources/how_to/work_with_microtvm/micro_ethosu.rst.txt b/docs/_sources/how_to/work_with_microtvm/micro_ethosu.rst.txt
index 298dcc7..be6d87e 100644
--- a/docs/_sources/how_to/work_with_microtvm/micro_ethosu.rst.txt
+++ b/docs/_sources/how_to/work_with_microtvm/micro_ethosu.rst.txt
@@ -69,7 +69,7 @@ These can be installed by using the requirements.txt file below:
     attrs==21.2.0
     cloudpickle==2.0.0
     decorator==5.1.0
-    ethos-u-vela==2.1.1
+    ethos-u-vela==3.2.0
     flatbuffers==1.12
     lxml==4.6.3
     nose==1.3.7
@@ -391,6 +391,11 @@ In addition, you will need these header files from github in your ``./include``
 
 `include files <https://github.com/apache/tvm/tree/main/apps/microtvm/ethosu/include>`_
 
+.. note::
+
+  If you'd like to use FreeRTOS for task scheduling and queues, a sample application can be found here
+  `demo_freertos.c <https://github.com/apache/tvm/blob/main/apps/microtvm/ethosu/src/demo_freertos.c>`
+
 Creating the linker script
 --------------------------
 
@@ -429,6 +434,12 @@ in your working directory before running ``make`` on the command line:
 An example Makefile can be found here:
 `Makefile <https://github.com/apache/tvm/blob/main/apps/microtvm/ethosu/Makefile>`_
 
+.. note::
+
+   If you're using FreeRTOS, the Makefile builds it from the specified FREERTOS_PATH:
+    ``make FREERTOS_PATH=<FreeRTOS directory>``
+
+
 Running the demo application
 ----------------------------
 
diff --git a/docs/_sources/how_to/work_with_microtvm/micro_tflite.rst.txt b/docs/_sources/how_to/work_with_microtvm/micro_tflite.rst.txt
index 4a3e3f1..b089253 100644
--- a/docs/_sources/how_to/work_with_microtvm/micro_tflite.rst.txt
+++ b/docs/_sources/how_to/work_with_microtvm/micro_tflite.rst.txt
@@ -117,12 +117,18 @@ directory into a buffer
 
 
     import os
+    import json
+    import tarfile
+    import pathlib
+    import tempfile
     import numpy as np
 
     import tvm
-    from tvm.contrib.download import download_testdata
     from tvm import relay
+    import tvm.contrib.utils
+    from tvm.contrib.download import download_testdata
 
+    use_physical_hw = bool(os.getenv("TVM_MICRO_USE_HW"))
     model_url = "https://people.linaro.org/~tom.gall/sine_model.tflite"
     model_file = "sine_model.tflite"
     model_path = download_testdata(model_url, model_file, module="data")
@@ -219,7 +225,7 @@ QEMU VM based on BOARD. In the example below the x86 arch is selected and a x86
 
     RUNTIME = tvm.relay.backend.Runtime("crt", {"system-lib": True})
     TARGET = tvm.target.target.micro("host")
-    BOARD = "qemu_x86"
+
     #
     # Compiling for physical hardware
     #  When running on physical hardware, choose a TARGET and a BOARD that describe the hardware. The
@@ -228,8 +234,15 @@ QEMU VM based on BOARD. In the example below the x86 arch is selected and a x86
     #  board but a couple of wirings and configs differ, it's necessary to select the "stm32f746g_disco"
     #  board to generated the right firmware image.
     #
-    #  TARGET = tvm.target.target.micro("stm32f746xx")
-    #  BOARD = "nucleo_f746zg" # or "stm32f746g_disco#"
+
+    if use_physical_hw:
+        boards_file = pathlib.Path(tvm.micro.get_microtvm_template_projects("zephyr")) / "boards.json"
+        with open(boards_file) as f:
+            boards = json.load(f)
+
+        BOARD = os.getenv("TVM_MICRO_BOARD", default="nucleo_f746zg")
+        TARGET = tvm.target.target.micro(boards[BOARD]["model"])
+
     #
     #  For some boards, Zephyr runs them emulated by default, using QEMU. For example, below is the
     #  TARGET and BOARD used to build a microTVM firmware for the mps2-an521 board. Since that board
@@ -284,15 +297,12 @@ Now, compile the model for the target:
     # (:doc:`Model Library Format` </dev/model_library_format>`). This is a tarball with a standard layout:
 
     # Get a temporary path where we can store the tarball (since this is running as a tutorial).
-    import tempfile
 
     fd, model_library_format_tar_path = tempfile.mkstemp()
     os.close(fd)
     os.unlink(model_library_format_tar_path)
     tvm.micro.export_model_library_format(module, model_library_format_tar_path)
 
-    import tarfile
-
     with tarfile.open(model_library_format_tar_path, "r:*") as tar_f:
         print("\n".join(f" - {m.name}" for m in tar_f.getmembers()))
 
@@ -311,9 +321,6 @@ Now, compile the model for the target:
     # this lives in a file ``microtvm_api_server.py`` in the root directory). Let's use the example ``host``
     # project in this tutorial, which simulates the device using a POSIX subprocess and pipes:
 
-    import subprocess
-    import pathlib
-
     template_project_path = pathlib.Path(tvm.micro.get_microtvm_template_projects("crt"))
     project_options = {}  # You can use options to provide platform-specific options through TVM.
 
@@ -322,11 +329,12 @@ Now, compile the model for the target:
     #  For physical hardware, you can try out the Zephyr platform by using a different template project
     #  and options:
     #
-    #     template_project_path = pathlib.Path(tvm.micro.get_microtvm_template_projects("zephyr"))
-    #     project_options = {"project_type": "host_driven", zephyr_board": "nucleo_f746zg"}}
+
+    if use_physical_hw:
+        template_project_path = pathlib.Path(tvm.micro.get_microtvm_template_projects("zephyr"))
+        project_options = {"project_type": "host_driven", "zephyr_board": BOARD}
 
     # Create a temporary directory
-    import tvm.contrib.utils
 
     temp_dir = tvm.contrib.utils.tempdir()
     generated_project_dir = temp_dir / "generated-project"
@@ -362,17 +370,17 @@ Now, compile the model for the target:
      - .
      - ./src
      - ./src/relay.txt
+     - ./metadata.json
      - ./codegen
      - ./codegen/host
      - ./codegen/host/src
      - ./codegen/host/src/default_lib0.c
      - ./codegen/host/src/default_lib1.c
-     - ./parameters
-     - ./parameters/default.params
-     - ./metadata.json
      - ./executor-config
      - ./executor-config/graph
      - ./executor-config/graph/graph.json
+     - ./parameters
+     - ./parameters/default.params
 
 
 
diff --git a/docs/_sources/how_to/work_with_microtvm/micro_tvmc.rst.txt b/docs/_sources/how_to/work_with_microtvm/micro_tvmc.rst.txt
new file mode 100644
index 0000000..144b9c3
--- /dev/null
+++ b/docs/_sources/how_to/work_with_microtvm/micro_tvmc.rst.txt
@@ -0,0 +1,207 @@
+.. note::
+    :class: sphx-glr-download-link-note
+
+    Click :ref:`here <sphx_glr_download_how_to_work_with_microtvm_micro_tvmc.py>` to download the full example code
+.. rst-class:: sphx-glr-example-title
+
+.. _sphx_glr_how_to_work_with_microtvm_micro_tvmc.py:
+
+
+.. _tutorial-micro-tvmc:
+
+Executing a Tiny Model with TVMC Micro
+======================================
+**Author**: `Mehrdad Hessar <https://github.com/mehrdadh>`_
+
+This tutorial explains how to compile a tiny model for a micro device,
+build a program on Zephyr platform to execute this model, flash the program
+and run the model all using `tvmc micro` command.
+
+.. note::
+    This tutorial is explaining using TVMC Mirco on Zephyr platform. You need
+    to install Zephyr dependencies before processing with this tutorial. Alternatively,
+    you can run this tutorial in one of the following ways which has Zephyr depencencies already installed.
+
+    * Use `microTVM Reference Virtual Machines <https://tvm.apache.org/docs/how_to/work_with_microtvm/micro_reference_vm.html#sphx-glr-how-to-work-with-microtvm-micro-reference-vm-py>`_.
+    * Use QEMU docker image provided by TVM. Following these you will download and login to the docker image:
+
+    .. code-block:: bash
+
+      cd tvm
+      ./docker/bash.sh tlcpack/ci-qemu
+
+
+Using TVMC Micro
+###########################################################
+
+ TVMC is a command-line tool which is installed as a part of TVM Python packages. Accessing this
+ package varies based on your machine setup. In many cases, you can use the ``tvmc`` command directly.
+ Alternatively, if you have TVM as a Python module on your ``$PYTHONPATH``, you can access this
+ driver with ``python -m tvm.driver.tvmc`` command. This tutorial will use TVMC command as
+ ``tvmc`` for simplicity.
+
+ To check if you have TVMC command installed on your machine, you can run:
+
+ .. code-block:: bash
+
+     tvmc --help
+
+ To compile a model for microtvm we use ``tvmc compile`` subcommand. The output of this command
+ is used in next steps with ``tvmc micro`` subcommands. You can check the availability of TVMC Micro using:
+
+ .. code-block:: bash
+
+     tvmc micro --help
+
+ The main tasks that you can perform using ``tvmc micro`` are ``create``, ``build`` and ``flash``.
+ To read about specific options under a givern subcommand, use
+ ``tvmc micro <subcommand> --help``. We will use each subcommand in this tutorial.
+
+
+Obtain a Tiny Model
+###########################################################
+
+ For this tutorial, we will use Magic Wand model from tflite micro. Magic Wand is a
+ Depthwise Convolution Layer model which recognizes gestures with an accelerometer.
+
+ For this tutorial we will be using the model in tflite format.
+
+ .. code-block:: bash
+
+     wget https://github.com/tensorflow/tflite-micro/raw/main/tensorflow/lite/micro/examples/magic_wand/magic_wand.tflite
+
+
+Compiling a TFLite model to a Model Library Format
+###########################################################
+
+ Model Library Format (MLF) is an output format that TVM provides for micro targets. MLF is a tarball
+ containing a file for each piece of the TVM compiler output which can be used on micro targets outside
+ TVM environment. Read more about `Model Library Format <https://tvm.apache.org/docs//arch/model_library_format.html>`_.
+
+ Here, we generate a MLF file for ``qemu_x86`` Zephyr board. To generate MLF output for the ``magic_wand`` tflite model:
+
+ .. code-block:: bash
+
+     tvmc compile magic_wand.tflite \
+       --target='c -keys=cpu -link-params=0 -model=host' \
+       --runtime=crt \
+       --runtime-crt-system-lib 1 \
+       --executor='graph' \
+       --executor-graph-link-params 0 \
+       --output model.tar \
+       --output-format mlf \
+       --pass-config tir.disable_vectorize=1 \
+       --disabled-pass=AlterOpLayout
+
+ This will generate a ``model.tar`` file which contains TVM compiler output files. To run this command for
+ a different Zephyr device, you need to update ``target``. For instance, for ``nrf5340dk_nrf5340_cpuapp`` board
+ the target is ``--target='c -keys=cpu -link-params=0 -model=nrf5340dk'``.
+
+
+Create a Zephyr Project Using Model Library Format
+###########################################################
+
+ To generate a Zephyr project we use TVM Micro subcommand ``create``. We pass the MLF format and the path
+ for the project to ``create`` subcommand along with project options. Project options for each
+ platform (Zephyr/Arduino) are defined in their Project API server file. To generate Zephyr project, run:
+
+ .. code-block:: bash
+
+     tvmc micro create \
+       project \
+       model.tar \
+       zephyr \
+       --project-option project_type=host_driven zephyr_board=qemu_x86
+
+ This will generate a ``Host-Driven`` Zephyr project for ``qemu_x86`` Zephyr board. In Host-Driven template project,
+ the Graph Executor will run on host and perform the model execution on Zephyr device by issuing commands to the
+ device using an RPC mechanism. Read more about `Host-Driven Execution <https://tvm.apache.org/docs/arch/microtvm_design.html#host-driven-execution>`_.
+
+ To get more information about TVMC Micro ``create`` subcommand:
+
+ .. code-block:: bash
+
+     tvmc micro create --help
+
+
+Build and Flash Zephyr Project Using TVMC Micro
+###########################################################
+
+ Next step is to build the Zephyr project which includes TVM generated code for running the tiny model, Zephyr
+ template code to run a model in Host-Driven mode and TVM runtime source/header files. To build the project:
+
+ .. code-block:: bash
+
+     tvmc micro build \
+       project \
+       zephyr \
+       --project-option zephyr_board=qemu_x86
+
+ This will build the project in ``project`` directory and generates binary files under ``project/build``. To build
+ Zephyr project for a different Zephyr board, change ``zephyr_board`` project option.
+
+ Next, we flash the Zephyr binary file to Zephyr device. For ``qemu_x86`` Zephyr board this step does not
+ actually perform any action since QEMU will be used, however you need this step for physical hardware.
+
+ .. code-block:: bash
+
+     tvmc micro flash \
+       project \
+       zephyr \
+       --project-option zephyr_board=qemu_x86
+
+
+Run Tiny Model on Micro Target
+###########################################################
+
+ After flashing the device, the compiled model and TVM RPC server are programmed on the device.
+ The Zephyr board is waiting for host to open a communication channel. MicroTVM devices typicall communicate
+ using a serial communication (UART). To run the flashed model on the device using TVMC, we use ``tvmc run`` subcommand
+ and pass ``--device micro`` to specify the device type. This command will open a communication channel, set input
+ values using ``Graph Executor`` on host and run full model on the device. Then it gets output from the device.
+
+ .. code-block:: bash
+
+     tvmc run \
+       --device micro \
+       project \
+       --project-option zephyr_board=qemu_x86 \
+       --fill-mode ones
+       --print-top 4
+     # Output:
+     #
+     # INFO:__main__:b'[100%] [QEMU] CPU: qemu32,+nx,+pae\n'
+     # remote: microTVM Zephyr runtime - running
+     # INFO:__main__:b'[100%] Built target run\n'
+     # [[3.         1.         2.         0.        ]
+     # [0.47213247 0.41364592 0.07525456 0.03896701]]
+
+ Specifically, this command sets the input of the model to all ones and shows the four values of the output with their indices.
+
+
+.. _sphx_glr_download_how_to_work_with_microtvm_micro_tvmc.py:
+
+
+.. only :: html
+
+ .. container:: sphx-glr-footer
+    :class: sphx-glr-footer-example
+
+
+
+  .. container:: sphx-glr-download
+
+     :download:`Download Python source code: micro_tvmc.py <micro_tvmc.py>`
+
+
+
+  .. container:: sphx-glr-download
+
+     :download:`Download Jupyter notebook: micro_tvmc.ipynb <micro_tvmc.ipynb>`
+
+
+.. only:: html
+
+ .. rst-class:: sphx-glr-signature
+
+    `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_
diff --git a/docs/_sources/how_to/work_with_microtvm/sg_execution_times.rst.txt b/docs/_sources/how_to/work_with_microtvm/sg_execution_times.rst.txt
index 86078fa..4f518ee 100644
--- a/docs/_sources/how_to/work_with_microtvm/sg_execution_times.rst.txt
+++ b/docs/_sources/how_to/work_with_microtvm/sg_execution_times.rst.txt
@@ -5,9 +5,10 @@
 
 Computation times
 =================
-**00:49.316** total execution time for **how_to_work_with_microtvm** files:
+**00:46.457** total execution time for **how_to_work_with_microtvm** files:
 
-- **00:45.173**: :ref:`sphx_glr_how_to_work_with_microtvm_micro_autotune.py` (``micro_autotune.py``)
-- **00:03.639**: :ref:`sphx_glr_how_to_work_with_microtvm_micro_tflite.py` (``micro_tflite.py``)
-- **00:00.256**: :ref:`sphx_glr_how_to_work_with_microtvm_micro_reference_vm.py` (``micro_reference_vm.py``)
-- **00:00.248**: :ref:`sphx_glr_how_to_work_with_microtvm_micro_ethosu.py` (``micro_ethosu.py``)
+- **00:42.218**: :ref:`sphx_glr_how_to_work_with_microtvm_micro_autotune.py` (``micro_autotune.py``)
+- **00:03.665**: :ref:`sphx_glr_how_to_work_with_microtvm_micro_tflite.py` (``micro_tflite.py``)
+- **00:00.202**: :ref:`sphx_glr_how_to_work_with_microtvm_micro_ethosu.py` (``micro_ethosu.py``)
+- **00:00.195**: :ref:`sphx_glr_how_to_work_with_microtvm_micro_reference_vm.py` (``micro_reference_vm.py``)
+- **00:00.177**: :ref:`sphx_glr_how_to_work_with_microtvm_micro_tvmc.py` (``micro_tvmc.py``)
diff --git a/docs/_sources/how_to/work_with_relay/build_gcn.rst.txt b/docs/_sources/how_to/work_with_relay/build_gcn.rst.txt
index 5cbdc15..10ea2e2 100644
--- a/docs/_sources/how_to/work_with_relay/build_gcn.rst.txt
+++ b/docs/_sources/how_to/work_with_relay/build_gcn.rst.txt
@@ -137,7 +137,6 @@ Load the data and set up model parameters
         dimension of model output (Number of classes)
     """
     dataset = "cora"
-
     g, data = load_dataset(dataset)
 
     num_layers = 1
@@ -155,6 +154,9 @@ Load the data and set up model parameters
 
  .. code-block:: none
 
+    Downloading /workspace/.dgl/cora_v2.zip from https://data.dgl.ai/dataset/cora_v2.zip...
+    Extracting file to /workspace/.dgl/cora_v2
+    Finished data loading and preprocessing.
       NumNodes: 2708
       NumEdges: 10556
       NumFeats: 1433
@@ -162,12 +164,12 @@ Load the data and set up model parameters
       NumTrainingSamples: 140
       NumValidationSamples: 500
       NumTestSamples: 1000
-    Done loading data from cached files.
-    /usr/local/lib/python3.6/dist-packages/dgl/data/utils.py:285: UserWarning: Property dataset.graph will be deprecated, please use dataset[0] instead.
+    Done saving data into cached files.
+    /usr/local/lib/python3.6/dist-packages/dgl/data/utils.py:286: UserWarning: Property dataset.graph will be deprecated, please use dataset[0] instead.
       warnings.warn('Property {} will be deprecated, please use {} instead.'.format(old, new))
-    /usr/local/lib/python3.6/dist-packages/dgl/data/utils.py:285: UserWarning: Property dataset.feat will be deprecated, please use g.ndata['feat'] instead.
+    /usr/local/lib/python3.6/dist-packages/dgl/data/utils.py:286: UserWarning: Property dataset.feat will be deprecated, please use g.ndata['feat'] instead.
       warnings.warn('Property {} will be deprecated, please use {} instead.'.format(old, new))
-    /usr/local/lib/python3.6/dist-packages/dgl/data/utils.py:285: UserWarning: Property dataset.num_labels will be deprecated, please use dataset.num_classes instead.
+    /usr/local/lib/python3.6/dist-packages/dgl/data/utils.py:286: UserWarning: Property dataset.num_labels will be deprecated, please use dataset.num_classes instead.
       warnings.warn('Property {} will be deprecated, please use {} instead.'.format(old, new))
 
 
@@ -237,16 +239,16 @@ Run the DGL model and test for accuracy
  .. code-block:: none
 
     Print the first five outputs from DGL-PyTorch execution
-     tensor([[-2.2395, -0.9681,  3.4042, -0.1481, -0.0272, -1.2441, -1.8549],
-            [-1.6017, -1.3846,  0.7642,  2.5430, -1.7420, -1.3704,  0.4249],
-            [-2.0039, -1.2357,  2.4931,  1.0323, -1.3252, -1.3401, -0.5114],
-            [ 0.1647, -2.0421, -0.2668,  0.1527, -0.6965,  1.1109,  1.1034],
-            [-0.8606, -0.6954,  0.1959,  0.6853,  0.0284, -0.6652,  0.2225]])
-    /usr/local/lib/python3.6/dist-packages/dgl/data/utils.py:285: UserWarning: Property dataset.test_mask will be deprecated, please use g.ndata['test_mask'] instead.
+     tensor([[-0.2198, -0.7980,  0.0784,  0.9232, -0.9319, -0.7733,  0.9410],
+            [-0.4646, -0.6606, -0.1732,  1.1829, -0.3705, -0.5535,  0.0858],
+            [-0.0031, -0.4156,  0.0175,  0.4765, -0.5887, -0.3609,  0.2278],
+            [-0.8559, -0.8860,  1.4782,  0.9262, -1.3100, -1.0960, -0.0908],
+            [-0.0702, -1.1651,  1.1453, -0.3586, -0.4938, -0.2288,  0.1827]])
+    /usr/local/lib/python3.6/dist-packages/dgl/data/utils.py:286: UserWarning: Property dataset.test_mask will be deprecated, please use g.ndata['test_mask'] instead.
       warnings.warn('Property {} will be deprecated, please use {} instead.'.format(old, new))
-    /usr/local/lib/python3.6/dist-packages/dgl/data/utils.py:285: UserWarning: Property dataset.label will be deprecated, please use g.ndata['label'] instead.
+    /usr/local/lib/python3.6/dist-packages/dgl/data/utils.py:286: UserWarning: Property dataset.label will be deprecated, please use g.ndata['label'] instead.
       warnings.warn('Property {} will be deprecated, please use {} instead.'.format(old, new))
-    Test accuracy of DGL results: 5.30%
+    Test accuracy of DGL results: 10.00%
 
 
 
@@ -496,17 +498,17 @@ Run the TVM model, test for accuracy and verify with DGL
  .. code-block:: none
 
     Print the first five outputs from TVM execution
-     [[-2.2394986  -0.9680933   3.4041846  -0.14806426 -0.02724874 -1.2441163
-      -1.8548993 ]
-     [-1.6016592  -1.3846085   0.7641872   2.5430043  -1.7419695  -1.3703678
-       0.42491326]
-     [-2.0038617  -1.2356598   2.4931228   1.0322791  -1.325198   -1.3400824
-      -0.51143134]
-     [ 0.16473567 -2.0420618  -0.26682284  0.15265226 -0.6964847   1.1109071
-       1.103439  ]
-     [-0.8606019  -0.69538236  0.1958623   0.6853092   0.02840531 -0.6652414
-       0.22247872]]
-    Test accuracy of TVM results: 5.30%
+     [[-0.21976954 -0.7979525   0.07836491  0.9232204  -0.93188703 -0.7732947
+       0.9410008 ]
+     [-0.4645713  -0.66060466 -0.17316166  1.1828876  -0.37051404 -0.5534965
+       0.08579484]
+     [-0.00308266 -0.41562504  0.0175378   0.47649348 -0.5886737  -0.3609016
+       0.22782072]
+     [-0.8559376  -0.8860172   1.4782399   0.9262254  -1.3099641  -1.0960144
+      -0.09084877]
+     [-0.07015878 -1.1651071   1.1452857  -0.35857323 -0.49377596 -0.22878847
+       0.18269953]]
+    Test accuracy of TVM results: 10.00%
 
 
 
diff --git a/docs/_sources/how_to/work_with_relay/index.rst.txt b/docs/_sources/how_to/work_with_relay/index.rst.txt
index bff40c3..0ceffb7 100644
--- a/docs/_sources/how_to/work_with_relay/index.rst.txt
+++ b/docs/_sources/how_to/work_with_relay/index.rst.txt
@@ -48,6 +48,26 @@ Work With Relay
    :hidden:
 
    /how_to/work_with_relay/using_external_lib
+
+.. raw:: html
+
+    <div class="sphx-glr-thumbcontainer" tooltip="Relay IR module can contain lots of operations. Although an individual operation is usually eas...">
+
+.. only:: html
+
+    .. figure:: /how_to/work_with_relay/images/thumb/sphx_glr_using_relay_viz_thumb.png
+
+        :ref:`sphx_glr_how_to_work_with_relay_using_relay_viz.py`
+
+.. raw:: html
+
+    </div>
+
+
+.. toctree::
+   :hidden:
+
+   /how_to/work_with_relay/using_relay_viz
 .. raw:: html
 
     <div style='clear:both'></div>
diff --git a/docs/_sources/how_to/work_with_relay/sg_execution_times.rst.txt b/docs/_sources/how_to/work_with_relay/sg_execution_times.rst.txt
index 3510d02..28cdea4 100644
--- a/docs/_sources/how_to/work_with_relay/sg_execution_times.rst.txt
+++ b/docs/_sources/how_to/work_with_relay/sg_execution_times.rst.txt
@@ -5,7 +5,8 @@
 
 Computation times
 =================
-**00:03.800** total execution time for **how_to_work_with_relay** files:
+**00:04.508** total execution time for **how_to_work_with_relay** files:
 
-- **00:02.502**: :ref:`sphx_glr_how_to_work_with_relay_using_external_lib.py` (``using_external_lib.py``)
-- **00:01.298**: :ref:`sphx_glr_how_to_work_with_relay_build_gcn.py` (``build_gcn.py``)
+- **00:02.424**: :ref:`sphx_glr_how_to_work_with_relay_using_external_lib.py` (``using_external_lib.py``)
+- **00:01.880**: :ref:`sphx_glr_how_to_work_with_relay_build_gcn.py` (``build_gcn.py``)
+- **00:00.204**: :ref:`sphx_glr_how_to_work_with_relay_using_relay_viz.py` (``using_relay_viz.py``)
diff --git a/docs/_sources/how_to/work_with_relay/using_relay_viz.rst.txt b/docs/_sources/how_to/work_with_relay/using_relay_viz.rst.txt
new file mode 100644
index 0000000..2985715
--- /dev/null
+++ b/docs/_sources/how_to/work_with_relay/using_relay_viz.rst.txt
@@ -0,0 +1,296 @@
+.. note::
+    :class: sphx-glr-download-link-note
+
+    Click :ref:`here <sphx_glr_download_how_to_work_with_relay_using_relay_viz.py>` to download the full example code
+.. rst-class:: sphx-glr-example-title
+
+.. _sphx_glr_how_to_work_with_relay_using_relay_viz.py:
+
+
+Use Relay Visualizer to Visualize Relay
+============================================================
+**Author**: `Chi-Wei Wang <https://github.com/chiwwang>`_
+
+Relay IR module can contain lots of operations. Although an individual
+operation is usually easy to understand, putting them together can cause
+a complicated, hard-to-read graph. Things can get even worse with optimiztion-passes
+coming into play.
+
+This utility visualizes an IR module as nodes and edges. It defines a set of interfaces including
+parser, plotter(renderer), graph, node, and edges.
+A default parser is provided. Users can implement their own renderers to render the graph.
+
+Here we use a renderer rendering graph in the text-form.
+It is a lightweight, AST-like visualizer, inspired by `clang ast-dump <https://clang.llvm.org/docs/IntroductionToTheClangAST.html>`_.
+We will introduce how to implement customized parsers and renderers through interface classes.
+
+
+.. code-block:: default
+
+    from typing import (
+        Dict,
+        Union,
+        Tuple,
+        List,
+    )
+    import tvm
+    from tvm import relay
+    from tvm.contrib import relay_viz
+    from tvm.contrib.relay_viz.interface import (
+        VizEdge,
+        VizNode,
+        VizParser,
+    )
+    from tvm.contrib.relay_viz.terminal import (
+        TermGraph,
+        TermPlotter,
+        TermVizParser,
+    )
+
+
+
+
+
+
+
+Define a Relay IR Module with multiple GlobalVar
+------------------------------------------------
+Let's build an example Relay IR Module containing multiple ``GlobalVar``.
+We define an ``add`` function and call it in the main function.
+
+
+.. code-block:: default
+
+    data = relay.var("data")
+    bias = relay.var("bias")
+    add_op = relay.add(data, bias)
+    add_func = relay.Function([data, bias], add_op)
+    add_gvar = relay.GlobalVar("AddFunc")
+
+    input0 = relay.var("input0")
+    input1 = relay.var("input1")
+    input2 = relay.var("input2")
+    add_01 = relay.Call(add_gvar, [input0, input1])
+    add_012 = relay.Call(add_gvar, [input2, add_01])
+    main_func = relay.Function([input0, input1, input2], add_012)
+    main_gvar = relay.GlobalVar("main")
+
+    mod = tvm.IRModule({main_gvar: main_func, add_gvar: add_func})
+
+
+
+
+
+
+
+Render the graph with Relay Visualizer on the terminal
+------------------------------------------------------
+The terminal can show a Relay IR module in text similar to clang AST-dump.
+We should see ``main`` and ``AddFunc`` function. ``AddFunc`` is called twice in the ``main`` function.
+
+
+.. code-block:: default
+
+    viz = relay_viz.RelayVisualizer(mod)
+    viz.render()
+
+
+
+
+
+.. rst-class:: sphx-glr-script-out
+
+ Out:
+
+ .. code-block:: none
+
+    @main([Var(input0), Var(input1), Var(input2)])
+    `--Call 
+       |--GlobalVar AddFunc
+       |--Var(Input) name_hint: input2
+       `--Call 
+          |--GlobalVar AddFunc
+          |--Var(Input) name_hint: input0
+          `--Var(Input) name_hint: input1
+    @AddFunc([Var(data), Var(bias)])
+    `--Call 
+       |--add 
+       |--Var(Input) name_hint: data
+       `--Var(Input) name_hint: bias
+
+
+
+Customize Parser for Interested Relay Types
+-------------------------------------------
+Sometimes we want to emphasize interested information, or parse things differently for a specific usage.
+It is possible to provide customized parsers as long as it obeys the interface.
+Here demostrate how to customize parsers for ``relay.var``.
+We need to implement abstract interface :py:class:`tvm.contrib.relay_viz.interface.VizParser`.
+
+
+.. code-block:: default
+
+    class YourAwesomeParser(VizParser):
+        def __init__(self):
+            self._delegate = TermVizParser()
+
+        def get_node_edges(
+            self,
+            node: relay.Expr,
+            relay_param: Dict[str, tvm.runtime.NDArray],
+            node_to_id: Dict[relay.Expr, str],
+        ) -> Tuple[Union[VizNode, None], List[VizEdge]]:
+
+            if isinstance(node, relay.Var):
+                node = VizNode(node_to_id[node], "AwesomeVar", f"name_hint {node.name_hint}")
+                # no edge is introduced. So return an empty list.
+                return node, []
+
+            # delegate other types to the other parser.
+            return self._delegate.get_node_edges(node, relay_param, node_to_id)
+
+
+
+
+
+
+
+
+Pass the parser and an interested renderer to visualizer.
+Here we just the terminal renderer.
+
+
+.. code-block:: default
+
+    viz = relay_viz.RelayVisualizer(mod, {}, TermPlotter(), YourAwesomeParser())
+    viz.render()
+
+
+
+
+
+.. rst-class:: sphx-glr-script-out
+
+ Out:
+
+ .. code-block:: none
+
+    @main([Var(input0), Var(input1), Var(input2)])
+    `--Call 
+       |--GlobalVar AddFunc
+       |--AwesomeVar name_hint input2
+       `--Call 
+          |--GlobalVar AddFunc
+          |--AwesomeVar name_hint input0
+          `--AwesomeVar name_hint input1
+    @AddFunc([Var(data), Var(bias)])
+    `--Call 
+       |--add 
+       |--AwesomeVar name_hint data
+       `--AwesomeVar name_hint bias
+
+
+
+Customization around Graph and Plotter
+-------------------------------------------
+Besides parsers, we can also customize graph and renderers by implementing
+abstract class :py:class:`tvm.contrib.relay_viz.interface.VizGraph` and
+:py:class:`tvm.contrib.relay_viz.interface.Plotter`.
+Here we override the ``TermGraph`` defined in ``terminal.py`` for easier demo.
+We add a hook duplicating above ``AwesomeVar``, and make ``TermPlotter`` use the new class.
+
+
+.. code-block:: default
+
+    class AwesomeGraph(TermGraph):
+        def node(self, viz_node):
+            # add the node first
+            super().node(viz_node)
+            # if it's AwesomeVar, duplicate it.
+            if viz_node.type_name == "AwesomeVar":
+                duplicated_id = f"duplciated_{viz_node.identity}"
+                duplicated_type = "double AwesomeVar"
+                super().node(VizNode(duplicated_id, duplicated_type, ""))
+                # connect the duplicated var to the original one
+                super().edge(VizEdge(duplicated_id, viz_node.identity))
+
+
+    # override TermPlotter to use `AwesomeGraph` instead
+    class AwesomePlotter(TermPlotter):
+        def create_graph(self, name):
+            self._name_to_graph[name] = AwesomeGraph(name)
+            return self._name_to_graph[name]
+
+
+    viz = relay_viz.RelayVisualizer(mod, {}, AwesomePlotter(), YourAwesomeParser())
+    viz.render()
+
+
+
+
+
+.. rst-class:: sphx-glr-script-out
+
+ Out:
+
+ .. code-block:: none
+
+    @main([Var(input0), Var(input1), Var(input2)])
+    `--Call 
+       |--GlobalVar AddFunc
+       |--AwesomeVar name_hint input2
+       |  `--double AwesomeVar 
+       `--Call 
+          |--GlobalVar AddFunc
+          |--AwesomeVar name_hint input0
+          |  `--double AwesomeVar 
+          `--AwesomeVar name_hint input1
+             `--double AwesomeVar 
+    @AddFunc([Var(data), Var(bias)])
+    `--Call 
+       |--add 
+       |--AwesomeVar name_hint data
+       |  `--double AwesomeVar 
+       `--AwesomeVar name_hint bias
+          `--double AwesomeVar 
+
+
+
+Summary
+-------
+This tutorial demonstrates the usage of Relay Visualizer and customization.
+The class :py:class:`tvm.contrib.relay_viz.RelayVisualizer` is composed of interfaces
+defined in ``interface.py``.
+
+It is aimed for quick look-then-fix iterations.
+The constructor arguments are intended to be simple, while the customization is still
+possible through a set of interface classes.
+
+
+
+.. _sphx_glr_download_how_to_work_with_relay_using_relay_viz.py:
+
+
+.. only :: html
+
+ .. container:: sphx-glr-footer
+    :class: sphx-glr-footer-example
+
+
+
+  .. container:: sphx-glr-download
+
+     :download:`Download Python source code: using_relay_viz.py <using_relay_viz.py>`
+
+
+
+  .. container:: sphx-glr-download
+
+     :download:`Download Jupyter notebook: using_relay_viz.ipynb <using_relay_viz.ipynb>`
+
+
+.. only:: html
+
+ .. rst-class:: sphx-glr-signature
+
+    `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.github.io>`_
diff --git a/docs/_sources/how_to/work_with_schedules/reduction.rst.txt b/docs/_sources/how_to/work_with_schedules/reduction.rst.txt
index 3a4485f..264149c 100644
--- a/docs/_sources/how_to/work_with_schedules/reduction.rst.txt
+++ b/docs/_sources/how_to/work_with_schedules/reduction.rst.txt
@@ -148,7 +148,8 @@ axis by different factors. The result is a nested reduction.
             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))])
+                  let cse_var_1: int32 = ((i.outer*32) + i.inner)
+                  B_2[(cse_var_1*stride)] = ((float32*)B_2[(cse_var_1*stride)] + (float32*)A_2[((cse_var_1*stride_1) + (((k.outer*16) + k.inner)*stride_2))])
                 }
               }
             }
@@ -325,6 +326,18 @@ columns by threadIdx.x and finally do a cross thread reduction over threadIdx.x
  .. code-block:: none
 
 
+    #if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ < 700)
+    #define __shfl_sync(mask, var, lane, width) \
+            __shfl((var), (lane), (width))
+
+    #define __shfl_down_sync(mask, var, offset, width) \
+            __shfl_down((var), (offset), (width))
+
+    #define __shfl_up_sync(mask, var, offset, width) \
+            __shfl_up((var), (offset), (width))
+    #endif
+
+
     #ifdef _WIN32
       using uint = unsigned int;
       using uchar = unsigned char;
@@ -340,7 +353,7 @@ columns by threadIdx.x and finally do a cross thread reduction over threadIdx.x
     #endif
     extern "C" __global__ void __launch_bounds__(512) 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];
+      float red_buf0[1];
       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) {
@@ -354,22 +367,21 @@ columns by threadIdx.x and finally do a cross thread reduction over threadIdx.x
           }
         }
       }
-      __syncthreads();
-      ((volatile float*)red_buf0)[(((((int)threadIdx.y) * 16) + ((int)threadIdx.x)))] = B_rf[(0)];
-      __syncthreads();
-      if (((int)threadIdx.x) < 8) {
-        float w_8_0 = (((volatile float*)red_buf0)[(((((int)threadIdx.y) * 16) + ((int)threadIdx.x)))] + ((volatile float*)red_buf0)[((((((int)threadIdx.y) * 16) + ((int)threadIdx.x)) + 8))]);
-        ((volatile float*)red_buf0)[(((((int)threadIdx.y) * 16) + ((int)threadIdx.x)))] = w_8_0;
-        float w_4_0 = (((volatile float*)red_buf0)[(((((int)threadIdx.y) * 16) + ((int)threadIdx.x)))] + ((volatile float*)red_buf0)[((((((int)threadIdx.y) * 16) + ((int)threadIdx.x)) + 4))]);
-        ((volatile float*)red_buf0)[(((((int)threadIdx.y) * 16) + ((int)threadIdx.x)))] = w_4_0;
-        float w_2_0 = (((volatile float*)red_buf0)[(((((int)threadIdx.y) * 16) + ((int)threadIdx.x)))] + ((volatile float*)red_buf0)[((((((int)threadIdx.y) * 16) + ((int)threadIdx.x)) + 2))]);
-        ((volatile float*)red_buf0)[(((((int)threadIdx.y) * 16) + ((int)threadIdx.x)))] = w_2_0;
-        float w_1_0 = (((volatile float*)red_buf0)[(((((int)threadIdx.y) * 16) + ((int)threadIdx.x)))] + ((volatile float*)red_buf0)[((((((int)threadIdx.y) * 16) + ((int)threadIdx.x)) + 1))]);
-        ((volatile float*)red_buf0)[(((((int)threadIdx.y) * 16) + ((int)threadIdx.x)))] = w_1_0;
-      }
-      __syncthreads();
+      uint mask[1];
+      float t0[1];
+      red_buf0[(0)] = B_rf[(0)];
+      mask[(0)] = (__activemask() & ((uint)(65535 << (((int)threadIdx.y) * 16))));
+      t0[(0)] = __shfl_down_sync(mask[(0)], red_buf0[(0)], 8, 32);
+      red_buf0[(0)] = (red_buf0[(0)] + t0[(0)]);
+      t0[(0)] = __shfl_down_sync(mask[(0)], red_buf0[(0)], 4, 32);
+      red_buf0[(0)] = (red_buf0[(0)] + t0[(0)]);
+      t0[(0)] = __shfl_down_sync(mask[(0)], red_buf0[(0)], 2, 32);
+      red_buf0[(0)] = (red_buf0[(0)] + t0[(0)]);
+      t0[(0)] = __shfl_down_sync(mask[(0)], red_buf0[(0)], 1, 32);
+      red_buf0[(0)] = (red_buf0[(0)] + t0[(0)]);
+      red_buf0[(0)] = __shfl_sync(mask[(0)], red_buf0[(0)], (((int)threadIdx.y) * 16), 32);
       if (((int)threadIdx.x) == 0) {
-        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))] = red_buf0[(0)];
       }
     }
 
diff --git a/docs/_sources/how_to/work_with_schedules/scan.rst.txt b/docs/_sources/how_to/work_with_schedules/scan.rst.txt
index 93c0be2..b2f2486 100644
--- a/docs/_sources/how_to/work_with_schedules/scan.rst.txt
+++ b/docs/_sources/how_to/work_with_schedules/scan.rst.txt
@@ -113,7 +113,8 @@ To split on the time iteration, user can schedule on scan_op.scan_axis instead.
         attr [IterVar(blockIdx.x, (nullptr), "ThreadIndex", "blockIdx.x")] "thread_extent" = floordiv((n + 255), 256);
         attr [IterVar(threadIdx.x, (nullptr), "ThreadIndex", "threadIdx.x")] "thread_extent" = 256;
         if @tir.likely((((blockIdx.x*256) + threadIdx.x) < n), dtype=bool) {
-          scan_2[(((scan.idx + 1)*stride) + (((blockIdx.x*256) + threadIdx.x)*stride_1))] = ((float32*)scan_2[((scan.idx*stride) + (((blockIdx.x*256) + threadIdx.x)*stride_1))] + (float32*)X_2[(((scan.idx + 1)*stride_2) + (((blockIdx.x*256) + threadIdx.x)*stride_3))])
+          let cse_var_1: int32 = (scan.idx + 1)
+          scan_2[((cse_var_1*stride) + (((blockIdx.x*256) + threadIdx.x)*stride_1))] = ((float32*)scan_2[((scan.idx*stride) + (((blockIdx.x*256) + threadIdx.x)*stride_1))] + (float32*)X_2[((cse_var_1*stride_2) + (((blockIdx.x*256) + threadIdx.x)*stride_3))])
         }
       }
     }
@@ -216,7 +217,9 @@ the body of scan to be compute_at locations outside the scan loop.
             }
             for (i.inner: int32, 0, 32) {
               if @tir.likely((((i.outer*32) + i.inner) < n), dtype=bool) {
-                scan_2[(((scan.idx + 1)*stride) + (((i.outer*32) + i.inner)*stride_1))] = ((float32*)s1[i.inner] + (float32*)X_2[(((scan.idx + 1)*stride_2) + (((i.outer*32) + i.inner)*stride_3))])
+                let cse_var_2: int32 = (scan.idx + 1)
+                let cse_var_1: int32 = ((i.outer*32) + i.inner)
+                scan_2[((cse_var_2*stride) + (cse_var_1*stride_1))] = ((float32*)s1[i.inner] + (float32*)X_2[((cse_var_2*stride_2) + (cse_var_1*stride_3))])
               }
             }
           }
@@ -278,7 +281,8 @@ The following example demonstrates how we can build recurrence with two states.
       }
       for (scan.idx: int32, 0, (m - 1)) {
         for (i_2: int32, 0, n) {
-          scan_5[(((scan.idx + 1)*stride_4) + (i_2*stride_5))] = ((float32*)scan_5[((scan.idx*stride_4) + (i_2*stride_5))] + (float32*)X_2[(((scan.idx + 1)*stride_2) + (i_2*stride_3))])
+          let cse_var_1: int32 = (scan.idx + 1)
+          scan_5[((cse_var_1*stride_4) + (i_2*stride_5))] = ((float32*)scan_5[((scan.idx*stride_4) + (i_2*stride_5))] + (float32*)X_2[((cse_var_1*stride_2) + (i_2*stride_3))])
         }
         for (i_3: int32, 0, l) {
           scan_4[(((scan.idx + 1)*stride) + (i_3*stride_1))] = ((float32*)scan_4[((scan.idx*stride) + (i_3*stride_1))] + (float32*)scan_5[(scan.idx*stride_4)])
diff --git a/docs/_sources/how_to/work_with_schedules/schedule_primitives.rst.txt b/docs/_sources/how_to/work_with_schedules/schedule_primitives.rst.txt
index a7ab799..5b55409 100644
--- a/docs/_sources/how_to/work_with_schedules/schedule_primitives.rst.txt
+++ b/docs/_sources/how_to/work_with_schedules/schedule_primitives.rst.txt
@@ -87,13 +87,13 @@ schedule computes tensor in a serial manner in a row-major order.
 
     @main = primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"from_legacy_te_schedule": True, "global_symbol": "main", "tir.noalias": True}
-      buffers = {A: Buffer(A_2: Pointer(float32), float32, [m: int32, n: int32], [stride: int32, stride_1: int32], type="auto"),
-                 C: Buffer(C_2: Pointer(float32), float32, [m, n], [stride_2: int32, stride_3: int32], type="auto"),
+      buffers = {C: Buffer(C_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"),
                  B: Buffer(B_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) {
-          C_2[((i*stride_2) + (j*stride_3))] = ((float32*)A_2[((i*stride) + (j*stride_1))]*(float32*)B_2[((i*stride_4) + (j*stride_5))])
+          C_2[((i*stride) + (j*stride_1))] = ((float32*)A_2[((i*stride_2) + (j*stride_3))]*(float32*)B_2[((i*stride_4) + (j*stride_5))])
         }
       }
     }
@@ -139,7 +139,8 @@ split
       for (i.outer: int32, 0, floordiv((m + 31), 32)) {
         for (i.inner: int32, 0, 32) {
           if @tir.likely((((i.outer*32) + i.inner) < m), dtype=bool) {
-            B_2[(((i.outer*32) + i.inner)*stride)] = ((float32*)A_2[(((i.outer*32) + i.inner)*stride_1)]*2f32)
+            let cse_var_1: int32 = ((i.outer*32) + i.inner)
+            B_2[(cse_var_1*stride)] = ((float32*)A_2[(cse_var_1*stride_1)]*2f32)
           }
         }
       }
@@ -226,7 +227,9 @@ axes.
             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))]
+                  let cse_var_2: int32 = ((j.outer*5) + j.inner)
+                  let cse_var_1: int32 = ((i.outer*10) + i.inner)
+                  B_2[((cse_var_1*stride) + (cse_var_2*stride_1))] = (float32*)A_2[((cse_var_1*stride_2) + (cse_var_2*stride_3))]
                 }
               }
             }
@@ -276,7 +279,9 @@ fuse
           for (i.inner.j.inner.fused: int32, 0, 50) {
             if @tir.likely((((i.outer*10) + floordiv(i.inner.j.inner.fused, 5)) < m), dtype=bool) {
               if @tir.likely((((j.outer*5) + floormod(i.inner.j.inner.fused, 5)) < n), dtype=bool) {
-                B_2[((((i.outer*10) + floordiv(i.inner.j.inner.fused, 5))*stride) + (((j.outer*5) + floormod(i.inner.j.inner.fused, 5))*stride_1))] = (float32*)A_2[((((i.outer*10) + floordiv(i.inner.j.inner.fused, 5))*stride_2) + (((j.outer*5) + floormod(i.inner.j.inner.fused, 5))*stride_3))]
+                let cse_var_2: int32 = ((j.outer*5) + floormod(i.inner.j.inner.fused, 5))
+                let cse_var_1: int32 = ((i.outer*10) + floordiv(i.inner.j.inner.fused, 5))
+                B_2[((cse_var_1*stride) + (cse_var_2*stride_1))] = (float32*)A_2[((cse_var_1*stride_2) + (cse_var_2*stride_3))]
               }
             }
           }
@@ -326,7 +331,9 @@ reorder
             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))]
+                  let cse_var_2: int32 = ((j.outer*5) + j.inner)
+                  let cse_var_1: int32 = ((i.outer*10) + i.inner)
+                  B_2[((cse_var_1*stride) + (cse_var_2*stride_1))] = (float32*)A_2[((cse_var_1*stride_2) + (cse_var_2*stride_3))]
                 }
               }
             }
diff --git a/docs/_sources/how_to/work_with_schedules/sg_execution_times.rst.txt b/docs/_sources/how_to/work_with_schedules/sg_execution_times.rst.txt
index 6d5f5db..e784942 100644
--- a/docs/_sources/how_to/work_with_schedules/sg_execution_times.rst.txt
+++ b/docs/_sources/how_to/work_with_schedules/sg_execution_times.rst.txt
@@ -5,13 +5,13 @@
 
 Computation times
 =================
-**00:06.819** total execution time for **how_to_work_with_schedules** files:
+**00:05.781** total execution time for **how_to_work_with_schedules** files:
 
-- **00:02.770**: :ref:`sphx_glr_how_to_work_with_schedules_intrin_math.py` (``intrin_math.py``)
-- **00:01.075**: :ref:`sphx_glr_how_to_work_with_schedules_tensorize.py` (``tensorize.py``)
-- **00:00.948**: :ref:`sphx_glr_how_to_work_with_schedules_scan.py` (``scan.py``)
-- **00:00.942**: :ref:`sphx_glr_how_to_work_with_schedules_reduction.py` (``reduction.py``)
-- **00:00.356**: :ref:`sphx_glr_how_to_work_with_schedules_extern_op.py` (``extern_op.py``)
-- **00:00.280**: :ref:`sphx_glr_how_to_work_with_schedules_schedule_primitives.py` (``schedule_primitives.py``)
-- **00:00.268**: :ref:`sphx_glr_how_to_work_with_schedules_tuple_inputs.py` (``tuple_inputs.py``)
-- **00:00.180**: :ref:`sphx_glr_how_to_work_with_schedules_tedd.py` (``tedd.py``)
+- **00:02.131**: :ref:`sphx_glr_how_to_work_with_schedules_intrin_math.py` (``intrin_math.py``)
+- **00:01.204**: :ref:`sphx_glr_how_to_work_with_schedules_tensorize.py` (``tensorize.py``)
+- **00:00.736**: :ref:`sphx_glr_how_to_work_with_schedules_reduction.py` (``reduction.py``)
+- **00:00.727**: :ref:`sphx_glr_how_to_work_with_schedules_scan.py` (``scan.py``)
+- **00:00.309**: :ref:`sphx_glr_how_to_work_with_schedules_extern_op.py` (``extern_op.py``)
+- **00:00.232**: :ref:`sphx_glr_how_to_work_with_schedules_schedule_primitives.py` (``schedule_primitives.py``)
+- **00:00.227**: :ref:`sphx_glr_how_to_work_with_schedules_tedd.py` (``tedd.py``)
+- **00:00.214**: :ref:`sphx_glr_how_to_work_with_schedules_tuple_inputs.py` (``tuple_inputs.py``)
diff --git a/docs/_sources/how_to/work_with_schedules/tensorize.rst.txt b/docs/_sources/how_to/work_with_schedules/tensorize.rst.txt
index 096140d..a26ab6b 100644
--- a/docs/_sources/how_to/work_with_schedules/tensorize.rst.txt
+++ b/docs/_sources/how_to/work_with_schedules/tensorize.rst.txt
@@ -79,7 +79,8 @@ The following lines describe the computation :code:`A * B^T` in TVM.
         for (j: int32, 0, 512) {
           C_2[((i*512) + j)] = 0f32
           for (k: int32, 0, 64) {
-            C_2[((i*512) + j)] = ((float32*)C_2[((i*512) + j)] + ((float32*)A_2[((i*64) + k)]*(float32*)B_2[((j*64) + k)]))
+            let cse_var_1: int32 = ((i*512) + j)
+            C_2[cse_var_1] = ((float32*)C_2[cse_var_1] + ((float32*)A_2[((i*64) + k)]*(float32*)B_2[((j*64) + k)]))
           }
         }
       }
@@ -129,7 +130,8 @@ Thus we break down the matmul loops to make the innermost loops a (16x64) GEMV.
           for (j.inner: int32, 0, 16) {
             C_2[(((i*512) + (j.outer*16)) + j.inner)] = 0f32
             for (k: int32, 0, 64) {
-              C_2[(((i*512) + (j.outer*16)) + j.inner)] = ((float32*)C_2[(((i*512) + (j.outer*16)) + j.inner)] + ((float32*)A_2[((i*64) + k)]*(float32*)B_2[(((j.outer*1024) + (j.inner*64)) + k)]))
+              let cse_var_1: int32 = (((i*512) + (j.outer*16)) + j.inner)
+              C_2[cse_var_1] = ((float32*)C_2[cse_var_1] + ((float32*)A_2[((i*64) + k)]*(float32*)B_2[(((j.outer*1024) + (j.inner*64)) + k)]))
             }
           }
         }
@@ -309,12 +311,12 @@ The importing needs to happen before the tensorized GEMV being executed.
 
     @main = primfn(A_1: handle, B_1: handle, C_1: handle) -> ()
       attr = {"from_legacy_te_schedule": True, "global_symbol": "main", "tir.noalias": True}
-      buffers = {A: Buffer(A_2: Pointer(float32), float32, [1024, 64], []),
-                 C: Buffer(C_2: Pointer(float32), float32, [1024, 512], []),
+      buffers = {C: Buffer(C_2: Pointer(float32), float32, [1024, 512], []),
+                 A: Buffer(A_2: Pointer(float32), float32, [1024, 64], []),
                  B: Buffer(B_2: Pointer(float32), float32, [512, 64], [])}
       buffer_map = {A_1: A, B_1: B, C_1: C} {
-      attr [IterVar(i: int32, (nullptr), "DataPar", "")] "pragma_import_llvm" = "; ModuleID = '/tmp/tmpdzp_v5tr/input0.cc'
-    source_filename = "/tmp/tmpdzp_v5tr/input0.cc"
+      attr [IterVar(i: int32, (nullptr), "DataPar", "")] "pragma_import_llvm" = "; ModuleID = '/tmp/tmpc2h1yvzp/input0.cc'
+    source_filename = "/tmp/tmpc2h1yvzp/input0.cc"
     target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
     target triple = "x86_64-pc-linux-gnu"
 
diff --git a/docs/_sources/how_to/work_with_schedules/tuple_inputs.rst.txt b/docs/_sources/how_to/work_with_schedules/tuple_inputs.rst.txt
index c4d4e0a..2cac989 100644
--- a/docs/_sources/how_to/work_with_schedules/tuple_inputs.rst.txt
+++ b/docs/_sources/how_to/work_with_schedules/tuple_inputs.rst.txt
@@ -64,15 +64,15 @@ together in the next schedule procedure.
 
     @main = primfn(A0_1: handle, A1_1: handle, B_2: handle, B_3: handle) -> ()
       attr = {"from_legacy_te_schedule": True, "global_symbol": "main", "tir.noalias": True}
-      buffers = {B_1: Buffer(B_4: Pointer(float32), float32, [m: int32, n: int32], [stride: int32, stride_1: int32], type="auto"),
-                 B: Buffer(B_5: 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"),
+      buffers = {B: Buffer(B_4: Pointer(float32), float32, [m: int32, n: int32], [stride: int32, stride_1: int32], type="auto"),
+                 A0: Buffer(A0_2: Pointer(float32), float32, [m, n], [stride_2: int32, stride_3: int32], type="auto"),
+                 B_1: Buffer(B_5: Pointer(float32), float32, [m, n], [stride_4: int32, stride_5: int32], type="auto"),
                  A1: Buffer(A1_2: Pointer(float32), float32, [m, n], [stride_6: int32, stride_7: int32], type="auto")}
       buffer_map = {A0_1: A0, A1_1: A1, B_2: B, B_3: B_1} {
       for (i: int32, 0, m) {
         for (j: int32, 0, n) {
-          B_5[((i*stride_2) + (j*stride_3))] = ((float32*)A0_2[((i*stride_4) + (j*stride_5))] + 2f32)
-          B_4[((i*stride) + (j*stride_1))] = ((float32*)A1_2[((i*stride_6) + (j*stride_7))]*3f32)
+          B_4[((i*stride) + (j*stride_1))] = ((float32*)A0_2[((i*stride_2) + (j*stride_3))] + 2f32)
+          B_5[((i*stride_4) + (j*stride_5))] = ((float32*)A1_2[((i*stride_6) + (j*stride_7))]*3f32)
         }
       }
     }
@@ -135,17 +135,17 @@ with :py:func:`te.comm_reducer` as below:
 
     @main = primfn(idx_1: handle, val_1: handle, T_2: handle, T_3: handle) -> ()
       attr = {"from_legacy_te_schedule": True, "global_symbol": "main", "tir.noalias": True}
-      buffers = {T_1: Buffer(T_4: Pointer(int32), int32, [m: int32], [stride: int32], type="auto"),
-                 T: Buffer(T_5: Pointer(int32), int32, [m], [stride_1: int32], type="auto"),
+      buffers = {T: Buffer(T_4: Pointer(int32), int32, [m: int32], [stride: int32], type="auto"),
+                 T_1: Buffer(T_5: Pointer(int32), int32, [m], [stride_1: int32], type="auto"),
                  idx: Buffer(idx_2: Pointer(int32), int32, [m, n: int32], [stride_2: int32, stride_3: int32], type="auto"),
                  val: Buffer(val_2: Pointer(int32), int32, [m, n], [stride_4: int32, stride_5: int32], type="auto")}
       buffer_map = {idx_1: idx, val_1: val, T_2: T, T_3: T_1} {
       for (i: int32, 0, m) {
-        T_5[(i*stride_1)] = -1
-        T_4[(i*stride)] = -2147483648
+        T_4[(i*stride)] = -1
+        T_5[(i*stride_1)] = -2147483648
         for (k: int32, 0, n) {
-          T_5[(i*stride_1)] = @tir.if_then_else(((int32*)val_2[((i*stride_4) + (k*stride_5))] <= (int32*)T_4[(i*stride)]), (int32*)T_5[(i*stride_1)], (int32*)idx_2[((i*stride_2) + (k*stride_3))], dtype=int32)
-          T_4[(i*stride)] = @tir.if_then_else(((int32*)val_2[((i*stride_4) + (k*stride_5))] <= (int32*)T_4[(i*stride)]), (int32*)T_4[(i*stride)], (int32*)val_2[((i*stride_4) + (k*stride_5))], dtype=int32)
+          T_4[(i*stride)] = @tir.if_then_else(((int32*)val_2[((i*stride_4) + (k*stride_5))] <= (int32*)T_5[(i*stride_1)]), (int32*)T_4[(i*stride)], (int32*)idx_2[((i*stride_2) + (k*stride_3))], dtype=int32)
+          T_5[(i*stride_1)] = @tir.if_then_else(((int32*)val_2[((i*stride_4) + (k*stride_5))] <= (int32*)T_5[(i*stride_1)]), (int32*)T_5[(i*stride_1)], (int32*)val_2[((i*stride_4) + (k*stride_5))], dtype=int32)
         }
       }
     }
diff --git a/docs/_sources/install/from_source.rst.txt b/docs/_sources/install/from_source.rst.txt
index 4fad42b..bba8291 100644
--- a/docs/_sources/install/from_source.rst.txt
+++ b/docs/_sources/install/from_source.rst.txt
@@ -60,7 +60,7 @@ It is also possible to :ref:`build the runtime <deploy-and-integration>` library
 The minimal building requirements for the ``TVM`` libraries are:
 
    - A recent c++ compiler supporting C++ 14 (g++-5 or higher)
-   - CMake 3.5 or higher
+   - CMake 3.10 or higher
    - We highly recommend to build with LLVM to enable all the features.
    - If you want to use CUDA, CUDA toolkit version >= 8.0 is required. If you are upgrading from an older version, make sure you purge the older version and reboot after installation.
    - On macOS, you may want to install `Homebrew <https://brew.sh>`_ to easily install and manage dependencies.
diff --git a/docs/_sources/reference/api/python/contrib.rst.txt b/docs/_sources/reference/api/python/contrib.rst.txt
index 0eb3024..52d3faf 100644
--- a/docs/_sources/reference/api/python/contrib.rst.txt
+++ b/docs/_sources/reference/api/python/contrib.rst.txt
@@ -93,6 +93,16 @@ tvm.contrib.random
     :members:
 
 
+tvm.contrib.relay_viz
+~~~~~~~~~~~~~~~~~~~~~
+.. automodule:: tvm.contrib.relay_viz
+    :members:
+.. automodule:: tvm.contrib.relay_viz.interface
+    :members:
+.. automodule:: tvm.contrib.relay_viz.terminal
+    :members:
+
+
 tvm.contrib.rocblas
 ~~~~~~~~~~~~~~~~~~~
 .. automodule:: tvm.contrib.rocblas
diff --git a/docs/_sources/reference/langref/relay_op.rst.txt b/docs/_sources/reference/langref/relay_op.rst.txt
index 3e797fc..8bc24b9 100644
--- a/docs/_sources/reference/langref/relay_op.rst.txt
+++ b/docs/_sources/reference/langref/relay_op.rst.txt
@@ -231,5 +231,17 @@ This level supports dialect operators.
 .. autosummary::
    :nosignatures:
 
-   tvm.relay.qnn.op.requantize
+   tvm.relay.qnn.op.add
+   tvm.relay.qnn.op.batch_matmul
+   tvm.relay.qnn.op.concatenate
    tvm.relay.qnn.op.conv2d
+   tvm.relay.qnn.op.conv2d_transpose
+   tvm.relay.qnn.op.dense
+   tvm.relay.qnn.op.dequantize
+   tvm.relay.qnn.op.mul
+   tvm.relay.qnn.op.quantize
+   tvm.relay.qnn.op.requantize
+   tvm.relay.qnn.op.rsqrt
+   tvm.relay.qnn.op.simulated_dequantize
+   tvm.relay.qnn.op.simulated_quantize
+   tvm.relay.qnn.op.subtract
diff --git a/docs/_sources/topic/vta/tutorials/autotvm/sg_execution_times.rst.txt b/docs/_sources/topic/vta/tutorials/autotvm/sg_execution_times.rst.txt
index d612cf2..f3875a0 100644
--- a/docs/_sources/topic/vta/tutorials/autotvm/sg_execution_times.rst.txt
+++ b/docs/_sources/topic/vta/tutorials/autotvm/sg_execution_times.rst.txt
@@ -5,7 +5,7 @@
 
 Computation times
 =================
-**00:19.905** total execution time for **topic_vta_tutorials_autotvm** files:
+**00:19.321** total execution time for **topic_vta_tutorials_autotvm** files:
 
-- **00:19.748**: :ref:`sphx_glr_topic_vta_tutorials_autotvm_tune_relay_vta.py` (``tune_relay_vta.py``)
-- **00:00.158**: :ref:`sphx_glr_topic_vta_tutorials_autotvm_tune_alu_vta.py` (``tune_alu_vta.py``)
+- **00:19.128**: :ref:`sphx_glr_topic_vta_tutorials_autotvm_tune_relay_vta.py` (``tune_relay_vta.py``)
+- **00:00.193**: :ref:`sphx_glr_topic_vta_tutorials_autotvm_tune_alu_vta.py` (``tune_alu_vta.py``)
diff --git a/docs/_sources/topic/vta/tutorials/autotvm/tune_relay_vta.rst.txt b/docs/_sources/topic/vta/tutorials/autotvm/tune_relay_vta.rst.txt
... 569487 lines suppressed ...