You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tvm.apache.org by tq...@apache.org on 2026/09/25 01:40:58 UTC

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

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

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


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

commit bbf4505986b47a1f71e146bcaeb34e71d35e8e19
Author: tvm-bot <95...@users.noreply.github.com>
AuthorDate: Fri Sep 25 01:40:48 2026 +0000

    deploying docs (apache/tvm@7188215f5c5d08685949f47c5a1290daa92d278a)
---
 .../import_model.zip                               |  Bin 35138 -> 35138 bytes
 .../dlight_gpu_scheduling.zip                      |  Bin 26311 -> 26311 bytes
 .../11c11e53c7dace51a8be968ee169ed0d/ir_module.zip |  Bin 23756 -> 23756 bytes
 .../tir_transformation.zip                         |  Bin 15923 -> 15990 bytes
 .../meta_schedule.zip                              |  Bin 24239 -> 24239 bytes
 .../relax_creation.ipynb                           |    6 +-
 .../tir_transformation.py                          |   21 +-
 .../mix_python_and_tvm_with_pymodule.zip           |  Bin 38923 -> 38896 bytes
 .../relax_creation.zip                             |  Bin 22429 -> 22470 bytes
 .../tir_creation.py                                |   67 +-
 .../relax_transformation.zip                       |  Bin 11480 -> 11480 bytes
 .../optimize_llm.zip                               |  Bin 53997 -> 53997 bytes
 .../bring_your_own_codegen.zip                     |  Bin 36295 -> 36295 bytes
 .../relax_creation.py                              |   19 +-
 .../e2e_opt_model.zip                              |  Bin 14479 -> 14479 bytes
 .../quick_start.zip                                |  Bin 16252 -> 16252 bytes
 .../export_and_load_executable.zip                 |  Bin 31408 -> 31408 bytes
 .../tir_creation.zip                               |  Bin 24580 -> 24623 bytes
 .../tir_creation.ipynb                             |   10 +-
 .../mix_python_and_tvm_with_pymodule.py            |   23 +-
 .../tir_transformation.ipynb                       |    2 +-
 .../mix_python_and_tvm_with_pymodule.ipynb         |   12 +-
 .../cross_compilation_and_rpc.zip                  |  Bin 62286 -> 62286 bytes
 .../customize_opt.zip                              |  Bin 20522 -> 20522 bytes
 docs/_sources/arch/tvmscript.rst                   |  732 +--
 docs/_sources/deep_dive/relax/learning.rst         |   19 +-
 .../deep_dive/relax/tutorials/relax_creation.rst   |  134 +-
 .../relax/tutorials/relax_transformation.rst       |  172 +-
 .../relax/tutorials/sg_execution_times.rst         |    4 +-
 docs/_sources/deep_dive/tensor_ir/abstraction.rst  |   11 +-
 docs/_sources/deep_dive/tensor_ir/learning.rst     |   67 +-
 .../tensor_ir/tutorials/dlight_gpu_scheduling.rst  |  342 +-
 .../tensor_ir/tutorials/sg_execution_times.rst     |    8 +-
 .../deep_dive/tensor_ir/tutorials/tir_creation.rst |  155 +-
 .../tensor_ir/tutorials/tir_transformation.rst     |  236 +-
 docs/_sources/get_started/tutorials/ir_module.rst  |  180 +-
 .../_sources/get_started/tutorials/quick_start.rst |    4 +-
 .../get_started/tutorials/sg_execution_times.rst   |    6 +-
 .../how_to/tutorials/cross_compilation_and_rpc.rst |    6 +-
 docs/_sources/how_to/tutorials/customize_opt.rst   |   55 +-
 docs/_sources/how_to/tutorials/e2e_opt_model.rst   |    2 +-
 .../tutorials/mix_python_and_tvm_with_pymodule.rst |   53 +-
 .../how_to/tutorials/sg_execution_times.rst        |   16 +-
 docs/_sources/sg_execution_times.rst               |   28 +-
 docs/arch/tvmscript.html                           |  792 +--
 docs/commit_hash                                   |    2 +-
 docs/deep_dive/relax/learning.html                 |   19 +-
 docs/deep_dive/relax/tutorials/relax_creation.html |  102 +-
 .../relax/tutorials/relax_transformation.html      |  172 +-
 .../relax/tutorials/sg_execution_times.html        |    4 +-
 docs/deep_dive/tensor_ir/abstraction.html          |   11 +-
 docs/deep_dive/tensor_ir/learning.html             |   67 +-
 .../tensor_ir/tutorials/dlight_gpu_scheduling.html |  342 +-
 .../tensor_ir/tutorials/sg_execution_times.html    |    8 +-
 .../tensor_ir/tutorials/tir_creation.html          |  117 +-
 .../tensor_ir/tutorials/tir_transformation.html    |  194 +-
 docs/genindex.html                                 |   60 +-
 docs/get_started/tutorials/ir_module.html          |  180 +-
 docs/get_started/tutorials/quick_start.html        |    4 +-
 docs/get_started/tutorials/sg_execution_times.html |    6 +-
 .../tutorials/cross_compilation_and_rpc.html       |    6 +-
 docs/how_to/tutorials/customize_opt.html           |   55 +-
 docs/how_to/tutorials/e2e_opt_model.html           |    5 +-
 .../mix_python_and_tvm_with_pymodule.html          |   23 +-
 docs/how_to/tutorials/sg_execution_times.html      |   16 +-
 docs/objects.inv                                   |  Bin 28669 -> 28599 bytes
 docs/reference/api/doxygen/annotated.html          |   69 +-
 .../api/doxygen/attr__registry__map_8h.html        |    2 +-
 .../doxygen/attr__registry__map_8h__dep__incl.svg  | 2834 ++++-----
 docs/reference/api/doxygen/base__expr_8h.html      |    2 +-
 .../api/doxygen/base__expr_8h__dep__incl.svg       | 5946 +++++++++----------
 docs/reference/api/doxygen/classes.html            |    6 +-
 ...cript_1_1ir__builder_1_1IRBuilderFrameNode.html |    6 +-
 ...ilder_1_1IRBuilderFrameNode__inherit__graph.svg | 1034 ++--
 ...__builder_1_1IRBuilderFrame__inherit__graph.svg |  152 +-
 ...ilder_1_1s__tir_1_1BlockInitFrame-members.html} |   10 +-
 ..._1ir__builder_1_1s__tir_1_1BlockInitFrame.html} |   54 +-
 ...r_1_1s__tir_1_1BlockInitFrameNode-members.html} |   18 +-
 ...__builder_1_1s__tir_1_1BlockInitFrameNode.html} |   75 +-
 ...1s__tir_1_1BlockInitFrameNode__coll__graph.svg} |  142 +-
 ..._tir_1_1BlockInitFrameNode__inherit__graph.svg} |  104 +-
 ...r_1_1s__tir_1_1BlockInitFrame__coll__graph.svg} |    8 +-
 ..._1s__tir_1_1BlockInitFrame__inherit__graph.svg} |    8 +-
 ...uilder_1_1s__tir_1_1PrimFuncFrame-members.html} |   16 +-
 ...1_1ir__builder_1_1s__tir_1_1PrimFuncFrame.html} |   61 +-
 ...er_1_1s__tir_1_1PrimFuncFrameNode-members.html} |   41 +-
 ...ir__builder_1_1s__tir_1_1PrimFuncFrameNode.html |  334 ++
 ...1_1s__tir_1_1PrimFuncFrameNode__coll__graph.svg |  245 +
 ...s__tir_1_1PrimFuncFrameNode__inherit__graph.svg |  194 +
 ...der_1_1s__tir_1_1PrimFuncFrame__coll__graph.svg |  146 +
 ..._1_1s__tir_1_1PrimFuncFrame__inherit__graph.svg |  146 +
 ..._builder_1_1s__tir_1_1SBlockFrame-members.html} |   10 +-
 ...t_1_1ir__builder_1_1s__tir_1_1SBlockFrame.html} |   54 +-
 ...lder_1_1s__tir_1_1SBlockFrameNode-members.html} |   38 +-
 ...1ir__builder_1_1s__tir_1_1SBlockFrameNode.html} |  236 +-
 ..._1_1s__tir_1_1SBlockFrameNode__coll__graph.svg} |  190 +-
 ...1s__tir_1_1SBlockFrameNode__inherit__graph.svg} |  152 +-
 ...lder_1_1s__tir_1_1SBlockFrame__coll__graph.svg} |    6 +-
 ...r_1_1s__tir_1_1SBlockFrame__inherit__graph.svg} |    6 +-
 ...builder_1_1tirx_1_1AssertFrameNode-members.html |   29 +-
 ..._1_1ir__builder_1_1tirx_1_1AssertFrameNode.html |    5 +-
 ...der_1_1tirx_1_1AssertFrameNode__coll__graph.svg |   36 +-
 ..._1_1tirx_1_1AssertFrameNode__inherit__graph.svg |   98 +-
 ...__builder_1_1tirx_1_1AttrFrameNode-members.html |   27 +-
 ...pt_1_1ir__builder_1_1tirx_1_1AttrFrameNode.html |    7 +-
 ...ilder_1_1tirx_1_1AttrFrameNode__coll__graph.svg |  168 +-
 ...er_1_1tirx_1_1AttrFrameNode__inherit__graph.svg |   98 +-
 ...lder_1_1tirx_1_1BlockInitFrameNode-members.html |  101 -
 ...der_1_1tirx_1_1DeclBufferFrameNode-members.html |   27 +-
 ...ir__builder_1_1tirx_1_1DeclBufferFrameNode.html |    5 +-
 ...1_1tirx_1_1DeclBufferFrameNode__coll__graph.svg |   36 +-
 ...tirx_1_1DeclBufferFrameNode__inherit__graph.svg |   98 +-
 ...__builder_1_1tirx_1_1ElseFrameNode-members.html |   23 +-
 ...pt_1_1ir__builder_1_1tirx_1_1ElseFrameNode.html |    7 +-
 ...ilder_1_1tirx_1_1ElseFrameNode__coll__graph.svg |  134 +-
 ...er_1_1tirx_1_1ElseFrameNode__inherit__graph.svg |   96 +-
 ...r__builder_1_1tirx_1_1ForFrameNode-members.html |   35 +-
 ...ipt_1_1ir__builder_1_1tirx_1_1ForFrameNode.html |    7 +-
 ...uilder_1_1tirx_1_1ForFrameNode__coll__graph.svg |  136 +-
 ...der_1_1tirx_1_1ForFrameNode__inherit__graph.svg |   98 +-
 ...__builder_1_1tirx_1_1HintFrameNode-members.html |   25 +-
 ...pt_1_1ir__builder_1_1tirx_1_1HintFrameNode.html |    7 +-
 ...ilder_1_1tirx_1_1HintFrameNode__coll__graph.svg |  134 +-
 ...er_1_1tirx_1_1HintFrameNode__inherit__graph.svg |   96 +-
 ...ir__builder_1_1tirx_1_1IfFrameNode-members.html |   29 +-
 ...ript_1_1ir__builder_1_1tirx_1_1IfFrameNode.html |    5 +-
 ...builder_1_1tirx_1_1IfFrameNode__coll__graph.svg |   36 +-
 ...lder_1_1tirx_1_1IfFrameNode__inherit__graph.svg |   98 +-
 ...r_1_1tirx_1_1LaunchThreadFrameNode-members.html |   27 +-
 ...__builder_1_1tirx_1_1LaunchThreadFrameNode.html |    5 +-
 ...1tirx_1_1LaunchThreadFrameNode__coll__graph.svg |   36 +-
 ...rx_1_1LaunchThreadFrameNode__inherit__graph.svg |   98 +-
 ...pt_1_1ir__builder_1_1tirx_1_1PrimFuncFrame.html |    2 +-
 ...ilder_1_1tirx_1_1PrimFuncFrameNode-members.html |   29 +-
 ..._1ir__builder_1_1tirx_1_1PrimFuncFrameNode.html |  171 +-
 ...r_1_1tirx_1_1PrimFuncFrameNode__coll__graph.svg |  238 +-
 ..._1tirx_1_1PrimFuncFrameNode__inherit__graph.svg |  236 +-
 ...er_1_1tirx_1_1PrimFuncFrame__inherit__graph.svg |  130 +-
 ...builder_1_1tirx_1_1SBlockFrameNode-members.html |  112 -
 ...der_1_1tirx_1_1SBlockFrameNode__coll__graph.svg |  203 -
 ..._1_1tirx_1_1SBlockFrameNode__inherit__graph.svg |  152 -
 ...1script_1_1ir__builder_1_1tirx_1_1TIRFrame.html |    2 +-
 ...r__builder_1_1tirx_1_1TIRFrameNode-members.html |   21 +-
 ...ipt_1_1ir__builder_1_1tirx_1_1TIRFrameNode.html |   47 +-
 ...uilder_1_1tirx_1_1TIRFrameNode__coll__graph.svg |  132 +-
 ...der_1_1tirx_1_1TIRFrameNode__inherit__graph.svg |  822 +--
 ...builder_1_1tirx_1_1TIRFrame__inherit__graph.svg |  536 +-
 ...__builder_1_1tirx_1_1ThenFrameNode-members.html |   23 +-
 ...pt_1_1ir__builder_1_1tirx_1_1ThenFrameNode.html |    7 +-
 ...ilder_1_1tirx_1_1ThenFrameNode__coll__graph.svg |  134 +-
 ...er_1_1tirx_1_1ThenFrameNode__inherit__graph.svg |   96 +-
 ..._builder_1_1tirx_1_1WhileFrameNode-members.html |   25 +-
 ...t_1_1ir__builder_1_1tirx_1_1WhileFrameNode.html |    5 +-
 ...lder_1_1tirx_1_1WhileFrameNode__coll__graph.svg |   36 +-
 ...r_1_1tirx_1_1WhileFrameNode__inherit__graph.svg |   98 +-
 docs/reference/api/doxygen/config__schema_8h.html  |    2 +-
 .../api/doxygen/config__schema_8h__dep__incl.svg   | 3328 +++++------
 docs/reference/api/doxygen/cow_8h.html             |    2 +-
 docs/reference/api/doxygen/cow_8h__dep__incl.svg   | 6058 +++++++++----------
 docs/reference/api/doxygen/device__api_8h.html     |    2 +-
 .../api/doxygen/device__api_8h__dep__incl.svg      | 3486 +++++------
 ...r_000001_000015.html => dir_000001_000016.html} |    0
 docs/reference/api/doxygen/dir_000001_000035.html  |    4 +-
 ...r_000001_000035.html => dir_000001_000037.html} |    0
 ...r_000002_000012.html => dir_000002_000013.html} |    0
 ...r_000002_000015.html => dir_000002_000016.html} |    0
 ...r_000002_000035.html => dir_000002_000037.html} |    0
 ...r_000004_000015.html => dir_000004_000016.html} |    0
 docs/reference/api/doxygen/dir_000004_000033.html  |   82 -
 docs/reference/api/doxygen/dir_000004_000035.html  |    4 +-
 ...r_000004_000035.html => dir_000004_000037.html} |    0
 ...r_000005_000029.html => dir_000005_000031.html} |    0
 docs/reference/api/doxygen/dir_000006_000025.html  |   82 -
 ...r_000001_000035.html => dir_000006_000037.html} |    6 +-
 ...r_000006_000024.html => dir_000007_000025.html} |    0
 ...r_000006_000029.html => dir_000007_000031.html} |    0
 ...r_000007_000010.html => dir_000008_000011.html} |    0
 ...r_000007_000034.html => dir_000008_000036.html} |    0
 ...r_000008_000015.html => dir_000009_000016.html} |    0
 ...r_000008_000027.html => dir_000009_000028.html} |    0
 ...r_000010_000015.html => dir_000011_000016.html} |    0
 ...r_000010_000032.html => dir_000011_000034.html} |    0
 ...r_000010_000034.html => dir_000011_000036.html} |    0
 ...r_000010_000035.html => dir_000011_000037.html} |    0
 ...r_000011_000018.html => dir_000012_000019.html} |    0
 ...r_000012_000015.html => dir_000013_000016.html} |    0
 ...r_000012_000025.html => dir_000013_000026.html} |    0
 ...r_000012_000032.html => dir_000013_000034.html} |    0
 ...r_000012_000035.html => dir_000013_000037.html} |    0
 ...r_000013_000015.html => dir_000014_000016.html} |    0
 ...r_000013_000027.html => dir_000014_000028.html} |    0
 ...r_000015_000021.html => dir_000016_000022.html} |    0
 ...r_000015_000024.html => dir_000016_000025.html} |    0
 ...r_000016_000015.html => dir_000017_000016.html} |    0
 ...r_000017_000015.html => dir_000018_000016.html} |    0
 ...r_000019_000015.html => dir_000020_000016.html} |    0
 ...r_000019_000024.html => dir_000020_000025.html} |    0
 ...r_000019_000027.html => dir_000020_000028.html} |    0
 ...r_000019_000033.html => dir_000020_000035.html} |    0
 ...r_000019_000035.html => dir_000020_000037.html} |    0
 ...r_000020_000010.html => dir_000021_000011.html} |    0
 ...r_000020_000032.html => dir_000021_000034.html} |    0
 ...r_000020_000034.html => dir_000021_000036.html} |    0
 docs/reference/api/doxygen/dir_000022_000024.html  |   82 -
 ...r_000021_000024.html => dir_000022_000025.html} |    0
 ...r_000022_000015.html => dir_000023_000016.html} |    0
 docs/reference/api/doxygen/dir_000023_000025.html  |    6 +-
 docs/reference/api/doxygen/dir_000023_000029.html  |   82 -
 ...r_000023_000012.html => dir_000024_000013.html} |    0
 ...r_000023_000015.html => dir_000024_000016.html} |    0
 ...r_000023_000024.html => dir_000024_000025.html} |    0
 ...r_000023_000025.html => dir_000024_000026.html} |    0
 docs/reference/api/doxygen/dir_000024_000031.html  |    6 +-
 ...r_000023_000032.html => dir_000024_000034.html} |    0
 ...r_000023_000033.html => dir_000024_000035.html} |    0
 ...r_000023_000034.html => dir_000024_000036.html} |    0
 ...r_000023_000035.html => dir_000024_000037.html} |    0
 docs/reference/api/doxygen/dir_000025_000033.html  |    6 +-
 ...r_000025_000015.html => dir_000026_000016.html} |    0
 ...r_000025_000024.html => dir_000026_000025.html} |    0
 ...r_000025_000033.html => dir_000026_000035.html} |    0
 ...r_000025_000035.html => dir_000026_000037.html} |    2 +-
 ...r_000026_000015.html => dir_000027_000016.html} |    0
 ...r_000026_000027.html => dir_000027_000028.html} |    0
 ...r_000027_000015.html => dir_000028_000016.html} |    0
 ...r_000027_000035.html => dir_000028_000037.html} |    0
 ...r_000028_000029.html => dir_000029_000031.html} |    0
 docs/reference/api/doxygen/dir_000030_000025.html  |   82 -
 ...r_000001_000015.html => dir_000030_000037.html} |    6 +-
 ...r_000029_000015.html => dir_000031_000016.html} |    0
 ...r_000029_000024.html => dir_000031_000025.html} |    0
 ...r_000030_000024.html => dir_000032_000025.html} |    0
 ...r_000030_000029.html => dir_000032_000031.html} |    0
 docs/reference/api/doxygen/dir_000033_000024.html  |   82 -
 ...r_000032_000015.html => dir_000034_000016.html} |    0
 docs/reference/api/doxygen/dir_000034_000032.html  |   82 -
 ...r_000033_000015.html => dir_000035_000016.html} |    0
 docs/reference/api/doxygen/dir_000035_000025.html  |    6 +-
 ...r_000034_000015.html => dir_000036_000016.html} |    0
 docs/reference/api/doxygen/dir_000036_000032.html  |   82 -
 docs/reference/api/doxygen/dir_000036_000034.html  |    6 +-
 ...r_000034_000035.html => dir_000036_000037.html} |    0
 ...r_000035_000015.html => dir_000037_000016.html} |    0
 ...r_000035_000024.html => dir_000037_000025.html} |    0
 ...r_000035_000029.html => dir_000037_000031.html} |    0
 ...r_000035_000033.html => dir_000037_000035.html} |    0
 ...r_000036_000010.html => dir_000038_000011.html} |    0
 ...r_000036_000015.html => dir_000038_000016.html} |    0
 ...r_000036_000025.html => dir_000038_000026.html} |    0
 docs/reference/api/doxygen/dir_000038_000034.html  |    6 +-
 ...r_000036_000034.html => dir_000038_000036.html} |    0
 ...r_000036_000035.html => dir_000038_000037.html} |    0
 ...r_000038_000010.html => dir_000040_000011.html} |    0
 ...r_000038_000034.html => dir_000040_000036.html} |    0
 ...r_000039_000018.html => dir_000041_000019.html} |    0
 ...r_000039_000031.html => dir_000041_000033.html} |    0
 .../dir_039190d3b4246b6bdd648b90e06580e6_dep.svg   |   64 +-
 .../dir_1b9eee6a331f25f7234a59b5be6cf0c3.html      |    4 +-
 .../dir_1b9eee6a331f25f7234a59b5be6cf0c3_dep.svg   |  192 +-
 .../dir_1f1b12d204a071c9e67e47fcbb552b86_dep.svg   |   16 +-
 ...l => dir_2286223a7a03253bb7f9c6c8e35ce065.html} |   10 +-
 ...> dir_2286223a7a03253bb7f9c6c8e35ce065_dep.svg} |   34 +-
 .../dir_3a038e7bfa2370c6aee2a5aecd5d3ef1_dep.svg   |   12 +-
 .../dir_3aa603265bed35232c1e097a6669c6a3_dep.svg   |    4 +-
 .../dir_404558507ed35459f0d7a6d81d8c508d_dep.svg   |   16 +-
 .../dir_5b0337bb1f2ae9da0485a728750cd2f3_dep.svg   |   12 +-
 .../dir_5baffeed82c1190bfdf7a4f918ab5ac6_dep.svg   |    8 +-
 .../dir_5da96592f3a7c442b838b075c58254c2_dep.svg   |    8 +-
 .../dir_6cc82b4139c3f4aa3890b169cd630361_dep.svg   |   28 +-
 .../dir_81fd64b74651fd86d9cab2ecab5f7eda_dep.svg   |    8 +-
 .../dir_84875704194fd544d29fe0c7fedd8939_dep.svg   |   12 +-
 .../dir_8e4e25e66b8623d88c5b5dd2040bca97_dep.svg   |   68 +-
 .../dir_9271531d17d9c7167ab1dd030a1d79c8_dep.svg   |   12 +-
 .../dir_9352ecb2a7e18844766623e441e47954_dep.svg   |    8 +-
 .../dir_9c67aed49cb5cc58c310859ca3138751_dep.svg   |    4 +-
 .../dir_9e615ec4a59e46584bcc4e2226e148a2_dep.svg   |    8 +-
 .../dir_a59a89c7dd2e4e6561fe59bf359ce2f3_dep.svg   |    8 +-
 .../dir_a6278e6277a1dbf3f50d91573f3ea6d7_dep.svg   |   12 +-
 .../dir_af516e58a68ed3926ac047c7f6fd4436_dep.svg   |    4 +-
 .../dir_b4c7d8e826c599ba55146c099a14beb5_dep.svg   |  161 +-
 .../dir_b90d46e10078ab97201a0a7f9604a911.html      |    2 +-
 .../dir_b90d46e10078ab97201a0a7f9604a911_dep.svg   |   74 +-
 .../dir_bf4427a179fefdc4a587f4cf388c9e87_dep.svg   |   16 +-
 .../dir_ce27471116608e191d6ee7e32e88995e_dep.svg   |    4 +-
 .../dir_d331277d4303e21ded95616eb56c1a9e_dep.svg   |    8 +-
 .../dir_d3953cf7eb33eca56fc6850c0e98447d_dep.svg   |    8 +-
 .../dir_dc1ce5314cc9d796e0dab57a4d1a85fc.html      |    2 +-
 .../dir_dc1ce5314cc9d796e0dab57a4d1a85fc_dep.svg   |   78 +-
 .../dir_dc867ff9a37cad1764f1670dc7eba6c1_dep.svg   |   12 +-
 .../dir_dd7765744536179f7e866870e1013050_dep.svg   |    4 +-
 .../dir_e4a1a856a30057b9b1543256279fc7a1_dep.svg   |    4 +-
 .../dir_e75b8cf144fcb95d0911d4de8b714f27_dep.svg   |   16 +-
 .../dir_e858e07d2a37b7277117b70c78fc4052.html      |    2 +-
 .../dir_e858e07d2a37b7277117b70c78fc4052_dep.svg   |  130 +-
 .../dir_ea9fe1de508733253c4f4549dc3d6021_dep.svg   |    8 +-
 ...l => dir_ec38d0a68704e43f02e83ebca8556103.html} |   20 +-
 ...> dir_ec38d0a68704e43f02e83ebca8556103_dep.svg} |   44 +-
 .../dir_f97d855a3173728370e632aa77170e34_dep.svg   |   12 +-
 docs/reference/api/doxygen/env__func_8h.html       |    2 +-
 .../api/doxygen/env__func_8h__dep__incl.svg        | 1561 ++---
 docs/reference/api/doxygen/exec__scope_8h.html     |    2 +-
 .../api/doxygen/exec__scope_8h__dep__incl.svg      | 3736 ++++++------
 .../api/doxygen/extracted__task_8h_source.html     |    4 +-
 docs/reference/api/doxygen/files.html              |   24 +-
 docs/reference/api/doxygen/functions_a.html        |    6 +-
 docs/reference/api/doxygen/functions_b.html        |    7 +-
 docs/reference/api/doxygen/functions_e.html        |    4 +-
 docs/reference/api/doxygen/functions_f.html        |    1 +
 docs/reference/api/doxygen/functions_func_b.html   |    5 +-
 docs/reference/api/doxygen/functions_func_e.html   |    4 +-
 docs/reference/api/doxygen/functions_func_f.html   |    1 +
 docs/reference/api/doxygen/functions_func_p.html   |    2 +-
 docs/reference/api/doxygen/functions_func_r.html   |    3 +-
 docs/reference/api/doxygen/functions_func_s.html   |    2 +-
 docs/reference/api/doxygen/functions_func_t.html   |    6 +-
 docs/reference/api/doxygen/functions_func_v.html   |    5 +-
 docs/reference/api/doxygen/functions_i.html        |    6 +-
 docs/reference/api/doxygen/functions_m.html        |    2 +-
 docs/reference/api/doxygen/functions_n.html        |    4 +-
 docs/reference/api/doxygen/functions_p.html        |    8 +-
 docs/reference/api/doxygen/functions_r.html        |    9 +-
 docs/reference/api/doxygen/functions_s.html        |   15 +-
 docs/reference/api/doxygen/functions_t.html        |    9 +-
 docs/reference/api/doxygen/functions_type.html     |    5 +
 docs/reference/api/doxygen/functions_u.html        |    2 +-
 docs/reference/api/doxygen/functions_v.html        |    3 +-
 docs/reference/api/doxygen/functions_vars_a.html   |    4 +-
 docs/reference/api/doxygen/functions_vars_i.html   |    6 +-
 docs/reference/api/doxygen/functions_vars_m.html   |    2 +-
 docs/reference/api/doxygen/functions_vars_n.html   |    4 +-
 docs/reference/api/doxygen/functions_vars_p.html   |    2 +-
 docs/reference/api/doxygen/functions_vars_r.html   |    4 +-
 docs/reference/api/doxygen/functions_vars_s.html   |    1 -
 docs/reference/api/doxygen/functions_vars_w.html   |    2 +-
 docs/reference/api/doxygen/functions_w.html        |    2 +-
 docs/reference/api/doxygen/hierarchy.html          |   46 +-
 docs/reference/api/doxygen/inherit_graph_1.svg     | 1503 ++---
 docs/reference/api/doxygen/inherit_graph_10.svg    |    4 +-
 docs/reference/api/doxygen/inherit_graph_102.svg   |    4 +-
 docs/reference/api/doxygen/inherit_graph_11.svg    |    4 +-
 docs/reference/api/doxygen/inherit_graph_17.svg    |    4 +-
 docs/reference/api/doxygen/inherit_graph_18.svg    |    4 +-
 docs/reference/api/doxygen/inherit_graph_2.svg     | 2293 ++++----
 docs/reference/api/doxygen/inherit_graph_29.svg    |    4 +-
 docs/reference/api/doxygen/inherit_graph_3.svg     |   16 +-
 docs/reference/api/doxygen/inherit_graph_30.svg    |    8 +-
 docs/reference/api/doxygen/inherit_graph_33.svg    |    4 +-
 docs/reference/api/doxygen/inherit_graph_38.svg    |    4 +-
 docs/reference/api/doxygen/inherit_graph_39.svg    |    4 +-
 docs/reference/api/doxygen/inherit_graph_4.svg     |   24 +-
 docs/reference/api/doxygen/inherit_graph_5.svg     |   12 +-
 docs/reference/api/doxygen/inherit_graph_6.svg     |   32 +-
 docs/reference/api/doxygen/inherit_graph_8.svg     |    4 +-
 docs/reference/api/doxygen/io_8h.html              |    2 +-
 docs/reference/api/doxygen/io_8h__dep__incl.svg    | 1535 ++---
 docs/reference/api/doxygen/ir_2attrs_8h.html       |    2 +-
 .../api/doxygen/ir_2attrs_8h__dep__incl.svg        | 5910 +++++++++----------
 docs/reference/api/doxygen/ir_2expr_8h.html        |    2 +-
 .../api/doxygen/ir_2expr_8h__dep__incl.svg         | 5816 +++++++++---------
 docs/reference/api/doxygen/ir_2function_8h.html    |    4 +-
 .../api/doxygen/ir_2function_8h__dep__incl.svg     | 4006 ++++++-------
 .../reference/api/doxygen/ir_2global__info_8h.html |    2 +-
 .../api/doxygen/ir_2global__info_8h__dep__incl.svg | 3668 ++++++------
 docs/reference/api/doxygen/ir_2op_8h.html          |    2 +-
 .../reference/api/doxygen/ir_2op_8h__dep__incl.svg | 1343 ++---
 .../api/doxygen/ir_2op__attr__types_8h.html        |    2 +-
 .../doxygen/ir_2op__attr__types_8h__dep__incl.svg  | 5826 +++++++++---------
 .../api/doxygen/ir_2prim_2builtin_8h.html          |    2 +-
 .../doxygen/ir_2prim_2builtin_8h__dep__incl.svg    |  935 +--
 docs/reference/api/doxygen/ir_2prim_2expr_8h.html  |    2 +-
 .../api/doxygen/ir_2prim_2expr_8h__dep__incl.svg   | 3020 +++++-----
 docs/reference/api/doxygen/ir_2prim_2op_8h.html    |    2 +-
 .../api/doxygen/ir_2prim_2op_8h__dep__incl.svg     |  677 +--
 docs/reference/api/doxygen/ir_2type_8h.html        |    2 +-
 .../api/doxygen/ir_2type_8h__dep__incl.svg         | 4202 ++++++-------
 docs/reference/api/doxygen/layout_8h.html          |    2 +-
 .../reference/api/doxygen/layout_8h__dep__incl.svg | 3678 ++++++------
 docs/reference/api/doxygen/menudata.js             |    1 +
 docs/reference/api/doxygen/module_8h.html          |    2 +-
 .../reference/api/doxygen/module_8h__dep__incl.svg | 3488 +++++------
 docs/reference/api/doxygen/namespacemembers_b.html |    4 +-
 docs/reference/api/doxygen/namespacemembers_d.html |    4 +-
 .../api/doxygen/namespacemembers_func_b.html       |    4 +-
 .../api/doxygen/namespacemembers_func_d.html       |    2 +-
 .../api/doxygen/namespacemembers_func_i.html       |    2 +-
 .../api/doxygen/namespacemembers_func_l.html       |   12 +-
 .../api/doxygen/namespacemembers_func_o.html       |    2 +-
 .../api/doxygen/namespacemembers_func_p.html       |    2 +-
 .../api/doxygen/namespacemembers_func_r.html       |    6 +-
 .../api/doxygen/namespacemembers_func_s.html       |    6 +-
 .../api/doxygen/namespacemembers_func_u.html       |    2 +-
 .../api/doxygen/namespacemembers_func_w.html       |    4 +-
 docs/reference/api/doxygen/namespacemembers_i.html |    2 +-
 docs/reference/api/doxygen/namespacemembers_l.html |    2 +-
 docs/reference/api/doxygen/namespacemembers_o.html |    2 +-
 docs/reference/api/doxygen/namespacemembers_p.html |    2 +-
 docs/reference/api/doxygen/namespacemembers_r.html |    6 +-
 docs/reference/api/doxygen/namespacemembers_s.html |    6 +-
 docs/reference/api/doxygen/namespacemembers_u.html |    2 +-
 docs/reference/api/doxygen/namespacemembers_w.html |    4 +-
 docs/reference/api/doxygen/namespaces.html         |   71 +-
 .../api/doxygen/namespacetvm_1_1attr.html          |    4 +-
 .../namespacetvm_1_1script_1_1ir__builder.html     |    2 +
 ...pacetvm_1_1script_1_1ir__builder_1_1s__tir.html |  462 ++
 ..._1script_1_1ir__builder_1_1s__tir_1_1axis.html} |   66 +-
 ...espacetvm_1_1script_1_1ir__builder_1_1tirx.html |  333 +-
 .../doxygen/namespacetvm_1_1tirx_1_1transform.html |   45 +
 docs/reference/api/doxygen/object__functor_8h.html |    2 +-
 .../api/doxygen/object__functor_8h__dep__incl.svg  | 3256 ++++++-----
 docs/reference/api/doxygen/runtime_2base_8h.html   |    2 +-
 .../api/doxygen/runtime_2base_8h__dep__incl.svg    | 6164 ++++++++++----------
 docs/reference/api/doxygen/runtime_2tensor_8h.html |    2 +-
 .../api/doxygen/runtime_2tensor_8h__dep__incl.svg  | 1419 ++---
 ...html => s__tir_2script_2builder_2frame_8h.html} |   68 +-
 ..._tir_2script_2builder_2frame_8h__dep__incl.svg} |   26 +-
 .../s__tir_2script_2builder_2frame_8h__incl.svg    | 2941 ++++++++++
 .../s__tir_2script_2builder_2frame_8h_source.html  |  289 +
 .../doxygen/s__tir_2script_2builder_2ir_8h.html    |  155 +
 .../s__tir_2script_2builder_2ir_8h__incl.svg       | 3563 +++++++++++
 .../s__tir_2script_2builder_2ir_8h_source.html     |  196 +
 .../api/doxygen/s__tir_2stmt_8h__dep__incl.svg     |  126 +-
 .../api/doxygen/script_2ir__builder_2base_8h.html  |    2 +-
 .../script_2ir__builder_2base_8h__dep__incl.svg    |  151 +-
 .../doxygen/script_2ir__builder_2ir_2frame_8h.html |    2 +-
 ...cript_2ir__builder_2ir_2frame_8h__dep__incl.svg |   97 +-
 docs/reference/api/doxygen/search/all_10.js        |    2 +-
 docs/reference/api/doxygen/search/all_11.js        |   42 +-
 docs/reference/api/doxygen/search/all_13.js        |  273 +-
 docs/reference/api/doxygen/search/all_14.js        |  695 ++-
 docs/reference/api/doxygen/search/all_15.js        |  349 +-
 docs/reference/api/doxygen/search/all_16.js        |    4 +-
 docs/reference/api/doxygen/search/all_17.js        |  203 +-
 docs/reference/api/doxygen/search/all_18.js        |    4 +-
 docs/reference/api/doxygen/search/all_2.js         |   26 +-
 docs/reference/api/doxygen/search/all_3.js         |  209 +-
 docs/reference/api/doxygen/search/all_5.js         |   70 +-
 docs/reference/api/doxygen/search/all_6.js         |    8 +-
 docs/reference/api/doxygen/search/all_7.js         |  511 +-
 docs/reference/api/doxygen/search/all_a.js         |   68 +-
 docs/reference/api/doxygen/search/all_d.js         |   10 +-
 docs/reference/api/doxygen/search/all_e.js         |   10 +-
 docs/reference/api/doxygen/search/all_f.js         |    4 +-
 docs/reference/api/doxygen/search/classes_1.js     |    4 +-
 docs/reference/api/doxygen/search/classes_10.js    |    4 +-
 docs/reference/api/doxygen/search/classes_d.js     |    4 +-
 docs/reference/api/doxygen/search/files_5.js       |    2 +-
 docs/reference/api/doxygen/search/files_7.js       |    2 +-
 docs/reference/api/doxygen/search/functions_1.js   |   97 +-
 docs/reference/api/doxygen/search/functions_11.js  |  171 +-
 docs/reference/api/doxygen/search/functions_12.js  |   10 +-
 docs/reference/api/doxygen/search/functions_13.js  |   26 +-
 docs/reference/api/doxygen/search/functions_14.js  |   10 +-
 docs/reference/api/doxygen/search/functions_15.js  |  131 +-
 docs/reference/api/doxygen/search/functions_16.js  |    4 +-
 docs/reference/api/doxygen/search/functions_3.js   |   24 +-
 docs/reference/api/doxygen/search/functions_4.js   |    8 +-
 docs/reference/api/doxygen/search/functions_5.js   |  367 +-
 docs/reference/api/doxygen/search/functions_8.js   |    2 +-
 docs/reference/api/doxygen/search/functions_b.js   |   14 +-
 docs/reference/api/doxygen/search/functions_c.js   |    6 +-
 docs/reference/api/doxygen/search/functions_e.js   |    2 +-
 docs/reference/api/doxygen/search/functions_f.js   |   16 +-
 docs/reference/api/doxygen/search/namespaces_0.js  |   35 +-
 docs/reference/api/doxygen/search/typedefs_1.js    |    3 +-
 docs/reference/api/doxygen/search/variables_1.js   |    4 +-
 docs/reference/api/doxygen/search/variables_11.js  |    4 +-
 docs/reference/api/doxygen/search/variables_12.js  |  139 +-
 docs/reference/api/doxygen/search/variables_16.js  |    2 +-
 docs/reference/api/doxygen/search/variables_9.js   |    6 +-
 docs/reference/api/doxygen/search/variables_c.js   |    2 +-
 docs/reference/api/doxygen/search/variables_d.js   |    4 +-
 docs/reference/api/doxygen/search/variables_f.js   |    2 +-
 docs/reference/api/doxygen/serializer_8h.html      |    2 +-
 .../api/doxygen/serializer_8h__dep__incl.svg       | 1487 ++---
 docs/reference/api/doxygen/source__map_8h.html     |    2 +-
 .../api/doxygen/source__map_8h__dep__incl.svg      | 5982 +++++++++----------
 docs/reference/api/doxygen/target_8h.html          |    2 +-
 .../reference/api/doxygen/target_8h__dep__incl.svg | 3308 +++++------
 docs/reference/api/doxygen/target__kind_8h.html    |    2 +-
 .../api/doxygen/target__kind_8h__dep__incl.svg     | 3318 +++++------
 .../api/doxygen/tile__primitive_8h__dep__incl.svg  |  491 +-
 docs/reference/api/doxygen/tirx_2builtin_8h.html   |    2 +-
 .../api/doxygen/tirx_2builtin_8h__dep__incl.svg    |  917 +--
 docs/reference/api/doxygen/tirx_2expr_8h.html      |    2 +-
 .../api/doxygen/tirx_2expr_8h__dep__incl.svg       | 2282 ++++----
 docs/reference/api/doxygen/tirx_2function_8h.html  |    2 +-
 .../api/doxygen/tirx_2function_8h__dep__incl.svg   |  237 +-
 docs/reference/api/doxygen/tirx_2op_8h.html        |    2 +-
 .../api/doxygen/tirx_2op_8h__dep__incl.svg         |  677 +--
 .../api/doxygen/tirx_2op__attr__types_8h.html      |    2 +-
 .../tirx_2op__attr__types_8h__dep__incl.svg        |  663 ++-
 .../doxygen/tirx_2script_2builder_2frame_8h.html   |   21 +-
 .../tirx_2script_2builder_2frame_8h__dep__incl.svg |   71 +-
 .../tirx_2script_2builder_2frame_8h__incl.svg      | 3589 +++++++-----
 .../tirx_2script_2builder_2frame_8h_source.html    | 1169 ++--
 .../api/doxygen/tirx_2script_2builder_2ir_8h.html  |   61 +-
 .../tirx_2script_2builder_2ir_8h__dep__incl.svg    |   41 +
 .../doxygen/tirx_2script_2builder_2ir_8h__incl.svg | 1727 +++---
 .../tirx_2script_2builder_2ir_8h_source.html       |  459 +-
 docs/reference/api/doxygen/tirx_2stmt_8h.html      |    2 +-
 .../api/doxygen/tirx_2stmt_8h__dep__incl.svg       | 2806 ++++-----
 docs/reference/api/doxygen/tirx_2transform_8h.html |    6 +
 .../api/doxygen/tirx_2transform_8h_source.html     |  118 +-
 docs/reference/api/doxygen/tirx_2type_8h.html      |    2 +-
 .../api/doxygen/tirx_2type_8h__dep__incl.svg       | 2302 ++++----
 docs/reference/api/doxygen/var_8h.html             |    2 +-
 docs/reference/api/doxygen/var_8h__dep__incl.svg   | 3736 ++++++------
 docs/reference/api/doxygen/vector__expr_8h.html    |    2 +-
 .../api/doxygen/vector__expr_8h__dep__incl.svg     | 3034 +++++-----
 docs/reference/api/doxygen/with__context_8h.html   |    2 +-
 .../api/doxygen/with__context_8h__dep__incl.svg    | 2722 ++++-----
 docs/reference/api/python/ir.html                  |    2 +-
 docs/reference/api/python/relax/analysis.html      |    2 +-
 docs/reference/api/python/relax/block_builder.html |   24 +-
 docs/reference/api/python/relax/relax.html         |    2 +-
 docs/reference/api/python/relax/transform.html     |   28 +-
 docs/reference/api/python/s_tir/analysis.html      |    6 +-
 docs/reference/api/python/s_tir/backend.html       |    2 +-
 docs/reference/api/python/s_tir/schedule.html      |  847 +--
 docs/reference/api/python/script/ir_builder.html   |   10 +-
 docs/reference/api/python/script/script.html       |  363 +-
 docs/reference/api/python/te.html                  |   14 +-
 docs/reference/api/python/topi.html                |   10 +-
 .../api/typedoc/classes/ArtifactCache.html         |   14 +-
 .../classes/ArtifactCrossOriginStorageCache.html   |   12 +-
 .../typedoc/classes/ArtifactIndexedDBCache.html    |   16 +-
 .../api/typedoc/classes/ArtifactOPFSCache.html     |   14 +-
 docs/reference/api/typedoc/classes/CacheState.html |   10 +-
 docs/reference/api/typedoc/classes/DLDataType.html |   14 +-
 docs/reference/api/typedoc/classes/DLDevice.html   |   12 +-
 docs/reference/api/typedoc/classes/Instance.html   |  118 +-
 docs/reference/api/typedoc/classes/LRUCache.html   |   14 +-
 .../classes/LinearCongruentialGenerator.html       |   20 +-
 docs/reference/api/typedoc/classes/Module.html     |   16 +-
 docs/reference/api/typedoc/classes/RPCServer.html  |   16 +-
 docs/reference/api/typedoc/classes/Scalar.html     |    8 +-
 docs/reference/api/typedoc/classes/TVMArray.html   |   16 +-
 docs/reference/api/typedoc/classes/TVMObject.html  |   12 +-
 docs/reference/api/typedoc/classes/Tensor.html     |   36 +-
 .../api/typedoc/classes/VirtualMachine.html        |   10 +-
 .../classes/_internal_.AsyncifyHandler.html        |   14 +-
 .../classes/_internal_.CachedCallStack.html        |   38 +-
 .../classes/_internal_.CanvasRenderManager.html    |   10 +-
 .../classes/_internal_.CrossOriginStorage.html     |   12 +-
 .../typedoc/classes/_internal_.Environment.html    |   14 +-
 .../api/typedoc/classes/_internal_.FFILibrary.html |   22 +-
 .../api/typedoc/classes/_internal_.Memory.html     |   50 +-
 .../api/typedoc/classes/_internal_.OPFSStore.html  |   16 +-
 .../typedoc/classes/_internal_.PackedFuncCell.html |   12 +-
 .../typedoc/classes/_internal_.RuntimeContext.html |   74 +-
 .../typedoc/classes/_internal_.WebGPUContext.html  |   30 +-
 .../enums/_internal_.AsyncifyStateKind.html        |    8 +-
 .../typedoc/enums/_internal_.RPCServerState.html   |   14 +-
 docs/reference/api/typedoc/functions/assert.html   |    2 +-
 .../api/typedoc/functions/createArtifactCache.html |    2 +-
 .../api/typedoc/functions/createPolyfillWASI.html  |    2 +-
 .../api/typedoc/functions/deleteTensorCache.html   |    4 +-
 .../api/typedoc/functions/detectGPUDevice.html     |    2 +-
 .../api/typedoc/functions/hasTensorInCache.html    |    4 +-
 .../api/typedoc/functions/instantiate.html         |    2 +-
 docs/reference/api/typedoc/functions/wasmPath.html |    2 +-
 .../typedoc/interfaces/ArtifactCacheTemplate.html  |   10 +-
 .../api/typedoc/interfaces/Disposable.html         |    4 +-
 .../interfaces/FetchTensorCacheOptions.html        |   12 +-
 .../typedoc/interfaces/GPUDeviceDetectOutput.html  |    8 +-
 .../api/typedoc/interfaces/InitProgressReport.html |    8 +-
 .../api/typedoc/interfaces/LibraryProvider.html    |    6 +-
 .../interfaces/TensorCacheAccessOptions.html       |   10 +-
 .../_internal_.CrossOriginHashDescriptor.html      |    6 +-
 .../_internal_.CrossOriginStorageAPI.html          |    4 +-
 .../_internal_.CrossOriginStorageHandle.html       |    6 +-
 ...CrossOriginStorageRequestFileHandleOptions.html |    6 +-
 .../_internal_.CrossOriginStorageWritable.html     |    6 +-
 .../interfaces/_internal_.FunctionInfo.html        |    8 +-
 .../interfaces/_internal_.OPFSDirectoryHandle.html |    8 +-
 .../interfaces/_internal_.OPFSFileHandle.html      |    8 +-
 .../interfaces/_internal_.OPFSStorageManager.html  |    4 +-
 .../interfaces/_internal_.OPFSStoreRecord.html     |    8 +-
 .../interfaces/_internal_.OPFSStoredEntry.html     |    6 +-
 .../_internal_.OPFSSyncAccessHandle.html           |   14 +-
 .../_internal_.OPFSWritableFileStream.html         |    6 +-
 .../interfaces/_internal_.TensorCacheEntry.html    |   14 +-
 .../interfaces/_internal_.TensorShardEntry.html    |   10 +-
 .../api/typedoc/types/ArtifactCacheType.html       |    2 +-
 .../api/typedoc/types/InitProgressCallback.html    |    2 +-
 .../api/typedoc/types/OPFSAccessMode.html          |    2 +-
 docs/reference/api/typedoc/types/PackedFunc.html   |    2 +-
 docs/reference/api/typedoc/types/RNGState.html     |    2 +-
 .../typedoc/types/_internal_.AsyncPackedFunc.html  |    2 +-
 .../types/_internal_.FObjectConstructor.html       |    2 +-
 .../types/_internal_.FTVMFFIWasmSafeCallType.html  |    2 +-
 .../types/_internal_.FTVMWasmAllocSpace.html       |    2 +-
 .../types/_internal_.FTVMWasmFreeSpace.html        |    2 +-
 .../types/_internal_.OPFSEffectiveAccessMode.html  |    2 +-
 .../types/_internal_.OPFSSyncAccessHandleMode.html |    2 +-
 .../api/typedoc/types/_internal_.Pointer.html      |    2 +-
 .../api/typedoc/types/_internal_.RequestLike.html  |    2 +-
 .../typedoc/types/_internal_.TVMObjectBase.html    |    2 +-
 docs/searchindex.js                                |    2 +-
 docs/sg_execution_times.html                       |   28 +-
 docs/tirx/api/compilation.html                     |   22 +-
 docs/tirx/api/script.html                          |  339 +-
 docs/tirx/api/tile.html                            |  190 +-
 docs/tirx/api/tile_dispatch.html                   |    4 +-
 docs/tirx/api/tirx.html                            |   26 +-
 docs/tirx/api/transform.html                       |   32 +
 606 files changed, 82926 insertions(+), 74651 deletions(-)

diff --git a/docs/_downloads/050dda7aeddba33e083ae36606d3270f/import_model.zip b/docs/_downloads/050dda7aeddba33e083ae36606d3270f/import_model.zip
index a7e73201a57..ceb7f5e160b 100644
Binary files a/docs/_downloads/050dda7aeddba33e083ae36606d3270f/import_model.zip and b/docs/_downloads/050dda7aeddba33e083ae36606d3270f/import_model.zip differ
diff --git a/docs/_downloads/0eec6b3ea6ba863d0ed14b037c4b83ea/dlight_gpu_scheduling.zip b/docs/_downloads/0eec6b3ea6ba863d0ed14b037c4b83ea/dlight_gpu_scheduling.zip
index 7fd127435d9..cb3c000c447 100644
Binary files a/docs/_downloads/0eec6b3ea6ba863d0ed14b037c4b83ea/dlight_gpu_scheduling.zip and b/docs/_downloads/0eec6b3ea6ba863d0ed14b037c4b83ea/dlight_gpu_scheduling.zip differ
diff --git a/docs/_downloads/11c11e53c7dace51a8be968ee169ed0d/ir_module.zip b/docs/_downloads/11c11e53c7dace51a8be968ee169ed0d/ir_module.zip
index 5e59415df8c..cd7ac5162db 100644
Binary files a/docs/_downloads/11c11e53c7dace51a8be968ee169ed0d/ir_module.zip and b/docs/_downloads/11c11e53c7dace51a8be968ee169ed0d/ir_module.zip differ
diff --git a/docs/_downloads/18ba0d2ee8120824175aaef66bc9c9bf/tir_transformation.zip b/docs/_downloads/18ba0d2ee8120824175aaef66bc9c9bf/tir_transformation.zip
index f2397193a8f..d48880e72b6 100644
Binary files a/docs/_downloads/18ba0d2ee8120824175aaef66bc9c9bf/tir_transformation.zip and b/docs/_downloads/18ba0d2ee8120824175aaef66bc9c9bf/tir_transformation.zip differ
diff --git a/docs/_downloads/249a4acaa182fd00b9c381b53025777d/meta_schedule.zip b/docs/_downloads/249a4acaa182fd00b9c381b53025777d/meta_schedule.zip
index e0a61944f63..8f472c6e17f 100644
Binary files a/docs/_downloads/249a4acaa182fd00b9c381b53025777d/meta_schedule.zip and b/docs/_downloads/249a4acaa182fd00b9c381b53025777d/meta_schedule.zip differ
diff --git a/docs/_downloads/315fcda965a8d605f81705edf19ea2c6/relax_creation.ipynb b/docs/_downloads/315fcda965a8d605f81705edf19ea2c6/relax_creation.ipynb
index b83f08ef07b..432fcee48a6 100644
--- a/docs/_downloads/315fcda965a8d605f81705edf19ea2c6/relax_creation.ipynb
+++ b/docs/_downloads/315fcda965a8d605f81705edf19ea2c6/relax_creation.ipynb
@@ -33,7 +33,7 @@
       },
       "outputs": [],
       "source": [
-        "from tvm import relax, topi\nfrom tvm.script import ir as I\nfrom tvm.script import relax as R\nfrom tvm.script import tirx as T\n\n\n@I.ir_module\nclass RelaxModule:\n    @R.function\n    def forward(\n        data: R.Tensor((\"n\", 784), dtype=\"float32\"),\n        w0: R.Tensor((128, 784), dtype=\"float32\"),\n        b0: R.Tensor((128,), dtype=\"float32\"),\n        w1: R.Tensor((10, 128), dtype=\"float32\"),\n        b1: R.Tensor((10,), dtype=\"float32\"),\n    ) -> R.Tenso [...]
+        "from tvm import relax, topi\nfrom tvm.script import ir as I\nfrom tvm.script import relax as R\nfrom tvm.script import s_tir as Ts\nfrom tvm.script import tirx as T\n\n\n@I.ir_module\nclass RelaxModule:\n    @R.function\n    def forward(\n        data: R.Tensor((\"n\", 784), dtype=\"float32\"),\n        w0: R.Tensor((128, 784), dtype=\"float32\"),\n        b0: R.Tensor((128,), dtype=\"float32\"),\n        w1: R.Tensor((10, 128), dtype=\"float32\"),\n        b1: R.Tensor((10,), d [...]
       ]
     },
     {
@@ -51,7 +51,7 @@
       },
       "outputs": [],
       "source": [
-        "@I.ir_module\nclass RelaxModuleWithTIR:\n    @T.prim_func(s_tir=True)\n    def relu(x: T.handle, y: T.handle):\n        n = T.int64()\n        m = T.int64()\n        X = T.match_buffer(x, (n, m), \"float32\")\n        Y = T.match_buffer(y, (n, m), \"float32\")\n        for i, j in T.grid(n, m):\n            with T.sblock(\"relu\"):\n                vi, vj = T.axis.remap(\"SS\", [i, j])\n                Y[vi, vj] = T.max(X[vi, vj], T.float32(0))\n\n    @R.function\n    def forwar [...]
+        "@I.ir_module\nclass RelaxModuleWithTIR:\n    @Ts.prim_func\n    def relu(x: T.handle, y: T.handle):\n        n = T.int64()\n        m = T.int64()\n        X = T.match_buffer(x, (n, m), \"float32\")\n        Y = T.match_buffer(y, (n, m), \"float32\")\n        for i, j in T.grid(n, m):\n            with Ts.sblock(\"relu\"):\n                vi, vj = Ts.axis.remap(\"SS\", [i, j])\n                Y[vi, vj] = T.max(X[vi, vj], T.float32(0))\n\n    @R.function\n    def forward(\n      [...]
       ]
     },
     {
@@ -112,7 +112,7 @@
       },
       "outputs": [],
       "source": [
-        "@T.prim_func(s_tir=True)\ndef tir_linear(x: T.handle, w: T.handle, b: T.handle, z: T.handle):\n    M = T.int64()\n    N = T.int64()\n    K = T.int64()\n    X = T.match_buffer(x, (M, K), \"float32\")\n    W = T.match_buffer(w, (N, K), \"float32\")\n    B = T.match_buffer(b, (N,), \"float32\")\n    Z = T.match_buffer(z, (M, N), \"float32\")\n    for i, j, k in T.grid(M, N, K):\n        with T.sblock(\"linear\"):\n            vi, vj, vk = T.axis.remap(\"SSR\", [i, j, k])\n          [...]
+        "@Ts.prim_func\ndef tir_linear(x: T.handle, w: T.handle, b: T.handle, z: T.handle):\n    M = T.int64()\n    N = T.int64()\n    K = T.int64()\n    X = T.match_buffer(x, (M, K), \"float32\")\n    W = T.match_buffer(w, (N, K), \"float32\")\n    B = T.match_buffer(b, (N,), \"float32\")\n    Z = T.match_buffer(z, (M, N), \"float32\")\n    for i, j, k in T.grid(M, N, K):\n        with Ts.sblock(\"linear\"):\n            vi, vj, vk = Ts.axis.remap(\"SSR\", [i, j, k])\n            with T [...]
       ]
     },
     {
diff --git a/docs/_downloads/335201bfd37b29f9d9fd7765217e7ba9/tir_transformation.py b/docs/_downloads/335201bfd37b29f9d9fd7765217e7ba9/tir_transformation.py
index 14ca5881e5b..a4ff02669dc 100644
--- a/docs/_downloads/335201bfd37b29f9d9fd7765217e7ba9/tir_transformation.py
+++ b/docs/_downloads/335201bfd37b29f9d9fd7765217e7ba9/tir_transformation.py
@@ -38,31 +38,32 @@ transformations of primitive tensor functions.
 
 import tvm
 from tvm.script import ir as I
+from tvm.script import s_tir as Ts
 from tvm.script import tirx as T
 
 
 @I.ir_module
 class MyModule:
-    @T.prim_func(s_tir=True)
+    @Ts.prim_func
     def main(
         A: T.Buffer((128, 128), "float32"),
         B: T.Buffer((128, 128), "float32"),
         C: T.Buffer((128, 128), "float32"),
     ):
         T.func_attr({"tirx.noalias": True})
-        with T.sblock("root"):
-            T.reads()
-            T.writes()
-            Y = T.sblock_alloc_buffer((128, 128))
+        with Ts.sblock("root"):
+            Ts.reads()
+            Ts.writes()
+            Y = Ts.sblock_alloc_buffer((128, 128))
             for i, j, k in T.grid(128, 128, 128):
-                with T.sblock("Y"):
-                    vi, vj, vk = T.axis.remap("SSR", [i, j, k])
-                    with T.init():
+                with Ts.sblock("Y"):
+                    vi, vj, vk = Ts.axis.remap("SSR", [i, j, k])
+                    with Ts.init():
                         Y[vi, vj] = T.float32(0)
                     Y[vi, vj] = Y[vi, vj] + A[vi, vk] * B[vk, vj]
             for i, j in T.grid(128, 128):
-                with T.sblock("C"):
-                    vi, vj = T.axis.remap("SS", [i, j])
+                with Ts.sblock("C"):
+                    vi, vj = Ts.axis.remap("SS", [i, j])
                     C[vi, vj] = T.max(Y[vi, vj], T.float32(0))
 
 
diff --git a/docs/_downloads/373278b9f6fc686adeaa0219598fe78b/mix_python_and_tvm_with_pymodule.zip b/docs/_downloads/373278b9f6fc686adeaa0219598fe78b/mix_python_and_tvm_with_pymodule.zip
index f2cefb59cd2..cdd0454cfa8 100644
Binary files a/docs/_downloads/373278b9f6fc686adeaa0219598fe78b/mix_python_and_tvm_with_pymodule.zip and b/docs/_downloads/373278b9f6fc686adeaa0219598fe78b/mix_python_and_tvm_with_pymodule.zip differ
diff --git a/docs/_downloads/4753776bbe68e7c9ee4d19117973fc8b/relax_creation.zip b/docs/_downloads/4753776bbe68e7c9ee4d19117973fc8b/relax_creation.zip
index e72091012bf..8b13f0690a1 100644
Binary files a/docs/_downloads/4753776bbe68e7c9ee4d19117973fc8b/relax_creation.zip and b/docs/_downloads/4753776bbe68e7c9ee4d19117973fc8b/relax_creation.zip differ
diff --git a/docs/_downloads/69cc67b95e2c6b258f6dc9c7367fe71e/tir_creation.py b/docs/_downloads/69cc67b95e2c6b258f6dc9c7367fe71e/tir_creation.py
index 2f02c62dde6..219ded0bc6c 100644
--- a/docs/_downloads/69cc67b95e2c6b258f6dc9c7367fe71e/tir_creation.py
+++ b/docs/_downloads/69cc67b95e2c6b258f6dc9c7367fe71e/tir_creation.py
@@ -57,12 +57,13 @@ import tvm_ffi
 
 import tvm
 from tvm.script import ir as I
+from tvm.script import s_tir as Ts
 from tvm.script import tirx as T
 
 
 @I.ir_module
 class MyModule:
-    @T.prim_func(s_tir=True)
+    @Ts.prim_func
     def mm_relu(
         A: T.Buffer((128, 128), "float32"),
         B: T.Buffer((128, 128), "float32"),
@@ -72,22 +73,22 @@ class MyModule:
         for i in range(128):
             for j in range(128):
                 for k in range(128):
-                    with T.sblock("Y"):
-                        vi = T.axis.spatial(128, i)
-                        vj = T.axis.spatial(128, j)
-                        vk = T.axis.reduce(128, k)
-                        T.reads(A[vi, vk], B[vk, vj])
-                        T.writes(Y[vi, vj])
-                        with T.init():
+                    with Ts.sblock("Y"):
+                        vi = Ts.axis.spatial(128, i)
+                        vj = Ts.axis.spatial(128, j)
+                        vk = Ts.axis.reduce(128, k)
+                        Ts.reads(A[vi, vk], B[vk, vj])
+                        Ts.writes(Y[vi, vj])
+                        with Ts.init():
                             Y[vi, vj] = T.float32(0)
                         Y[vi, vj] = Y[vi, vj] + A[vi, vk] * B[vk, vj]
         for i in range(128):
             for j in range(128):
-                with T.sblock("C"):
-                    vi = T.axis.spatial(128, i)
-                    vj = T.axis.spatial(128, j)
-                    T.reads(Y[vi, vj])
-                    T.writes(C[vi, vj])
+                with Ts.sblock("C"):
+                    vi = Ts.axis.spatial(128, i)
+                    vj = Ts.axis.spatial(128, j)
+                    Ts.reads(Y[vi, vj])
+                    Ts.writes(C[vi, vj])
                     C[vi, vj] = T.max(Y[vi, vj], T.float32(0))
 
 
@@ -98,14 +99,14 @@ class MyModule:
 # streamline the code:
 #
 # - Utilize ``T.grid`` to condense nested loops;
-# - Employ ``T.axis.remap`` to abbreviate block iterator annotations;
-# - Exclude ``T.reads`` and ``T.writes`` for blocks whose content can
+# - Employ ``Ts.axis.remap`` to abbreviate block iterator annotations;
+# - Exclude ``Ts.reads`` and ``Ts.writes`` for blocks whose content can
 #   be inferred from the block body;
 
 
 @I.ir_module
 class ConciseModule:
-    @T.prim_func(s_tir=True)
+    @Ts.prim_func
     def mm_relu(
         A: T.Buffer((128, 128), "float32"),
         B: T.Buffer((128, 128), "float32"),
@@ -113,14 +114,14 @@ class ConciseModule:
     ):
         Y = T.alloc_buffer((128, 128), dtype="float32")
         for i, j, k in T.grid(128, 128, 128):
-            with T.sblock("Y"):
-                vi, vj, vk = T.axis.remap("SSR", [i, j, k])
-                with T.init():
+            with Ts.sblock("Y"):
+                vi, vj, vk = Ts.axis.remap("SSR", [i, j, k])
+                with Ts.init():
                     Y[vi, vj] = T.float32(0)
                 Y[vi, vj] = Y[vi, vj] + A[vi, vk] * B[vk, vj]
         for i, j in T.grid(128, 128):
-            with T.sblock("C"):
-                vi, vj = T.axis.remap("SS", [i, j])
+            with Ts.sblock("C"):
+                vi, vj = Ts.axis.remap("SS", [i, j])
                 C[vi, vj] = T.max(Y[vi, vj], T.float32(0))
 
 
@@ -144,7 +145,7 @@ dtype = "float32"
 # IRModule in TVMScript
 @I.ir_module
 class ConciseModuleFromPython:
-    @T.prim_func(s_tir=True)
+    @Ts.prim_func
     def mm_relu(
         A: T.Buffer((M, K), dtype),
         B: T.Buffer((K, N), dtype),
@@ -152,14 +153,14 @@ class ConciseModuleFromPython:
     ):
         Y = T.alloc_buffer((M, N), dtype)
         for i, j, k in T.grid(M, N, K):
-            with T.sblock("Y"):
-                vi, vj, vk = T.axis.remap("SSR", [i, j, k])
-                with T.init():
+            with Ts.sblock("Y"):
+                vi, vj, vk = Ts.axis.remap("SSR", [i, j, k])
+                with Ts.init():
                     Y[vi, vj] = T.cast(T.float32(0), dtype)
                 Y[vi, vj] = Y[vi, vj] + A[vi, vk] * B[vk, vj]
         for i, j in T.grid(M, N):
-            with T.sblock("C"):
-                vi, vj = T.axis.remap("SS", [i, j])
+            with Ts.sblock("C"):
+                vi, vj = Ts.axis.remap("SS", [i, j])
                 C[vi, vj] = T.max(Y[vi, vj], T.cast(T.float32(0), dtype))
 
 
@@ -179,7 +180,7 @@ print(tvm_ffi.structural_equal(ConciseModule, ConciseModuleFromPython))
 
 @I.ir_module
 class DynamicShapeModule:
-    @T.prim_func(s_tir=True)
+    @Ts.prim_func
     def mm_relu(a: T.handle, b: T.handle, c: T.handle):
         # Dynamic shape definition
         M = T.int32()
@@ -192,14 +193,14 @@ class DynamicShapeModule:
         C = T.match_buffer(c, [M, N], dtype)
         Y = T.alloc_buffer((M, N), dtype)
         for i, j, k in T.grid(M, N, K):
-            with T.sblock("Y"):
-                vi, vj, vk = T.axis.remap("SSR", [i, j, k])
-                with T.init():
+            with Ts.sblock("Y"):
+                vi, vj, vk = Ts.axis.remap("SSR", [i, j, k])
+                with Ts.init():
                     Y[vi, vj] = T.cast(T.float32(0), dtype)
                 Y[vi, vj] = Y[vi, vj] + A[vi, vk] * B[vk, vj]
         for i, j in T.grid(M, N):
-            with T.sblock("C"):
-                vi, vj = T.axis.remap("SS", [i, j])
+            with Ts.sblock("C"):
+                vi, vj = Ts.axis.remap("SS", [i, j])
                 C[vi, vj] = T.max(Y[vi, vj], T.cast(T.float32(0), dtype))
 
 
diff --git a/docs/_downloads/7d201684dfa095a5ea48d98e9a2ef7ad/relax_transformation.zip b/docs/_downloads/7d201684dfa095a5ea48d98e9a2ef7ad/relax_transformation.zip
index ea535d53737..c88520056d3 100644
Binary files a/docs/_downloads/7d201684dfa095a5ea48d98e9a2ef7ad/relax_transformation.zip and b/docs/_downloads/7d201684dfa095a5ea48d98e9a2ef7ad/relax_transformation.zip differ
diff --git a/docs/_downloads/83e85f38cf16f1d926d06615fd54095c/optimize_llm.zip b/docs/_downloads/83e85f38cf16f1d926d06615fd54095c/optimize_llm.zip
index d8443ab9efe..12cf0e8b0b3 100644
Binary files a/docs/_downloads/83e85f38cf16f1d926d06615fd54095c/optimize_llm.zip and b/docs/_downloads/83e85f38cf16f1d926d06615fd54095c/optimize_llm.zip differ
diff --git a/docs/_downloads/8c05f1d580979a2c26428a509c07ed72/bring_your_own_codegen.zip b/docs/_downloads/8c05f1d580979a2c26428a509c07ed72/bring_your_own_codegen.zip
index 2deb71264e2..f60b357e341 100644
Binary files a/docs/_downloads/8c05f1d580979a2c26428a509c07ed72/bring_your_own_codegen.zip and b/docs/_downloads/8c05f1d580979a2c26428a509c07ed72/bring_your_own_codegen.zip differ
diff --git a/docs/_downloads/a67d9d8c1ea48d5e0c95591f8c9bfd6f/relax_creation.py b/docs/_downloads/a67d9d8c1ea48d5e0c95591f8c9bfd6f/relax_creation.py
index 8407e4210a0..f1437b66e00 100644
--- a/docs/_downloads/a67d9d8c1ea48d5e0c95591f8c9bfd6f/relax_creation.py
+++ b/docs/_downloads/a67d9d8c1ea48d5e0c95591f8c9bfd6f/relax_creation.py
@@ -40,6 +40,7 @@ and relax NNModule API.
 from tvm import relax, topi
 from tvm.script import ir as I
 from tvm.script import relax as R
+from tvm.script import s_tir as Ts
 from tvm.script import tirx as T
 
 
@@ -71,15 +72,15 @@ RelaxModule.show()
 
 @I.ir_module
 class RelaxModuleWithTIR:
-    @T.prim_func(s_tir=True)
+    @Ts.prim_func
     def relu(x: T.handle, y: T.handle):
         n = T.int64()
         m = T.int64()
         X = T.match_buffer(x, (n, m), "float32")
         Y = T.match_buffer(y, (n, m), "float32")
         for i, j in T.grid(n, m):
-            with T.sblock("relu"):
-                vi, vj = T.axis.remap("SS", [i, j])
+            with Ts.sblock("relu"):
+                vi, vj = Ts.axis.remap("SS", [i, j])
                 Y[vi, vj] = T.max(X[vi, vj], T.float32(0))
 
     @R.function
@@ -164,7 +165,7 @@ mod.show()
 # Tensor Expression(TE), TensorIR functions or other TVM packed functions.
 
 
-@T.prim_func(s_tir=True)
+@Ts.prim_func
 def tir_linear(x: T.handle, w: T.handle, b: T.handle, z: T.handle):
     M = T.int64()
     N = T.int64()
@@ -174,14 +175,14 @@ def tir_linear(x: T.handle, w: T.handle, b: T.handle, z: T.handle):
     B = T.match_buffer(b, (N,), "float32")
     Z = T.match_buffer(z, (M, N), "float32")
     for i, j, k in T.grid(M, N, K):
-        with T.sblock("linear"):
-            vi, vj, vk = T.axis.remap("SSR", [i, j, k])
-            with T.init():
+        with Ts.sblock("linear"):
+            vi, vj, vk = Ts.axis.remap("SSR", [i, j, k])
+            with Ts.init():
                 Z[vi, vj] = 0
             Z[vi, vj] = Z[vi, vj] + X[vi, vk] * W[vj, vk]
     for i, j in T.grid(M, N):
-        with T.sblock("add"):
-            vi, vj = T.axis.remap("SS", [i, j])
+        with Ts.sblock("add"):
+            vi, vj = Ts.axis.remap("SS", [i, j])
             Z[vi, vj] = Z[vi, vj] + B[vj]
 
 
diff --git a/docs/_downloads/a7dd7652b2ad50f82d7b739ce3645799/e2e_opt_model.zip b/docs/_downloads/a7dd7652b2ad50f82d7b739ce3645799/e2e_opt_model.zip
index 7be8d802425..80d03ba2759 100644
Binary files a/docs/_downloads/a7dd7652b2ad50f82d7b739ce3645799/e2e_opt_model.zip and b/docs/_downloads/a7dd7652b2ad50f82d7b739ce3645799/e2e_opt_model.zip differ
diff --git a/docs/_downloads/bb7db6678496193ed0c55d3b95fa6778/quick_start.zip b/docs/_downloads/bb7db6678496193ed0c55d3b95fa6778/quick_start.zip
index 9e409971e9a..1b071065c49 100644
Binary files a/docs/_downloads/bb7db6678496193ed0c55d3b95fa6778/quick_start.zip and b/docs/_downloads/bb7db6678496193ed0c55d3b95fa6778/quick_start.zip differ
diff --git a/docs/_downloads/bc875d02d5382abc9ea5fb9eb2c1de2c/export_and_load_executable.zip b/docs/_downloads/bc875d02d5382abc9ea5fb9eb2c1de2c/export_and_load_executable.zip
index 81575991b41..003c52f5443 100644
Binary files a/docs/_downloads/bc875d02d5382abc9ea5fb9eb2c1de2c/export_and_load_executable.zip and b/docs/_downloads/bc875d02d5382abc9ea5fb9eb2c1de2c/export_and_load_executable.zip differ
diff --git a/docs/_downloads/be26483bb70b8468499a01c55e8e866c/tir_creation.zip b/docs/_downloads/be26483bb70b8468499a01c55e8e866c/tir_creation.zip
index 0b87888d1d9..beb14f41622 100644
Binary files a/docs/_downloads/be26483bb70b8468499a01c55e8e866c/tir_creation.zip and b/docs/_downloads/be26483bb70b8468499a01c55e8e866c/tir_creation.zip differ
diff --git a/docs/_downloads/c43b2ae5210f95ce8dae6102e9b060fd/tir_creation.ipynb b/docs/_downloads/c43b2ae5210f95ce8dae6102e9b060fd/tir_creation.ipynb
index 719d5279534..55f027e9dc9 100644
--- a/docs/_downloads/c43b2ae5210f95ce8dae6102e9b060fd/tir_creation.ipynb
+++ b/docs/_downloads/c43b2ae5210f95ce8dae6102e9b060fd/tir_creation.ipynb
@@ -33,14 +33,14 @@
       },
       "outputs": [],
       "source": [
-        "import numpy as np\nimport tvm_ffi\n\nimport tvm\nfrom tvm.script import ir as I\nfrom tvm.script import tirx as T\n\n\n@I.ir_module\nclass MyModule:\n    @T.prim_func(s_tir=True)\n    def mm_relu(\n        A: T.Buffer((128, 128), \"float32\"),\n        B: T.Buffer((128, 128), \"float32\"),\n        C: T.Buffer((128, 128), \"float32\"),\n    ):\n        Y = T.alloc_buffer((128, 128), dtype=\"float32\")\n        for i in range(128):\n            for j in range(128):\n             [...]
+        "import numpy as np\nimport tvm_ffi\n\nimport tvm\nfrom tvm.script import ir as I\nfrom tvm.script import s_tir as Ts\nfrom tvm.script import tirx as T\n\n\n@I.ir_module\nclass MyModule:\n    @Ts.prim_func\n    def mm_relu(\n        A: T.Buffer((128, 128), \"float32\"),\n        B: T.Buffer((128, 128), \"float32\"),\n        C: T.Buffer((128, 128), \"float32\"),\n    ):\n        Y = T.alloc_buffer((128, 128), dtype=\"float32\")\n        for i in range(128):\n            for j in  [...]
       ]
     },
     {
       "cell_type": "markdown",
       "metadata": {},
       "source": [
-        "### Concise with Syntactic Sugar\nFor ease of writing, we can employ the following syntactic sugar to\nstreamline the code:\n\n- Utilize ``T.grid`` to condense nested loops;\n- Employ ``T.axis.remap`` to abbreviate block iterator annotations;\n- Exclude ``T.reads`` and ``T.writes`` for blocks whose content can\n  be inferred from the block body;\n\n"
+        "### Concise with Syntactic Sugar\nFor ease of writing, we can employ the following syntactic sugar to\nstreamline the code:\n\n- Utilize ``T.grid`` to condense nested loops;\n- Employ ``Ts.axis.remap`` to abbreviate block iterator annotations;\n- Exclude ``Ts.reads`` and ``Ts.writes`` for blocks whose content can\n  be inferred from the block body;\n\n"
       ]
     },
     {
@@ -51,7 +51,7 @@
       },
       "outputs": [],
       "source": [
-        "@I.ir_module\nclass ConciseModule:\n    @T.prim_func(s_tir=True)\n    def mm_relu(\n        A: T.Buffer((128, 128), \"float32\"),\n        B: T.Buffer((128, 128), \"float32\"),\n        C: T.Buffer((128, 128), \"float32\"),\n    ):\n        Y = T.alloc_buffer((128, 128), dtype=\"float32\")\n        for i, j, k in T.grid(128, 128, 128):\n            with T.sblock(\"Y\"):\n                vi, vj, vk = T.axis.remap(\"SSR\", [i, j, k])\n                with T.init():\n               [...]
+        "@I.ir_module\nclass ConciseModule:\n    @Ts.prim_func\n    def mm_relu(\n        A: T.Buffer((128, 128), \"float32\"),\n        B: T.Buffer((128, 128), \"float32\"),\n        C: T.Buffer((128, 128), \"float32\"),\n    ):\n        Y = T.alloc_buffer((128, 128), dtype=\"float32\")\n        for i, j, k in T.grid(128, 128, 128):\n            with Ts.sblock(\"Y\"):\n                vi, vj, vk = Ts.axis.remap(\"SSR\", [i, j, k])\n                with Ts.init():\n                    Y[ [...]
       ]
     },
     {
@@ -87,7 +87,7 @@
       },
       "outputs": [],
       "source": [
-        "# Python variables\nM = N = K = 128\ndtype = \"float32\"\n\n\n# IRModule in TVMScript\n@I.ir_module\nclass ConciseModuleFromPython:\n    @T.prim_func(s_tir=True)\n    def mm_relu(\n        A: T.Buffer((M, K), dtype),\n        B: T.Buffer((K, N), dtype),\n        C: T.Buffer((M, N), dtype),\n    ):\n        Y = T.alloc_buffer((M, N), dtype)\n        for i, j, k in T.grid(M, N, K):\n            with T.sblock(\"Y\"):\n                vi, vj, vk = T.axis.remap(\"SSR\", [i, j, k])\n  [...]
+        "# Python variables\nM = N = K = 128\ndtype = \"float32\"\n\n\n# IRModule in TVMScript\n@I.ir_module\nclass ConciseModuleFromPython:\n    @Ts.prim_func\n    def mm_relu(\n        A: T.Buffer((M, K), dtype),\n        B: T.Buffer((K, N), dtype),\n        C: T.Buffer((M, N), dtype),\n    ):\n        Y = T.alloc_buffer((M, N), dtype)\n        for i, j, k in T.grid(M, N, K):\n            with Ts.sblock(\"Y\"):\n                vi, vj, vk = Ts.axis.remap(\"SSR\", [i, j, k])\n           [...]
       ]
     },
     {
@@ -123,7 +123,7 @@
       },
       "outputs": [],
       "source": [
-        "@I.ir_module\nclass DynamicShapeModule:\n    @T.prim_func(s_tir=True)\n    def mm_relu(a: T.handle, b: T.handle, c: T.handle):\n        # Dynamic shape definition\n        M = T.int32()\n        N = T.int32()\n        K = T.int32()\n\n        # Bind the input buffers with the dynamic shapes\n        A = T.match_buffer(a, [M, K], dtype)\n        B = T.match_buffer(b, [K, N], dtype)\n        C = T.match_buffer(c, [M, N], dtype)\n        Y = T.alloc_buffer((M, N), dtype)\n        f [...]
+        "@I.ir_module\nclass DynamicShapeModule:\n    @Ts.prim_func\n    def mm_relu(a: T.handle, b: T.handle, c: T.handle):\n        # Dynamic shape definition\n        M = T.int32()\n        N = T.int32()\n        K = T.int32()\n\n        # Bind the input buffers with the dynamic shapes\n        A = T.match_buffer(a, [M, K], dtype)\n        B = T.match_buffer(b, [K, N], dtype)\n        C = T.match_buffer(c, [M, N], dtype)\n        Y = T.alloc_buffer((M, N), dtype)\n        for i, j, k  [...]
       ]
     },
     {
diff --git a/docs/_downloads/dfe78527fd2d0066cb46ed1e46ecf4aa/mix_python_and_tvm_with_pymodule.py b/docs/_downloads/dfe78527fd2d0066cb46ed1e46ecf4aa/mix_python_and_tvm_with_pymodule.py
index bf42154bfb6..12b93664eb3 100644
--- a/docs/_downloads/dfe78527fd2d0066cb46ed1e46ecf4aa/mix_python_and_tvm_with_pymodule.py
+++ b/docs/_downloads/dfe78527fd2d0066cb46ed1e46ecf4aa/mix_python_and_tvm_with_pymodule.py
@@ -61,6 +61,7 @@ from tvm import relax
 from tvm.relax.base_py_module import BasePyModule
 from tvm.script import ir as I
 from tvm.script import relax as R
+from tvm.script import s_tir as Ts
 from tvm.script import tirx as T
 
 IS_IN_CI = os.getenv("CI", "").lower() == "true"
@@ -85,7 +86,7 @@ if RUN_EXAMPLE:
 
     @R.py_module
     class MyFirstModule(BasePyModule):
-        @T.prim_func(s_tir=True)
+        @Ts.prim_func
         def add_tir(
             A: T.Buffer((4,), "float32"),
             B: T.Buffer((4,), "float32"),
@@ -131,16 +132,16 @@ if RUN_EXAMPLE:
 
     @R.py_module
     class DebugModule(BasePyModule):
-        @T.prim_func(s_tir=True)
+        @Ts.prim_func
         def matmul_tir(var_A: T.handle, var_B: T.handle, var_C: T.handle):
             n = T.int32()
             A = T.match_buffer(var_A, (n, 4), "float32")
             B = T.match_buffer(var_B, (4, 3), "float32")
             C = T.match_buffer(var_C, (n, 3), "float32")
             for i, j, k in T.grid(n, 3, 4):
-                with T.sblock("matmul"):
-                    vi, vj, vk = T.axis.remap("SSR", [i, j, k])
-                    with T.init():
+                with Ts.sblock("matmul"):
+                    vi, vj, vk = Ts.axis.remap("SSR", [i, j, k])
+                    with Ts.init():
                         C[vi, vj] = T.float32(0)
                     C[vi, vj] = C[vi, vj] + A[vi, vk] * B[vk, vj]
 
@@ -209,15 +210,15 @@ if RUN_EXAMPLE:
 
     @R.py_module
     class PipelineModule(BasePyModule):
-        @T.prim_func(s_tir=True)
+        @Ts.prim_func
         def matmul_tir(var_A: T.handle, var_B: T.handle, var_C: T.handle):
             A = T.match_buffer(var_A, (2, 4), "float32")
             B = T.match_buffer(var_B, (4, 3), "float32")
             C = T.match_buffer(var_C, (2, 3), "float32")
             for i, j, k in T.grid(2, 3, 4):
-                with T.sblock("matmul"):
-                    vi, vj, vk = T.axis.remap("SSR", [i, j, k])
-                    with T.init():
+                with Ts.sblock("matmul"):
+                    vi, vj, vk = Ts.axis.remap("SSR", [i, j, k])
+                    with Ts.init():
                         C[vi, vj] = T.float32(0)
                     C[vi, vj] = C[vi, vj] + A[vi, vk] * B[vk, vj]
 
@@ -273,7 +274,7 @@ if RUN_EXAMPLE:
     # A simple Relax module: matmul + bias + relu (a dense layer)
     @I.ir_module
     class DenseLayer:
-        @T.prim_func(s_tir=True)
+        @Ts.prim_func
         def bias_add_tir(var_x: T.handle, var_b: T.handle, var_out: T.handle):
             x = T.match_buffer(var_x, (2, 4), "float32")
             b = T.match_buffer(var_b, (4,), "float32")
@@ -401,7 +402,7 @@ if RUN_EXAMPLE:
 
     @R.py_module
     class DynamicModule(BasePyModule):
-        @T.prim_func(s_tir=True)
+        @Ts.prim_func
         def scale_tir(var_x: T.handle, var_out: T.handle):
             n = T.int64()
             x = T.match_buffer(var_x, (n,), "float32")
diff --git a/docs/_downloads/e2a9c4bfdec7a9365ef67c5335b1aaa4/tir_transformation.ipynb b/docs/_downloads/e2a9c4bfdec7a9365ef67c5335b1aaa4/tir_transformation.ipynb
index 1a47b57253f..63b220e16d0 100644
--- a/docs/_downloads/e2a9c4bfdec7a9365ef67c5335b1aaa4/tir_transformation.ipynb
+++ b/docs/_downloads/e2a9c4bfdec7a9365ef67c5335b1aaa4/tir_transformation.ipynb
@@ -33,7 +33,7 @@
       },
       "outputs": [],
       "source": [
-        "import tvm\nfrom tvm.script import ir as I\nfrom tvm.script import tirx as T\n\n\n@I.ir_module\nclass MyModule:\n    @T.prim_func(s_tir=True)\n    def main(\n        A: T.Buffer((128, 128), \"float32\"),\n        B: T.Buffer((128, 128), \"float32\"),\n        C: T.Buffer((128, 128), \"float32\"),\n    ):\n        T.func_attr({\"tirx.noalias\": True})\n        with T.sblock(\"root\"):\n            T.reads()\n            T.writes()\n            Y = T.sblock_alloc_buffer((128, 128) [...]
+        "import tvm\nfrom tvm.script import ir as I\nfrom tvm.script import s_tir as Ts\nfrom tvm.script import tirx as T\n\n\n@I.ir_module\nclass MyModule:\n    @Ts.prim_func\n    def main(\n        A: T.Buffer((128, 128), \"float32\"),\n        B: T.Buffer((128, 128), \"float32\"),\n        C: T.Buffer((128, 128), \"float32\"),\n    ):\n        T.func_attr({\"tirx.noalias\": True})\n        with Ts.sblock(\"root\"):\n            Ts.reads()\n            Ts.writes()\n            Y = Ts.s [...]
       ]
     },
     {
diff --git a/docs/_downloads/ee6bb02238ab43f2b87505cc74484f6b/mix_python_and_tvm_with_pymodule.ipynb b/docs/_downloads/ee6bb02238ab43f2b87505cc74484f6b/mix_python_and_tvm_with_pymodule.ipynb
index b58de6b3d83..ee6131d7d2f 100644
--- a/docs/_downloads/ee6bb02238ab43f2b87505cc74484f6b/mix_python_and_tvm_with_pymodule.ipynb
+++ b/docs/_downloads/ee6bb02238ab43f2b87505cc74484f6b/mix_python_and_tvm_with_pymodule.ipynb
@@ -33,7 +33,7 @@
       },
       "outputs": [],
       "source": [
-        "import os\n\ntry:\n    import torch\n    import torch.nn.functional as F\nexcept ImportError:\n    torch = None\n\nimport tvm\nfrom tvm import relax\nfrom tvm.relax.base_py_module import BasePyModule\nfrom tvm.script import ir as I\nfrom tvm.script import relax as R\nfrom tvm.script import tirx as T\n\nIS_IN_CI = os.getenv(\"CI\", \"\").lower() == \"true\"\nHAS_TORCH = torch is not None\nRUN_EXAMPLE = HAS_TORCH and not IS_IN_CI"
+        "import os\n\ntry:\n    import torch\n    import torch.nn.functional as F\nexcept ImportError:\n    torch = None\n\nimport tvm\nfrom tvm import relax\nfrom tvm.relax.base_py_module import BasePyModule\nfrom tvm.script import ir as I\nfrom tvm.script import relax as R\nfrom tvm.script import s_tir as Ts\nfrom tvm.script import tirx as T\n\nIS_IN_CI = os.getenv(\"CI\", \"\").lower() == \"true\"\nHAS_TORCH = torch is not None\nRUN_EXAMPLE = HAS_TORCH and not IS_IN_CI"
       ]
     },
     {
@@ -51,7 +51,7 @@
       },
       "outputs": [],
       "source": [
-        "if RUN_EXAMPLE:\n\n    @R.py_module\n    class MyFirstModule(BasePyModule):\n        @T.prim_func(s_tir=True)\n        def add_tir(\n            A: T.Buffer((4,), \"float32\"),\n            B: T.Buffer((4,), \"float32\"),\n            C: T.Buffer((4,), \"float32\"),\n        ):\n            for i in range(4):\n                C[i] = A[i] + B[i]\n\n        @I.pyfunc\n        def forward(self, x, y):\n            \"\"\"Takes PyTorch tensors, calls TIR, returns PyTorch tensors.\"\" [...]
+        "if RUN_EXAMPLE:\n\n    @R.py_module\n    class MyFirstModule(BasePyModule):\n        @Ts.prim_func\n        def add_tir(\n            A: T.Buffer((4,), \"float32\"),\n            B: T.Buffer((4,), \"float32\"),\n            C: T.Buffer((4,), \"float32\"),\n        ):\n            for i in range(4):\n                C[i] = A[i] + B[i]\n\n        @I.pyfunc\n        def forward(self, x, y):\n            \"\"\"Takes PyTorch tensors, calls TIR, returns PyTorch tensors.\"\"\"\n        [...]
       ]
     },
     {
@@ -69,7 +69,7 @@
       },
       "outputs": [],
       "source": [
-        "if RUN_EXAMPLE:\n\n    @R.py_module\n    class DebugModule(BasePyModule):\n        @T.prim_func(s_tir=True)\n        def matmul_tir(var_A: T.handle, var_B: T.handle, var_C: T.handle):\n            n = T.int32()\n            A = T.match_buffer(var_A, (n, 4), \"float32\")\n            B = T.match_buffer(var_B, (4, 3), \"float32\")\n            C = T.match_buffer(var_C, (n, 3), \"float32\")\n            for i, j, k in T.grid(n, 3, 4):\n                with T.sblock(\"matmul\"):\n   [...]
+        "if RUN_EXAMPLE:\n\n    @R.py_module\n    class DebugModule(BasePyModule):\n        @Ts.prim_func\n        def matmul_tir(var_A: T.handle, var_B: T.handle, var_C: T.handle):\n            n = T.int32()\n            A = T.match_buffer(var_A, (n, 4), \"float32\")\n            B = T.match_buffer(var_B, (4, 3), \"float32\")\n            C = T.match_buffer(var_C, (n, 3), \"float32\")\n            for i, j, k in T.grid(n, 3, 4):\n                with Ts.sblock(\"matmul\"):\n             [...]
       ]
     },
     {
@@ -94,7 +94,7 @@
       },
       "outputs": [],
       "source": [
-        "if RUN_EXAMPLE:\n    # Register a packed function (simulating an external library binding)\n    @tvm.register_global_func(\"my_bias_add\", override=True)\n    def my_bias_add(x, bias, out):\n        \"\"\"Packed function: adds bias to each row of x.\"\"\"\n\n        x_np = x.numpy()\n        b_np = bias.numpy()\n        out_np = x_np + b_np\n        out[:] = out_np\n\n    @R.py_module\n    class PipelineModule(BasePyModule):\n        @T.prim_func(s_tir=True)\n        def matmul_ [...]
+        "if RUN_EXAMPLE:\n    # Register a packed function (simulating an external library binding)\n    @tvm.register_global_func(\"my_bias_add\", override=True)\n    def my_bias_add(x, bias, out):\n        \"\"\"Packed function: adds bias to each row of x.\"\"\"\n\n        x_np = x.numpy()\n        b_np = bias.numpy()\n        out_np = x_np + b_np\n        out[:] = out_np\n\n    @R.py_module\n    class PipelineModule(BasePyModule):\n        @Ts.prim_func\n        def matmul_tir(var_A:  [...]
       ]
     },
     {
@@ -112,7 +112,7 @@
       },
       "outputs": [],
       "source": [
-        "if RUN_EXAMPLE:\n    from tvm.relax.relax_to_pyfunc_converter import RelaxToPyFuncConverter\n\n    # A simple Relax module: matmul + bias + relu (a dense layer)\n    @I.ir_module\n    class DenseLayer:\n        @T.prim_func(s_tir=True)\n        def bias_add_tir(var_x: T.handle, var_b: T.handle, var_out: T.handle):\n            x = T.match_buffer(var_x, (2, 4), \"float32\")\n            b = T.match_buffer(var_b, (4,), \"float32\")\n            out = T.match_buffer(var_out, (2, 4) [...]
+        "if RUN_EXAMPLE:\n    from tvm.relax.relax_to_pyfunc_converter import RelaxToPyFuncConverter\n\n    # A simple Relax module: matmul + bias + relu (a dense layer)\n    @I.ir_module\n    class DenseLayer:\n        @Ts.prim_func\n        def bias_add_tir(var_x: T.handle, var_b: T.handle, var_out: T.handle):\n            x = T.match_buffer(var_x, (2, 4), \"float32\")\n            b = T.match_buffer(var_b, (4,), \"float32\")\n            out = T.match_buffer(var_out, (2, 4), \"float32 [...]
       ]
     },
     {
@@ -148,7 +148,7 @@
       },
       "outputs": [],
       "source": [
-        "if RUN_EXAMPLE:\n\n    @R.py_module\n    class DynamicModule(BasePyModule):\n        @T.prim_func(s_tir=True)\n        def scale_tir(var_x: T.handle, var_out: T.handle):\n            n = T.int64()\n            x = T.match_buffer(var_x, (n,), \"float32\")\n            out = T.match_buffer(var_out, (n,), \"float32\")\n            for i in T.serial(n):\n                out[i] = x[i] * T.float32(2.0)\n\n        @R.function\n        def add_relax(\n            x: R.Tensor((\"n\",), \ [...]
+        "if RUN_EXAMPLE:\n\n    @R.py_module\n    class DynamicModule(BasePyModule):\n        @Ts.prim_func\n        def scale_tir(var_x: T.handle, var_out: T.handle):\n            n = T.int64()\n            x = T.match_buffer(var_x, (n,), \"float32\")\n            out = T.match_buffer(var_out, (n,), \"float32\")\n            for i in T.serial(n):\n                out[i] = x[i] * T.float32(2.0)\n\n        @R.function\n        def add_relax(\n            x: R.Tensor((\"n\",), \"float32\") [...]
       ]
     },
     {
diff --git a/docs/_downloads/f69380821f417ef2210f45503d81bded/cross_compilation_and_rpc.zip b/docs/_downloads/f69380821f417ef2210f45503d81bded/cross_compilation_and_rpc.zip
index bbcdb3cfc45..7ba5133bfd4 100644
Binary files a/docs/_downloads/f69380821f417ef2210f45503d81bded/cross_compilation_and_rpc.zip and b/docs/_downloads/f69380821f417ef2210f45503d81bded/cross_compilation_and_rpc.zip differ
diff --git a/docs/_downloads/f69433a4a80715725df90d1386679956/customize_opt.zip b/docs/_downloads/f69433a4a80715725df90d1386679956/customize_opt.zip
index 6a951845039..03c2dba68e0 100644
Binary files a/docs/_downloads/f69433a4a80715725df90d1386679956/customize_opt.zip and b/docs/_downloads/f69433a4a80715725df90d1386679956/customize_opt.zip differ
diff --git a/docs/_sources/arch/tvmscript.rst b/docs/_sources/arch/tvmscript.rst
index cead1d05826..7ee7e4556ee 100644
--- a/docs/_sources/arch/tvmscript.rst
+++ b/docs/_sources/arch/tvmscript.rst
@@ -20,692 +20,102 @@
 TVMScript
 =========
 
-TVMScript is a Python-based domain-specific language (DSL) for writing TVM IR. It lets users
-define ``IRModule``\ s — containing both Relax functions and TIR ``PrimFunc``\ s — using
-familiar Python syntax. Decorators acquire the source and its definition context. A syntax
-transpiler translates the Python AST into a Python builder program; executing that program
-constructs TVM IR. The scripted function body is therefore translated before execution.
-
-TVMScript serves two roles in the TVM stack:
-
-- **Authoring**: users write TIR kernels and Relax programs directly in TVMScript.
-- **Roundtrip**: ``mod.script()`` prints IR as TVMScript, which can be re-parsed with any
-  required external symbols to reconstruct equivalent IR. This supports inspection,
-  debugging, and serialization of printable IR.
-
-
-Overview
---------
-
-TVMScript separates source acquisition, syntax translation, IR construction, and printing:
+TVMScript expresses TVM IR with Python syntax. A shared frontend translates source
+into a Python builder program; executing that program constructs IR. A separate
+printer converts IR back into readable, parseable source.
 
 .. code-block:: text
 
-   Parsing (Python source → TVM IR):
-
-   Python source (TVMScript)
-        │
-        ▼  Frontend: source + definition context
-        │
-   Python AST
-        │
-        ▼  Syntax transpiler + construction protocol
-        │
-   Generated Python builder program
-        │
-        ▼  Frontend: recompose and execute callable
-        │
-        ▼  IR builders (frame stack + dialect policy)
-        │
-   TVM IR (IRModule, PrimFunc, relax.Function)
-
-
-   Printing (TVM IR → Python source):
-
+   Source + definition context
+       → Python AST → syntax transpiler → Python builder program → TVM IR
    TVM IR
-        │
-        ▼  IRDocsifier (C++, dispatch by token + type)
-        │
-   Doc tree (ExprDoc, StmtDoc, ...)
-        │
-        ▼  DocToPythonScript
-        │
-   TVMScript text
-
-- **Frontend** (Python): captures definition context, acquires source, and composes the
-  generated callable with its lexical environment. It owns decorators, helper entry points,
-  and execution of the builder program.
-- **Syntax transpiler** (Python): rewrites Python AST nodes into calls on the selected
-  construction namespace. It preserves source scopes, evaluation order, and locations.
-- **IR builders** (Python + C++): own typed values, symbol identity, dialect policy, and
-  construction frames. Exiting a frame finalizes its IR and attaches it to its parent.
-- **Printer** (C++): converts IR to a ``Doc`` tree and formats it as Python syntax. The
-  printer's Doc tree is separate from the Python AST used for parsing.
-
-All source entry points use the canonical ``tvm.script.parser`` implementation.
-
-
-Decorators
-----------
-
-TVMScript uses three import aliases by convention:
-
-.. code-block:: python
-
-   from tvm.script import ir as I       # module-level constructs
-   from tvm.script import tirx as T     # TIR constructs
-   from tvm.script import relax as R    # Relax constructs
-   from tvm.script.parser.entry import make_macro_decorator
-   from tvm.target import Target
-
-These are public authoring APIs. ``Target`` configures compilation targets; it remains in
-``tvm.target``. Public dialect namespaces expose decorators and source constructors, so
-scripted programs do not need direct imports from builder implementation packages.
-
-The primary decorators are:
+       → IRDocsifier → Doc tree → Python text
 
-- ``@I.ir_module``: marks a Python class as an ``IRModule``. Each method inside becomes a
-  function in the module.
-- ``@T.prim_func``: marks a function as a TIR ``PrimFunc``.
-- ``@R.function``: marks a function as a ``relax.Function``.
-
-These can be composed:
-
-.. code-block:: python
-
-   @I.ir_module
-   class MyModule:
-       @T.prim_func(s_tir=True)
-       def add_kernel(A: T.Buffer((128,), "float32"),
-                      B: T.Buffer((128,), "float32"),
-                      C: T.Buffer((128,), "float32")):
-           for i in range(128):
-               with T.sblock("compute"):
-                   vi = T.axis.spatial(128, i)
-                   C[vi] = A[vi] + B[vi]
-
-       @R.function
-       def main(x: R.Tensor((128,), "float32"),
-                y: R.Tensor((128,), "float32")) -> R.Tensor((128,), "float32"):
-           with R.dataflow():
-               out = R.call_tir(MyModule.add_kernel, (x, y),
-                                out_ty=R.Tensor((128,), "float32"))
-               R.output(out)
-           return out
-
-Python creates the class before invoking ``@I.ir_module``. Function decorators inside an
-IR-module class retain method definitions for module construction. The module frontend then
-acquires the source and constructs declarations and bodies in the module's builder context.
-Standalone ``@T.prim_func`` and ``@R.function`` definitions construct their IR immediately.
-
-A helper can construct expressions or statements in the caller's active builder frames:
-
-.. code-block:: python
-
-   @make_macro_decorator(T)
-   def add_one(value):
-       return value + 1
-
-Unlike a function decorator, ``make_macro_decorator`` does not create an IR function for
-each helper. Its default return behavior is ordinary Python return from the generated
-helper program.
-``T.inline`` and the dialect macro decorators are supplied through the same frontend helper
-mechanism.
-
-
-Parser Architecture
+Source and frontend
 -------------------
 
-The parser lives in ``python/tvm/script/parser/``. ``inspect_source.py`` owns source
-acquisition, the ``Source`` representation and its coordinate helpers, and definition-context
-capture. Documented functions in ``entry.py`` manage the parse sequence, callable composition
-and execution.
-The transpiler handles syntax; the builders interpret concrete values. TIRx JIT validation,
-defaults and specialization caching live in ``tvm.tirx.script.jit``; shared parser utilities
-remain independent of that policy.
-
-Syntax and construction protocol
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-A registered function decorator selects a construction namespace. The same Python syntax
-then lowers to operations supplied by that namespace: for example, unmarked ``if`` creates
-TIR control-flow frames in a primitive function and Relax control-flow frames in a Relax
-function. The transpiler emits these operations without implementing dialect IR semantics.
-
-``parser/protocol_registry.py`` owns callable syntax metadata and registration. Argument policies such
-as ``expr_str`` translate symbolic strings written directly in source expressions.
-Global-info selectors use the builder decorator
-:func:`tvm.script.ir_builder.resolve_global_info_args`, which resolves named string arguments
-through an explicit dialect callback after ordinary Python argument evaluation. Captured
-aliases and unpacked calls use the same decorator. Dtype and placement strings remain literal. Captured or computed symbolic shapes must already contain explicit IR variables;
-the parser does not interpret expression strings found inside captured values.
-Registration keeps syntax facts in simple dictionaries keyed by canonical namespace paths.
-Known namespace aliases normalize to the registered path; ordinary captured callables,
-local aliases, methods and closures execute as Python without marker inference. The
-dictionaries retain no source functions or parse captures. Dialects own their namespace
-exports, entry points and aliases and register them with the generic parser.
-The registry selects a call's argument policy before traversal and reuses positional
-parameter names computed once at registration;
-``parser/expr_str_handling.py`` decodes annotation/expression strings and maps their
-escaped, multiline and UTF-8 source ranges. The main visitor rewrites the decoded syntax.
-
-Assignments become binding operations, standalone expressions become emission operations,
-and loops and scopes become builder contexts. An ordinary assignment passes its evaluated
-RHS and a separate ``value_span`` to ``bind_``, without first stamping the returned value.
-The binding target has its own span. TIRx preserves returned Vars, including BufferVars,
-and ordinary metadata objects; other expressions follow the dialect's binding rules.
-Construction still runs in the source context, and nested expressions retain their locations.
-Concrete binding, type checking, comparison construction, and frame finalization belong to
-the builders. Ordinary host calls and
-operator overloads execute as part of the generated Python program.
-
-Loop frames create their named variables during construction. Entering a frame returns
-the variable directly for one dimension and the variable sequence for multiple dimensions,
-so ordinary Python uses ``with T.serial(0, n) as i``. Generated scalar loops use the same
-entry form. Generated tuple, list and starred targets unpack the entered frame's stable
-``vars`` sequence, preserving explicit one-dimensional unpacking and native variable identity.
-
-Parser syntax restrictions raise ``SyntaxError`` with the original filename and source
-range. Python helper and builder exceptions propagate unchanged, preserving their identity,
-type and source-mapped traceback. Temporary parser contexts are released on both successful
-and exceptional exits.
-
-Parse flow
-~~~~~~~~~~
-
-The public entry points include ``tvm.script.parse`` and ``tvm.script.from_source``:
-
-1. **Acquire source and context**: the frontend accepts a function, class, or source string,
-   obtains its Python AST, and retains source locations. Decorators capture the definition
-   context temporarily through ``definition_scope``; source-string callers can supply
-   external bindings through ``extra_vars``. Source inspection belongs to
-   ``parser.inspect_source``.
-2. **Prescan and translate syntax**: acquisition supplies a fresh owned AST. One
-   ``PrescanCollector`` produces read-only ``PrescanContext`` facts for reserved names,
-   scoped declarations and conditional outputs. ``IRBuilderTranspiler`` rewrites that owned
-   tree with the standard Python AST visitor, using fixed namespace metadata and registered
-   argument policies without copying or reparsing the tree. One shared name allocator
-   avoids collisions with user identifiers through rewriting and recomposition.
-3. **Compose the callable**: the private frontend helper ``_recompose_builder`` compiles
-   the generated program with the source's globals, closure bindings, and necessary
-   annotation context. Explicit temporary phase inputs connect generated helpers to
-   their source functions without rediscovering them through a generated-AST walk.
-4. **Execute construction**: the callable enters native builder frames and reconstructs
-   declarations and annotations in their required context. When forward declarations are
-   needed, it declares all signatures first. Inside each retained native function frame,
-   it defines and calls a lexical body helper without an explicit frame argument. Re-entry
-   uses the existing parameters instead of adding them again. Native frames own module
-   references, results and function-local symbols.
-5. **Validate and return IR**: generated code calls the dialect's
-   ``X.check_well_formed_`` for a completed function or the shared
-   ``I.check_well_formed_`` for a completed module. Public parsing validates by default.
-   Parsing owns execution and releases its temporary builder and captures afterward.
-
-Definition and symbol scopes
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Python lexical bindings and DSL symbolic declarations have different owners. The frontend
-captures the exact definition scope during decoration, including enclosing names used only
-in annotations that Python may omit from the function's closure. Ordinary body references
-retain their source globals and closure bindings. Unrelated callers' local variables do not
-become part of this environment.
-
-Annotations are reconstructed as builder operations within the module/function context.
-The generated program preserves their definition scope and original names, using a
-distinct compiler binding only when a source-local binding would shadow the annotation.
-One prescan-seeded name allocator serves rewriting and callable recomposition. Body
-globals and closures retain their original lookup, including a method closure whose name
-also appears as a class member. Callable recomposition and
-lexical environment setup belong to the frontend. The transpiler preserves source scopes
-through Python syntax; it does not classify each name by membership in a runtime environment
-or search caller stacks for values.
-
-DSL expression strings such as ``R.Tensor(("n", 4), "float32")`` use
-``X.resolve_type_var_("n")``, which delegates to the nearest native function frame's
-``type_var_map``. Repeated names refer to the same symbol across parameters, return
-annotations and the body. Quoted lookup does not introduce a Python name; an explicit
-symbol declaration does. A Python name in ``R.Tensor((n, 4), ...)`` follows its source
-lexical scope. Relax global-info selectors use ``R.resolve_global_info_`` against the
-nearest active native module frame's existing map. String selectors outside an active module
-raise, including when an unrelated builder is active. Concrete metadata objects retain identity.
-When defining Python functions before their module builder opens, quote the whole annotation
-or use ``from __future__ import annotations``; the parser reconstructs these annotations inside
-the module. Printed module function signatures containing selectors request postponed annotations.
-Eager printed class assignments, such as typed ``R.ExternFunc`` declarations, retrieve concrete
-virtual devices with ``R.lookup_vdevice`` because postponed annotations do not defer assignment
-values. This explicit lookup preserves the module metadata object before tensor construction.
-
-During rewriting, each needed source range becomes a fixed native span entry in an
-injected table. ``_S[i](value)`` attaches that location while preserving identity;
-``_S[i].ctx(lambda: helper(value))`` evaluates the callee and arguments once within
-the source context and restores it on success or failure. Entries live in
-``ir_builder.base`` and retain no AST or active caller context. Dynamic caller/definition
-provenance is composed when an entry is used. Ordinary names, Python literals, fixed
-namespace/callee lookup and structural indexing tuples need no entries. Arithmetic and
-buffer loads retain their own expression ranges.
-
-Generated hooks receive entries explicitly: ``X.for_(X.range_(3), names="i", span=_S[i])``
-and ``X.emit_(value, span=_S[j])`` own their result locations. A callable registered with
-``result_span`` promises that its complete IR effect is represented by its returned node
-or emission receipt, allowing result attachment without a construction context. Opaque
-helpers still require ``.ctx`` to locate internal effects. At an ordinary assignment boundary,
-``.ctx(..., attach_result=False)`` preserves construction context while leaving the returned
-value's attribution to ``bind_`` through its separate ``value_span``.
-The parser-owned :mod:`tvm.script.parser.protocol_registry` module defines registration APIs,
-metadata and persistent registration state. Dialects apply these policies beside concrete definitions,
-constructor creation or necessary exposure sites, without namespace scans or bulk
-registration inventories. Dialect ``parser_protocol`` modules implement construction hooks. The shared
-:mod:`tvm.script.ir_builder.parser_protocol` documents the detailed builder-hook contract and links
-to the registry for special syntax policies. Dialect hooks retain typed signatures and
-document only their specific behavior. For example, dialects import ``args_policy``
-from ``tvm.script.parser.protocol_registry`` to register literal argument policies.
-
-Ordinary assignments pass returned values to ``bind_``. TIRx Vars keep their exact identity,
-producer names and spans, including scope variables, block axes and explicit ``T.bind``
-results. This behavior belongs to the builder's value handling and requires no parser
-producer classification. Self-emitting builders return ``AlreadyEmitted[T]`` so
-source-location handling can annotate the emitted object without emitting it twice.
-Layout, meta_class and view results likewise follow dialect value handling for assignment
-and standalone statements. Unsupported host values still fail under the dialect's emission
-rules. Expression-facing thread APIs return native Vars; IterVar remains native metadata.
-
-Simple comparison chains such as ``0 < i < 10`` lower to
-``X.and_(X.lt_(0, i), X.lt_(i, 10))``. Only names and numeric literals, including signed
-literals, are supported in a chain. Complex chain operands fail with a source-located
-syntax error before they evaluate. Single comparisons retain general operands, and the
-explicit constexpr boundary retains Python comparison semantics.
-
-A bare loop target receives the native entry result: ``for iters in T.grid(m, n)`` binds
-the original variable sequence, while ``for i in T.serial(n)`` binds one Var. Explicit
-tuple, list and starred targets unpack the native frame's stable ``vars`` field.
-
-Function decorators pass their construction namespace and options explicitly to parsing.
-Generated ``X.function_(**options)`` creates the frame; the dialect hook owns option defaults.
-Declaration creates stable references before function bodies; generated code reads the
-native ``global_var`` or ``local_var`` field directly, without a separate reservation pass.
-There is no function-registration record or copied source-function metadata. The root
-retains ``pyfunc`` behavior and original Python callables for module assembly.
-
-Completed modules use generic root coordination over dialect-owned validation hooks.
-Each dialect checks its members and cross-function requirements against the whole module,
-including captured members. Shared GlobalInfo construction and lookup belong to ``tvm.ir``;
-existing Relax class exports and serialized type keys remain compatible.
-
-Each parse rewrites the fresh AST returned by source acquisition directly, without
-copying or reparsing it. Ordinary functions construct arguments directly and bind their
-known body parameters from ``frame.params``. Specialization setup and conditional
-parameter selection are generated only for an explicit specialization request; an empty
-mapping still requests that path, while ``None`` selects ordinary parsing.
-
-Explicit host control flow
-~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Mark compile-time Python selection with ``I.constexpr`` or the identical dialect alias:
-
-.. code-block:: python
-
-   if I.constexpr(enabled):
-       T.evaluate(1)
-   else:
-       T.evaluate(0)
-
-   value = T.ramp(0, 1, lanes) if T.constexpr(lanes > 1) else 0
-
-The marker applies to the controlling value. The generated program evaluates it once and
-executes only the selected Python branch in the existing builder scope. Branch bodies and
-result expressions still translate normally. Marked ``and`` and ``or`` decisions retain
-Python short-circuiting; unmarked conditionals and logical expressions call dialect IR
-constructors. A Python boolean alone does not request compile-time branch selection.
-
-JIT supplies validated specialization bindings and optional-argument absence to builder
-execution. Syntax translation does not inspect those values to select a branch.
-
-
-IR Builder Architecture
------------------------
-
-The IR builder (``python/tvm/script/ir_builder/``, backed by C++ in ``src/script/ir_builder/``)
-provides a frame-stack API for constructing IR incrementally.
-
-Frame stack
-~~~~~~~~~~~
-
-The core idea: each IR scope (module, function, block, loop) is a **frame**. Frames are pushed
-on ``__enter__`` and popped on ``__exit__``. When a frame exits, it finalizes the IR it
-represents and attaches it to the parent frame.
-
-.. code-block:: text
-
-   IRBuilder (current construction context)
-   └── frame stack:
-       ├── IRModuleFrame          ← @I.ir_module
-       │   ├── PrimFuncFrame      ← @T.prim_func
-       │   │   ├── ForFrame       ← T.grid(...) / T.serial(...)
-       │   │   │   └── SBlockFrame ← T.sblock(...)
-       │   │   └── ...
-       │   └── FunctionFrame      ← @R.function
-       │       └── BindingBlockFrame ← R.dataflow()
-       └── ...
-
-The generated program constructs IR by entering and exiting frames. Each frame owns its
-construction policy and finalization; the syntax transpiler does not maintain an IR tree.
-
-TIR builder
-~~~~~~~~~~~
-
-The TIR builder (``python/tvm/tirx/script/ir_builder/``) implements the construction operations
-behind public ``T`` syntax. Builder modules also support direct programmatic construction;
-public decorators and internal frame-opening operations have distinct roles. Key categories:
-
-**Function and block**:
-
-- ``@T.prim_func`` selects TIR construction; its builder ``function()`` opens ``PrimFuncFrame``
-- ``T.sblock(name)`` → ``SBlockFrame`` (spatial block)
-- ``T.init()`` → ``BlockInitFrame`` (reduction initialization)
-- ``T.reads(...)``, ``T.writes(...)`` → declare buffer access regions
+``tvm.script.parser`` accepts Python functions, classes and source strings through
+public decorators, ``tvm.script.parse`` and ``tvm.script.from_source``. The frontend
+acquires source and locations, captures the definition's globals and closure bindings,
+and composes the generated callable with that environment. String callers provide
+external bindings through ``extra_vars``.
 
-**Loops**:
+Standalone function decorators construct IR immediately. Within an IR-module class,
+function decorators retain definitions until module construction, which can declare
+signatures before building bodies. Captured Python values belong to the source
+context; symbolic IR values are created and resolved by builders.
 
-- ``T.grid(*extents)`` → ``ForFrame`` returning loop variables
-- ``T.serial(start, stop)``, ``T.parallel(...)``, ``T.vectorized(...)``,
-  ``T.unroll(...)``, ``T.thread_binding(...)`` → loop with specific iterator type
-
-**Block axes**:
-
-- ``T.axis.spatial(dom, binding)`` — spatial iteration axis
-- ``T.axis.reduce(dom, binding)`` — reduction axis
-- ``T.axis.remap(kinds, bindings)`` — shorthand for multiple axes
-
-**Buffers**:
-
-- ``T.match_buffer(param, shape, dtype)`` — match function parameter to buffer
-- ``T.alloc_buffer(shape, dtype)`` — allocate intermediate buffer
-- ``T.Buffer(shape, dtype)`` — buffer type annotation in function signatures
-
-Relax builder
-~~~~~~~~~~~~~
-
-The Relax builder (``python/tvm/relax/script/ir_builder/``) implements:
-
-**Function and dataflow**:
-
-- ``@R.function`` selects Relax construction; its builder ``function()`` opens ``FunctionFrame``
-- ``R.dataflow()`` → ``BindingBlockFrame``
-- ``R.output(*vars)`` → expose variables from a dataflow block
-
-**Emit**:
-
-- ``R.emit(value)`` → emit a binding, returns a ``Var``
-- ``R.emit_match_cast(value, ty)`` → emit with type assertion
-
-Generated standalone-statement emission uses the construction protocol's separate ``emit_``
-operation. Public ``R.emit`` retains its binding-returning imperative API.
-
-**Type annotations**:
-
-- ``R.Tensor(shape, dtype)`` — tensor type
-- ``R.Tuple(*fields)`` — tuple type
-- ``R.Shape(values)`` — shape type
-- ``R.Any()`` — any Relax value type
-
-**Calling conventions**:
-
-- ``R.call_tir(func, args, out_ty)`` — call a TIR function
-- ``R.call_packed(name, *args)`` — call a PackedFunc
-- ``R.call_dps_packed(func, *args)`` — call using destination-passing style
-
-**Operators**: the ``R`` module also re-exports all Relax operators
-(``R.add``, ``R.matmul``, ``R.nn.conv2d``, etc.) so they can be used directly in TVMScript.
-
-
-Printer Architecture
---------------------
-
-The printer converts TVM IR back to TVMScript text. It is implemented primarily in C++
-(``src/script/printer/``) for performance.
-
-Doc tree
-~~~~~~~~
-
-The printer does **not** generate text directly. Instead, it first builds a ``Doc`` tree — an
-intermediate representation that mirrors Python syntax:
-
-- **Expression docs**: ``IdDoc``, ``AttrAccessDoc``, ``CallDoc``, ``IndexDoc``,
-  ``OperationDoc``, ``LiteralDoc``, ``TupleDoc``, ``ListDoc``, etc.
-- **Statement docs**: ``AssignDoc``, ``ForDoc``, ``IfDoc``, ``ScopeDoc`` (``with`` blocks),
-  ``FunctionDoc``, ``ClassDoc``, ``ReturnDoc``, ``CommentDoc``, etc.
-
-For example, ``T.axis.spatial(128, i)`` is represented as:
-
-.. code-block:: text
+Syntax and construction protocol
+--------------------------------
 
-   CallDoc(
-     callee=AttrAccessDoc(AttrAccessDoc(IdDoc("T"), "axis"), "spatial"),
-     args=[LiteralDoc(128), IdDoc("i")]
-   )
+The syntax transpiler rewrites a fresh Python AST using scope and declaration facts
+from a prescan. A registered decorator selects the construction namespace. Assignments
+call binding hooks, expression statements call emission hooks, and control flow opens
+builder frames. The namespace owns the meaning of these operations and the supported
+IR constructs.
 
-IRDocsifier
-~~~~~~~~~~~
+``tvm.script.parser.protocol_registry`` records syntax policies under registered
+namespace paths. These policies identify declarations and arguments that need special
+handling, such as symbolic expression strings. Source aliases resolve to those paths;
+ordinary Python calls remain calls in the generated program. Explicit ``constexpr``
+markers select host control flow during construction.
 
-The ``IRDocsifier`` (``include/tvm/script/printer/ir_docsifier.h``) is the main dispatcher.
-It maintains:
+Generated operations retain source locations. Syntax restrictions raise source-located
+``SyntaxError`` exceptions; builder and Python helper errors retain their original
+exception types. Temporary parse state is released when construction finishes or fails.
 
-- A dispatch table mapping ``(token, type_index)`` pairs to converter functions.
-- A frame stack for tracking the current scope (similar to the builder's frame stack).
-- A variable-to-name mapping to produce readable names.
+Frame-based construction
+------------------------
 
-Each IR dialect registers its own converters:
+The IR builder maintains an active stack of frames, such as module, function and loop
+frames. Entering a frame establishes its scope; exiting finalizes its IR and attaches it
+to its parent. Frames own parameters, symbols and construction state. Builder hooks own
+value binding, type rules and validation of completed IR. The shared
+``resolve_global_info_args`` decorator resolves named metadata arguments after
+ordinary Python argument evaluation; dialect callbacks own selector syntax and
+lookup in the active module.
 
-- ``src/tirx/script/printer/`` — converts PrimFunc, Buffer, SBlock, loops, expressions.
-- ``src/relax/script/printer/`` — converts relax.Function, bindings, types, operators.
-- ``src/script/printer/ir/`` — converts IRModule, shared types.
+Public script namespaces expose decorators and construction operations. The same
+underlying builders can also be used directly from Python. The transpiler therefore
+needs no separate mutable IR representation: it generates calls to this construction
+protocol.
 
-The final step calls ``DocToPythonScript()`` (``src/script/printer/doc_printer/python_doc_printer.cc``)
-to format the Doc tree into properly indented Python text.
+Printing and round trips
+------------------------
 
-Roundtrip
-~~~~~~~~~
+``IRDocsifier`` dispatches on IR types and context to produce a ``Doc`` tree of
+expressions and statements. It tracks scopes and names; ``DocToPythonScript`` formats
+the tree as Python text. This document tree is separate from the parser's Python AST.
 
-For printable IR with the required source context available:
+For example, a small function can be authored, printed and parsed again:
 
 .. code-block:: python
 
-   text = mod.script()           # IR → TVMScript text
-   reparsed = tvm.script.from_source(text)  # text → IR
-   tvm.ir.assert_structural_equal(mod, reparsed)
-
-This roundtrip property is relied upon by testing infrastructure and serialization workflows.
-Printed text uses canonical forms and may differ from hand-written TVMScript. External
-objects or Python attachments require their corresponding context; text alone does not
-serialize arbitrary Python state.
-
-
-Supported Python Syntax
------------------------
-
-TVMScript supports a subset of Python syntax. The table below summarizes what is supported
-and how each construct is interpreted:
-
-.. list-table::
-   :header-rows: 1
-   :widths: 25 15 60
-
-   * - Python Syntax
-     - TIR
-     - Relax
-   * - ``for i in range(n)``
-     - Serial loop nest
-     - No Relax IR loop construction
-   * - ``with T.sblock(...)``
-     - Spatial block scope
-     - N/A
-   * - ``with R.dataflow()``
-     - N/A
-     - Dataflow block
-   * - ``if ... else``
-     - TIR ``IfThenElse``; explicit ``I.constexpr`` selects a Python branch
-     - Relax ``If``; explicit ``I.constexpr`` selects a Python branch
-   * - ``while``
-     - ``T.While`` loop
-     - Not supported
-   * - ``x = expr``
-     - Variable binding
-     - Emit binding (implicit ``R.emit``)
-   * - ``x: T.Buffer(...)``
-     - Buffer annotation
-     - N/A
-   * - ``x: R.Tensor(...)``
-     - N/A
-     - Type annotation
-   * - ``return``
-     - Primitive return expression
-     - Function return value
-   * - ``A[i, j]``
-     - Buffer load
-     - Not applicable (use operators)
-   * - ``A[i, j] = expr``
-     - Buffer store
-     - Not applicable
-   * - Arithmetic (``+``, ``-``, etc.)
-     - PrimExpr operations
-     - Calls to Relax operators
-   * - Function calls
-     - ``T.*`` intrinsics
-     - ``R.*`` operators or ``call_tir`` / ``call_packed``
-
-Inside scripted function bodies, unsupported statement forms include ``class``,
-``try/except``, ``import``, and ``global``. ``yield`` and ``async/await`` are also unsupported.
-Place imports and ordinary Python class definitions in the surrounding Python program.
-
-
-TIR Syntax Reference
----------------------
-
-Function definition
-~~~~~~~~~~~~~~~~~~~
-
-.. code-block:: python
+   import tvm
+   from tvm.script import tirx as T
 
    @T.prim_func
-   def func_name(a: T.handle, b: T.handle):
-       m = T.int32()
-       n = T.int32()
-       A = T.match_buffer(a, (m, n), "float32")
-       B = T.match_buffer(b, (m,), "float32")
-       # function body
+   def increment(A: T.Buffer((4,), "float32")):
+       for i in T.serial(4):
+           A[i] = A[i] + 1.0
 
-- ``T.handle`` — opaque handle parameter (matched to a buffer inside the function).
-- ``T.Buffer(shape, dtype)`` — can also be used directly in the signature:
-  ``def func(A: T.Buffer((128,), "float32"))``.
+   text = increment.script()
+   reparsed = tvm.script.from_source(text)
+   tvm.ir.assert_structural_equal(increment, reparsed)
 
-Block and axes
-~~~~~~~~~~~~~~
+Printed source uses canonical forms rather than preserving the original spelling.
+Round trips require printable IR and any external objects needed by the source;
+the text does not serialize arbitrary Python state.
 
-Use ``@T.prim_func(s_tir=True)`` for functions with scheduled-TIR blocks and block axes.
-
-.. code-block:: python
-
-   for i, j in T.grid(128, 128):
-       with T.sblock("block_name"):
-           vi = T.axis.spatial(128, i)
-           vj = T.axis.reduce(128, j)
-           T.reads(A[vi, vj])
-           T.writes(B[vi])
-           # compute
-
-- ``T.axis.spatial`` / ``T.axis.reduce`` / ``T.axis.scan`` — declare axis variables with
-  their iteration domain and binding to outer loop variables.
-- ``T.axis.remap("SR", [i, j])`` — shorthand: ``S`` = spatial, ``R`` = reduce.
-- ``T.reads(...)``, ``T.writes(...)`` — declare buffer regions accessed by this block.
-
-Loop types
-~~~~~~~~~~
-
-.. code-block:: python
-
-   for i in T.serial(0, 128):          # sequential
-   for i in T.parallel(0, 128):        # parallel
-   for i in T.vectorized(0, 128):      # vectorized
-   for i in T.unroll(0, 128):          # unrolled
-   for i in T.thread_binding(0, 128, thread="threadIdx.x"):  # GPU thread
-
-Buffer operations
-~~~~~~~~~~~~~~~~~
-
-.. code-block:: python
-
-   C = T.alloc_buffer((128, 128), "float32")  # intermediate buffer
-   val = A[i, j]                               # buffer load
-   B[i] = val + 1.0                            # buffer store
-
-Common intrinsics
-~~~~~~~~~~~~~~~~~
-
-.. code-block:: python
-
-   T.exp(x), T.log(x), T.sqrt(x), T.tanh(x), ...  # math functions
-   T.cast(x, "float16")                              # type cast
-   T.if_then_else(cond, true_val, false_val)          # conditional expression
-   T.min(a, b), T.max(a, b)                           # min/max
-   T.call_extern("int32", "func_name", *args)                  # external function call
-   T.call_packed("func_name", *args)                   # packed function call
-   T.tvm_storage_sync("shared")                        # GPU memory fence
-
-
-Relax Syntax Reference
------------------------
-
-Function definition
-~~~~~~~~~~~~~~~~~~~
-
-.. code-block:: python
-
-   @R.function
-   def main(x: R.Tensor((128, 128), "float32"),
-            y: R.Tensor((128,), "float32")) -> R.Tensor((128, 128), "float32"):
-       # function body
-       return result
-
-- ``R.Tensor(shape, dtype)`` — tensor type annotation.
-- ``R.Tuple(...)``, ``R.Shape(...)``, ``R.Any()`` — other Relax type annotations.
-- ``R.function(private=True)`` — marks the function as module-private.
-- ``R.function(pure=False)`` — marks the function as having side effects.
-
-Dataflow blocks
-~~~~~~~~~~~~~~~
-
-.. code-block:: python
-
-   with R.dataflow():
-       lv0 = R.add(x, y)
-       lv1 = R.nn.relu(lv0)
-       R.output(lv1)
-
-Variables inside a ``R.dataflow()`` block are local to that block. ``R.output(...)`` exposes
-variables to the outer scope.
-
-Calling TIR functions
-~~~~~~~~~~~~~~~~~~~~~
-
-.. code-block:: python
-
-   out = R.call_tir(MyModule.my_kernel, (x, y), out_ty=R.Tensor((128,), "float32"))
-
-- ``MyModule.my_kernel`` — references a TIR ``PrimFunc`` in the same module.
-- ``out_ty`` — the type (shape and dtype) of the output tensor.
-
-Control flow
-~~~~~~~~~~~~
-
-Relax ``if`` uses plain Python ``if`` syntax. The condition must be a Relax variable with
-boolean type. Both branches are required.
+Namespace extension
+-------------------
 
-.. code-block:: python
+A language variant supplies construction hooks and a public script namespace, then
+registers its aliases with ``register_namespace``. ``register_namespace_initializer``
+supports lazy setup. ``tvm.script.register_dialect`` exposes a package through the
+public script namespace. Syntax policies are registered beside the operations that
+need them, while IR printing is extended through docsifier registrations.
 
-   @R.function
-   def f(cond: R.Tensor((), "bool"), x: R.Tensor((128,), "float32")):
-       if cond:
-           result = R.add(x, x)
-       else:
-           result = R.multiply(x, x)
-       return result
+This division keeps source acquisition, syntax translation and formatting shared.
+Language-specific construction and validation remain with the namespace and its
+builders.
diff --git a/docs/_sources/deep_dive/relax/learning.rst b/docs/_sources/deep_dive/relax/learning.rst
index d9c169150ef..df3f3222f55 100644
--- a/docs/_sources/deep_dive/relax/learning.rst
+++ b/docs/_sources/deep_dive/relax/learning.rst
@@ -126,11 +126,12 @@ for the end-to-end model execution. The code block below shows a TVMScript imple
 
     from tvm.script import ir as I
     from tvm.script import tirx as T
+    from tvm.script import s_tir as Ts
     from tvm.script import relax as R
 
     @I.ir_module
     class Module:
-        @T.prim_func(private=True)
+        @Ts.prim_func(private=True)
         def linear(x: T.handle, w: T.handle, b: T.handle, z: T.handle):
             M, N, K = T.int64(), T.int64(), T.int64()
             X = T.match_buffer(x, (M, K), "float32")
@@ -139,24 +140,24 @@ for the end-to-end model execution. The code block below shows a TVMScript imple
             Z = T.match_buffer(z, (M, N), "float32")
             Y = T.alloc_buffer((M, N), "float32")
             for i, j, k in T.grid(M, N, K):
-                with T.sblock("Y"):
-                    v_i, v_j, v_k = T.axis.remap("SSR", [i, j, k])
-                    with T.init():
+                with Ts.sblock("Y"):
+                    v_i, v_j, v_k = Ts.axis.remap("SSR", [i, j, k])
+                    with Ts.init():
                         Y[v_i, v_j] = T.float32(0.0)
                     Y[v_i, v_j] = Y[v_i, v_j] + X[v_i, v_k] * W[v_k, v_j]
             for i, j in T.grid(M, N):
-                with T.sblock("Z"):
-                    v_i, v_j = T.axis.remap("SS", [i, j])
+                with Ts.sblock("Z"):
+                    v_i, v_j = Ts.axis.remap("SS", [i, j])
                     Z[v_i, v_j] = Y[v_i, v_j] + B[v_j]
 
-        @T.prim_func(private=True)
+        @Ts.prim_func(private=True)
         def relu(x: T.handle, y: T.handle):
             M, N = T.int64(), T.int64()
             X = T.match_buffer(x, (M, N), "float32")
             Y = T.match_buffer(y, (M, N), "float32")
             for i, j in T.grid(M, N):
-                with T.sblock("Y"):
-                    v_i, v_j = T.axis.remap("SS", [i, j])
+                with Ts.sblock("Y"):
+                    v_i, v_j = Ts.axis.remap("SS", [i, j])
                     Y[v_i, v_j] = T.max(X[v_i, v_j], T.float32(0.0))
 
         @R.function
diff --git a/docs/_sources/deep_dive/relax/tutorials/relax_creation.rst b/docs/_sources/deep_dive/relax/tutorials/relax_creation.rst
index 31219814c15..df0e425f2f3 100644
--- a/docs/_sources/deep_dive/relax/tutorials/relax_creation.rst
+++ b/docs/_sources/deep_dive/relax/tutorials/relax_creation.rst
@@ -35,7 +35,7 @@ to define an IRModule, which contains both TensorIR and Relax functions.
 In this section, we will show how to define a simple MLP model with only
 high-level Relax operators using TVMScript.
 
-.. GENERATED FROM PYTHON SOURCE LINES 39-66
+.. GENERATED FROM PYTHON SOURCE LINES 39-67
 
 .. code-block:: Python
 
@@ -43,6 +43,7 @@ high-level Relax operators using TVMScript.
     from tvm import relax, topi
     from tvm.script import ir as I
     from tvm.script import relax as R
+    from tvm.script import s_tir as Ts
     from tvm.script import tirx as T
 
 
@@ -101,13 +102,13 @@ high-level Relax operators using TVMScript.
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 67-70
+.. GENERATED FROM PYTHON SOURCE LINES 68-71
 
 Relax is not only a graph-level IR, but also supports cross-level
 representation and transformation. To be specific, we can directly call
 TensorIR functions in Relax function.
 
-.. GENERATED FROM PYTHON SOURCE LINES 70-105
+.. GENERATED FROM PYTHON SOURCE LINES 71-106
 
 .. code-block:: Python
 
@@ -115,15 +116,15 @@ TensorIR functions in Relax function.
 
     @I.ir_module
     class RelaxModuleWithTIR:
-        @T.prim_func(s_tir=True)
+        @Ts.prim_func
         def relu(x: T.handle, y: T.handle):
             n = T.int64()
             m = T.int64()
             X = T.match_buffer(x, (n, m), "float32")
             Y = T.match_buffer(y, (n, m), "float32")
             for i, j in T.grid(n, m):
-                with T.sblock("relu"):
-                    vi, vj = T.axis.remap("SS", [i, j])
+                with Ts.sblock("relu"):
+                    vi, vj = Ts.axis.remap("SS", [i, j])
                     Y[vi, vj] = T.max(X[vi, vj], T.float32(0))
 
         @R.function
@@ -158,22 +159,23 @@ TensorIR functions in Relax function.
     # from tvm.script import ir as I
     # from tvm.script import tirx as T
     # from tvm.tirx.layout import Axis
+    # from tvm.script import s_tir as Ts
     # from tvm.script import relax as R
 
     m = TypeVar("m")
     n = TypeVar("n")
     @I.ir_module
     class Module:
-        @T.prim_func(s_tir=True)
+        @Ts.prim_func
         def relu(X: T.Buffer((n, m), "float32"), Y: T.Buffer((n, m), "float32")):
             m = T.int64()
             n = T.int64()
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for i, j in T.grid(n, m):
-                with T.sblock("relu"):
-                    v, v_1 = T.axis.remap("SS", [i, j])
-                    T.reads(X[v, v_1])
-                    T.writes(Y[v, v_1])
+                with Ts.sblock("relu"):
+                    v, v_1 = Ts.axis.remap("SS", [i, j])
+                    Ts.reads(X[v, v_1])
+                    Ts.writes(Y[v, v_1])
                     Y[v, v_1] = T.max(X[v, v_1], T.float32(0.0))
 
         @R.function
@@ -195,7 +197,7 @@ TensorIR functions in Relax function.
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 106-128
+.. GENERATED FROM PYTHON SOURCE LINES 107-129
 
 .. note::
 
@@ -220,7 +222,7 @@ TensorIR functions in Relax function.
     lv0: R.Tensor((n, 128), dtype="float32") = R.add(lv1, b0)
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 130-137
+.. GENERATED FROM PYTHON SOURCE LINES 131-138
 
 Create Relax programs using NNModule API
 ----------------------------------------
@@ -230,7 +232,7 @@ It is designed to be more intuitive and easier to use than TVMScript.
 In this section, we will show how to define the same MLP model using
 Relax NNModule API.
 
-.. GENERATED FROM PYTHON SOURCE LINES 137-155
+.. GENERATED FROM PYTHON SOURCE LINES 138-156
 
 .. code-block:: Python
 
@@ -259,12 +261,12 @@ Relax NNModule API.
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 156-158
+.. GENERATED FROM PYTHON SOURCE LINES 157-159
 
 After we define the NNModule, we can export it to TVM IRModule via
 ``export_tvm``.
 
-.. GENERATED FROM PYTHON SOURCE LINES 158-162
+.. GENERATED FROM PYTHON SOURCE LINES 159-163
 
 .. code-block:: Python
 
@@ -309,18 +311,18 @@ After we define the NNModule, we can export it to TVM IRModule via
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 163-165
+.. GENERATED FROM PYTHON SOURCE LINES 164-166
 
 We can also insert customized function calls into the NNModule, such as
 Tensor Expression(TE), TensorIR functions or other TVM packed functions.
 
-.. GENERATED FROM PYTHON SOURCE LINES 165-220
+.. GENERATED FROM PYTHON SOURCE LINES 166-221
 
 .. code-block:: Python
 
 
 
-    @T.prim_func(s_tir=True)
+    @Ts.prim_func
     def tir_linear(x: T.handle, w: T.handle, b: T.handle, z: T.handle):
         M = T.int64()
         N = T.int64()
@@ -330,14 +332,14 @@ Tensor Expression(TE), TensorIR functions or other TVM packed functions.
         B = T.match_buffer(b, (N,), "float32")
         Z = T.match_buffer(z, (M, N), "float32")
         for i, j, k in T.grid(M, N, K):
-            with T.sblock("linear"):
-                vi, vj, vk = T.axis.remap("SSR", [i, j, k])
-                with T.init():
+            with Ts.sblock("linear"):
+                vi, vj, vk = Ts.axis.remap("SSR", [i, j, k])
+                with Ts.init():
                     Z[vi, vj] = 0
                 Z[vi, vj] = Z[vi, vj] + X[vi, vk] * W[vj, vk]
         for i, j in T.grid(M, N):
-            with T.sblock("add"):
-                vi, vj = T.axis.remap("SS", [i, j])
+            with Ts.sblock("add"):
+                vi, vj = Ts.axis.remap("SS", [i, j])
                 Z[vi, vj] = Z[vi, vj] + B[vj]
 
 
@@ -385,6 +387,7 @@ Tensor Expression(TE), TensorIR functions or other TVM packed functions.
     # from tvm.script import ir as I
     # from tvm.script import tirx as T
     # from tvm.tirx.layout import Axis
+    # from tvm.script import s_tir as Ts
     # from tvm.script import relax as R
 
     n = TypeVar("n")
@@ -393,37 +396,37 @@ Tensor Expression(TE), TensorIR functions or other TVM packed functions.
     N = TypeVar("N")
     @I.ir_module
     class Module:
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def relu(env_linear: T.Buffer((n, T.int64(128)), "float32"), compute: T.Buffer((n, T.int64(128)), "float32")):
             n = T.int64()
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for i0, i1 in T.grid(n, T.int64(128)):
-                with T.sblock("compute"):
-                    v_i0, v_i1 = T.axis.remap("SS", [i0, i1])
-                    T.reads(env_linear[v_i0, v_i1])
-                    T.writes(compute[v_i0, v_i1])
+                with Ts.sblock("compute"):
+                    v_i0, v_i1 = Ts.axis.remap("SS", [i0, i1])
+                    Ts.reads(env_linear[v_i0, v_i1])
+                    Ts.writes(compute[v_i0, v_i1])
                     compute[v_i0, v_i1] = T.max(env_linear[v_i0, v_i1], T.float32(0.0))
 
-        @T.prim_func(s_tir=True)
+        @Ts.prim_func
         def tir_linear(X: T.Buffer((M, K), "float32"), W: T.Buffer((N, K), "float32"), B: T.Buffer((N,), "float32"), Z: T.Buffer((M, N), "float32")):
             K = T.int64()
             M = T.int64()
             N = T.int64()
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for i, j, k in T.grid(M, N, K):
-                with T.sblock("linear"):
-                    v, v_1, v_2 = T.axis.remap("SSR", [i, j, k])
-                    T.reads(X[v, v_2], W[v_1, v_2])
-                    T.writes(Z[v, v_1])
-                    with T.init():
+                with Ts.sblock("linear"):
+                    v, v_1, v_2 = Ts.axis.remap("SSR", [i, j, k])
+                    Ts.reads(X[v, v_2], W[v_1, v_2])
+                    Ts.writes(Z[v, v_1])
+                    with Ts.init():
                         Z[v, v_1] = T.float32(0.0)
                     Z[v, v_1] = Z[v, v_1] + X[v, v_2] * W[v_1, v_2]
             for i, j in T.grid(M, N):
-                with T.sblock("add"):
-                    v, v_1 = T.axis.remap("SS", [i, j])
-                    T.reads(Z[v, v_1], B[v_1])
-                    T.writes(Z[v, v_1])
+                with Ts.sblock("add"):
+                    v, v_1 = Ts.axis.remap("SS", [i, j])
+                    Ts.reads(Z[v, v_1], B[v_1])
+                    Ts.writes(Z[v, v_1])
                     Z[v, v_1] = Z[v, v_1] + B[v_1]
 
         @R.function
@@ -443,7 +446,7 @@ Tensor Expression(TE), TensorIR functions or other TVM packed functions.
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 221-227
+.. GENERATED FROM PYTHON SOURCE LINES 222-228
 
 Create Relax programs using Block Builder API
 ---------------------------------------------
@@ -452,7 +455,7 @@ creating Relax programs. It is a IR builder API, which is more
 low-level and widely used in TVM's internal logic, e.g writing a
 customized pass.
 
-.. GENERATED FROM PYTHON SOURCE LINES 227-246
+.. GENERATED FROM PYTHON SOURCE LINES 228-247
 
 .. code-block:: Python
 
@@ -511,12 +514,12 @@ customized pass.
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 247-249
+.. GENERATED FROM PYTHON SOURCE LINES 248-250
 
 Also, Block Builder API supports building cross-level IRModule with both
 Relax functions, TensorIR functions and other TVM packed functions.
 
-.. GENERATED FROM PYTHON SOURCE LINES 249-274
+.. GENERATED FROM PYTHON SOURCE LINES 250-275
 
 .. code-block:: Python
 
@@ -557,6 +560,7 @@ Relax functions, TensorIR functions and other TVM packed functions.
     # from tvm.script import ir as I
     # from tvm.script import tirx as T
     # from tvm.tirx.layout import Axis
+    # from tvm.script import s_tir as Ts
     # from tvm.script import relax as R
 
     v = TypeVar("v")
@@ -565,37 +569,37 @@ Relax functions, TensorIR functions and other TVM packed functions.
     N = TypeVar("N")
     @I.ir_module
     class Module:
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def relu(lv: T.Buffer((v, T.int64(128)), "float32"), compute: T.Buffer((v, T.int64(128)), "float32")):
             v = T.int64()
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for i0, i1 in T.grid(v, T.int64(128)):
-                with T.sblock("compute"):
-                    v_i0, v_i1 = T.axis.remap("SS", [i0, i1])
-                    T.reads(lv[v_i0, v_i1])
-                    T.writes(compute[v_i0, v_i1])
+                with Ts.sblock("compute"):
+                    v_i0, v_i1 = Ts.axis.remap("SS", [i0, i1])
+                    Ts.reads(lv[v_i0, v_i1])
+                    Ts.writes(compute[v_i0, v_i1])
                     compute[v_i0, v_i1] = T.max(lv[v_i0, v_i1], T.float32(0.0))
 
-        @T.prim_func(s_tir=True)
+        @Ts.prim_func
         def tir_linear(X: T.Buffer((M, K), "float32"), W: T.Buffer((N, K), "float32"), B: T.Buffer((N,), "float32"), Z: T.Buffer((M, N), "float32")):
             K = T.int64()
             M = T.int64()
             N = T.int64()
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for i, j, k in T.grid(M, N, K):
-                with T.sblock("linear"):
-                    v, v_1, v_2 = T.axis.remap("SSR", [i, j, k])
-                    T.reads(X[v, v_2], W[v_1, v_2])
-                    T.writes(Z[v, v_1])
-                    with T.init():
+                with Ts.sblock("linear"):
+                    v, v_1, v_2 = Ts.axis.remap("SSR", [i, j, k])
+                    Ts.reads(X[v, v_2], W[v_1, v_2])
+                    Ts.writes(Z[v, v_1])
+                    with Ts.init():
                         Z[v, v_1] = T.float32(0.0)
                     Z[v, v_1] = Z[v, v_1] + X[v, v_2] * W[v_1, v_2]
             for i, j in T.grid(M, N):
-                with T.sblock("add"):
-                    v, v_1 = T.axis.remap("SS", [i, j])
-                    T.reads(Z[v, v_1], B[v_1])
-                    T.writes(Z[v, v_1])
+                with Ts.sblock("add"):
+                    v, v_1 = Ts.axis.remap("SS", [i, j])
+                    Ts.reads(Z[v, v_1], B[v_1])
+                    Ts.writes(Z[v, v_1])
                     Z[v, v_1] = Z[v, v_1] + B[v_1]
 
         @R.function
@@ -614,7 +618,7 @@ Relax functions, TensorIR functions and other TVM packed functions.
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 275-280
+.. GENERATED FROM PYTHON SOURCE LINES 276-281
 
 Note that the Block Builder API is not as user-friendly as the above APIs,
 but it is lowest-level API and works closely with the IR definition. We
@@ -622,7 +626,7 @@ recommend using the above APIs for users who only want to define and
 transform a ML model. But for those who want to build more complex
 transformations, the Block Builder API is a more flexible choice.
 
-.. GENERATED FROM PYTHON SOURCE LINES 282-286
+.. GENERATED FROM PYTHON SOURCE LINES 283-287
 
 Summary
 -------
diff --git a/docs/_sources/deep_dive/relax/tutorials/relax_transformation.rst b/docs/_sources/deep_dive/relax/tutorials/relax_transformation.rst
index 33a5b4509ca..d755ba479d6 100644
--- a/docs/_sources/deep_dive/relax/tutorials/relax_transformation.rst
+++ b/docs/_sources/deep_dive/relax/tutorials/relax_transformation.rst
@@ -124,95 +124,96 @@ into low-level operators.
     # from tvm.script import ir as I
     # from tvm.script import tirx as T
     # from tvm.tirx.layout import Axis
+    # from tvm.script import s_tir as Ts
     # from tvm.script import relax as R
 
     n = TypeVar("n")
     @I.ir_module
     class Module:
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def add(matmul: T.Buffer((n, T.int64(128)), "float32"), fc1_bias: T.Buffer((T.int64(128),), "float32"), T_add: T.Buffer((n, T.int64(128)), "float32")):
             n = T.int64()
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for ax0, ax1 in T.grid(n, T.int64(128)):
-                with T.sblock("T_add"):
-                    v_ax0, v_ax1 = T.axis.remap("SS", [ax0, ax1])
-                    T.reads(matmul[v_ax0, v_ax1], fc1_bias[v_ax1])
-                    T.writes(T_add[v_ax0, v_ax1])
+                with Ts.sblock("T_add"):
+                    v_ax0, v_ax1 = Ts.axis.remap("SS", [ax0, ax1])
+                    Ts.reads(matmul[v_ax0, v_ax1], fc1_bias[v_ax1])
+                    Ts.writes(T_add[v_ax0, v_ax1])
                     T_add[v_ax0, v_ax1] = matmul[v_ax0, v_ax1] + fc1_bias[v_ax1]
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def add1(matmul1: T.Buffer((n, T.int64(10)), "float32"), fc2_bias: T.Buffer((T.int64(10),), "float32"), T_add: T.Buffer((n, T.int64(10)), "float32")):
             n = T.int64()
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for ax0, ax1 in T.grid(n, T.int64(10)):
-                with T.sblock("T_add"):
-                    v_ax0, v_ax1 = T.axis.remap("SS", [ax0, ax1])
-                    T.reads(matmul1[v_ax0, v_ax1], fc2_bias[v_ax1])
-                    T.writes(T_add[v_ax0, v_ax1])
+                with Ts.sblock("T_add"):
+                    v_ax0, v_ax1 = Ts.axis.remap("SS", [ax0, ax1])
+                    Ts.reads(matmul1[v_ax0, v_ax1], fc2_bias[v_ax1])
+                    Ts.writes(T_add[v_ax0, v_ax1])
                     T_add[v_ax0, v_ax1] = matmul1[v_ax0, v_ax1] + fc2_bias[v_ax1]
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def matmul(x: T.Buffer((n, T.int64(784)), "float32"), permute_dims: T.Buffer((T.int64(784), T.int64(128)), "float32"), matmul: T.Buffer((n, T.int64(128)), "float32")):
             n = T.int64()
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for i0, i1, k in T.grid(n, T.int64(128), T.int64(784)):
-                with T.sblock("matmul"):
-                    v_i0, v_i1, v_k = T.axis.remap("SSR", [i0, i1, k])
-                    T.reads(x[v_i0, v_k], permute_dims[v_k, v_i1])
-                    T.writes(matmul[v_i0, v_i1])
-                    with T.init():
+                with Ts.sblock("matmul"):
+                    v_i0, v_i1, v_k = Ts.axis.remap("SSR", [i0, i1, k])
+                    Ts.reads(x[v_i0, v_k], permute_dims[v_k, v_i1])
+                    Ts.writes(matmul[v_i0, v_i1])
+                    with Ts.init():
                         matmul[v_i0, v_i1] = T.float32(0.0)
                     matmul[v_i0, v_i1] = matmul[v_i0, v_i1] + x[v_i0, v_k] * permute_dims[v_k, v_i1]
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def matmul1(relu: T.Buffer((n, T.int64(128)), "float32"), permute_dims1: T.Buffer((T.int64(128), T.int64(10)), "float32"), matmul: T.Buffer((n, T.int64(10)), "float32")):
             n = T.int64()
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for i0, i1, k in T.grid(n, T.int64(10), T.int64(128)):
-                with T.sblock("matmul"):
-                    v_i0, v_i1, v_k = T.axis.remap("SSR", [i0, i1, k])
-                    T.reads(relu[v_i0, v_k], permute_dims1[v_k, v_i1])
-                    T.writes(matmul[v_i0, v_i1])
-                    with T.init():
+                with Ts.sblock("matmul"):
+                    v_i0, v_i1, v_k = Ts.axis.remap("SSR", [i0, i1, k])
+                    Ts.reads(relu[v_i0, v_k], permute_dims1[v_k, v_i1])
+                    Ts.writes(matmul[v_i0, v_i1])
+                    with Ts.init():
                         matmul[v_i0, v_i1] = T.float32(0.0)
                     matmul[v_i0, v_i1] = matmul[v_i0, v_i1] + relu[v_i0, v_k] * permute_dims1[v_k, v_i1]
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def relu(add: T.Buffer((n, T.int64(128)), "float32"), compute: T.Buffer((n, T.int64(128)), "float32")):
             n = T.int64()
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for i0, i1 in T.grid(n, T.int64(128)):
-                with T.sblock("compute"):
-                    v_i0, v_i1 = T.axis.remap("SS", [i0, i1])
-                    T.reads(add[v_i0, v_i1])
-                    T.writes(compute[v_i0, v_i1])
+                with Ts.sblock("compute"):
+                    v_i0, v_i1 = Ts.axis.remap("SS", [i0, i1])
+                    Ts.reads(add[v_i0, v_i1])
+                    Ts.writes(compute[v_i0, v_i1])
                     compute[v_i0, v_i1] = T.max(add[v_i0, v_i1], T.float32(0.0))
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def transpose(fc1_weight: T.Buffer((T.int64(128), T.int64(784)), "float32"), T_transpose: T.Buffer((T.int64(784), T.int64(128)), "float32")):
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for ax0, ax1 in T.grid(T.int64(784), T.int64(128)):
-                with T.sblock("T_transpose"):
-                    v_ax0, v_ax1 = T.axis.remap("SS", [ax0, ax1])
-                    T.reads(fc1_weight[v_ax1, v_ax0])
-                    T.writes(T_transpose[v_ax0, v_ax1])
+                with Ts.sblock("T_transpose"):
+                    v_ax0, v_ax1 = Ts.axis.remap("SS", [ax0, ax1])
+                    Ts.reads(fc1_weight[v_ax1, v_ax0])
+                    Ts.writes(T_transpose[v_ax0, v_ax1])
                     T_transpose[v_ax0, v_ax1] = fc1_weight[v_ax1, v_ax0]
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def transpose1(fc2_weight: T.Buffer((T.int64(10), T.int64(128)), "float32"), T_transpose: T.Buffer((T.int64(128), T.int64(10)), "float32")):
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for ax0, ax1 in T.grid(T.int64(128), T.int64(10)):
-                with T.sblock("T_transpose"):
-                    v_ax0, v_ax1 = T.axis.remap("SS", [ax0, ax1])
-                    T.reads(fc2_weight[v_ax1, v_ax0])
-                    T.writes(T_transpose[v_ax0, v_ax1])
+                with Ts.sblock("T_transpose"):
+                    v_ax0, v_ax1 = Ts.axis.remap("SS", [ax0, ax1])
+                    Ts.reads(fc2_weight[v_ax1, v_ax0])
+                    Ts.writes(T_transpose[v_ax0, v_ax1])
                     T_transpose[v_ax0, v_ax1] = fc2_weight[v_ax1, v_ax0]
 
         @R.function
@@ -271,80 +272,81 @@ a set of passes. We can apply them in a sequence.
     # from tvm.script import ir as I
     # from tvm.script import tirx as T
     # from tvm.tirx.layout import Axis
+    # from tvm.script import s_tir as Ts
     # from tvm.script import relax as R
 
     n = TypeVar("n")
     @I.ir_module
     class Module:
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def fused_matmul1_add1(relu: T.Buffer((n, T.int64(128)), "float32"), permute_dims1: T.Buffer((T.int64(128), T.int64(10)), "float32"), fc2_bias: T.Buffer((T.int64(10),), "float32"), T_add_intermediate: T.Buffer((n, T.int64(10)), "float32")):
             n = T.int64()
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
-            matmul_intermediate = T.sblock_alloc_buffer((n, T.int64(10)))
+            # with Ts.sblock("root"):
+            matmul_intermediate = Ts.sblock_alloc_buffer((n, T.int64(10)))
             for i0, i1, k in T.grid(n, T.int64(10), T.int64(128)):
-                with T.sblock("matmul"):
-                    v_i0, v_i1, v_k = T.axis.remap("SSR", [i0, i1, k])
-                    T.reads(relu[v_i0, v_k], permute_dims1[v_k, v_i1])
-                    T.writes(matmul_intermediate[v_i0, v_i1])
-                    with T.init():
+                with Ts.sblock("matmul"):
+                    v_i0, v_i1, v_k = Ts.axis.remap("SSR", [i0, i1, k])
+                    Ts.reads(relu[v_i0, v_k], permute_dims1[v_k, v_i1])
+                    Ts.writes(matmul_intermediate[v_i0, v_i1])
+                    with Ts.init():
                         matmul_intermediate[v_i0, v_i1] = T.float32(0.0)
                     matmul_intermediate[v_i0, v_i1] = matmul_intermediate[v_i0, v_i1] + relu[v_i0, v_k] * permute_dims1[v_k, v_i1]
             for ax0, ax1 in T.grid(n, T.int64(10)):
-                with T.sblock("T_add"):
-                    v_ax0, v_ax1 = T.axis.remap("SS", [ax0, ax1])
-                    T.reads(matmul_intermediate[v_ax0, v_ax1], fc2_bias[v_ax1])
-                    T.writes(T_add_intermediate[v_ax0, v_ax1])
+                with Ts.sblock("T_add"):
+                    v_ax0, v_ax1 = Ts.axis.remap("SS", [ax0, ax1])
+                    Ts.reads(matmul_intermediate[v_ax0, v_ax1], fc2_bias[v_ax1])
+                    Ts.writes(T_add_intermediate[v_ax0, v_ax1])
                     T_add_intermediate[v_ax0, v_ax1] = matmul_intermediate[v_ax0, v_ax1] + fc2_bias[v_ax1]
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def fused_matmul_add_relu(x: T.Buffer((n, T.int64(784)), "float32"), permute_dims: T.Buffer((T.int64(784), T.int64(128)), "float32"), fc1_bias: T.Buffer((T.int64(128),), "float32"), compute_intermediate: T.Buffer((n, T.int64(128)), "float32")):
             n = T.int64()
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
-            matmul_intermediate = T.sblock_alloc_buffer((n, T.int64(128)))
-            T_add_intermediate = T.sblock_alloc_buffer((n, T.int64(128)))
+            # with Ts.sblock("root"):
+            matmul_intermediate = Ts.sblock_alloc_buffer((n, T.int64(128)))
+            T_add_intermediate = Ts.sblock_alloc_buffer((n, T.int64(128)))
             for i0, i1, k in T.grid(n, T.int64(128), T.int64(784)):
-                with T.sblock("matmul"):
-                    v_i0, v_i1, v_k = T.axis.remap("SSR", [i0, i1, k])
-                    T.reads(x[v_i0, v_k], permute_dims[v_k, v_i1])
-                    T.writes(matmul_intermediate[v_i0, v_i1])
-                    with T.init():
+                with Ts.sblock("matmul"):
+                    v_i0, v_i1, v_k = Ts.axis.remap("SSR", [i0, i1, k])
+                    Ts.reads(x[v_i0, v_k], permute_dims[v_k, v_i1])
+                    Ts.writes(matmul_intermediate[v_i0, v_i1])
+                    with Ts.init():
                         matmul_intermediate[v_i0, v_i1] = T.float32(0.0)
                     matmul_intermediate[v_i0, v_i1] = matmul_intermediate[v_i0, v_i1] + x[v_i0, v_k] * permute_dims[v_k, v_i1]
             for ax0, ax1 in T.grid(n, T.int64(128)):
-                with T.sblock("T_add"):
-                    v_ax0, v_ax1 = T.axis.remap("SS", [ax0, ax1])
-                    T.reads(matmul_intermediate[v_ax0, v_ax1], fc1_bias[v_ax1])
-                    T.writes(T_add_intermediate[v_ax0, v_ax1])
+                with Ts.sblock("T_add"):
+                    v_ax0, v_ax1 = Ts.axis.remap("SS", [ax0, ax1])
+                    Ts.reads(matmul_intermediate[v_ax0, v_ax1], fc1_bias[v_ax1])
+                    Ts.writes(T_add_intermediate[v_ax0, v_ax1])
                     T_add_intermediate[v_ax0, v_ax1] = matmul_intermediate[v_ax0, v_ax1] + fc1_bias[v_ax1]
             for i0, i1 in T.grid(n, T.int64(128)):
-                with T.sblock("compute"):
-                    v_i0, v_i1 = T.axis.remap("SS", [i0, i1])
-                    T.reads(T_add_intermediate[v_i0, v_i1])
-                    T.writes(compute_intermediate[v_i0, v_i1])
+                with Ts.sblock("compute"):
+                    v_i0, v_i1 = Ts.axis.remap("SS", [i0, i1])
+                    Ts.reads(T_add_intermediate[v_i0, v_i1])
+                    Ts.writes(compute_intermediate[v_i0, v_i1])
                     compute_intermediate[v_i0, v_i1] = T.max(T_add_intermediate[v_i0, v_i1], T.float32(0.0))
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def transpose(fc1_weight: T.Buffer((T.int64(128), T.int64(784)), "float32"), T_transpose: T.Buffer((T.int64(784), T.int64(128)), "float32")):
             T.func_attr({"op_pattern": 2, "tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for ax0, ax1 in T.grid(T.int64(784), T.int64(128)):
-                with T.sblock("T_transpose"):
-                    v_ax0, v_ax1 = T.axis.remap("SS", [ax0, ax1])
-                    T.reads(fc1_weight[v_ax1, v_ax0])
-                    T.writes(T_transpose[v_ax0, v_ax1])
+                with Ts.sblock("T_transpose"):
+                    v_ax0, v_ax1 = Ts.axis.remap("SS", [ax0, ax1])
+                    Ts.reads(fc1_weight[v_ax1, v_ax0])
+                    Ts.writes(T_transpose[v_ax0, v_ax1])
                     T_transpose[v_ax0, v_ax1] = fc1_weight[v_ax1, v_ax0]
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def transpose1(fc2_weight: T.Buffer((T.int64(10), T.int64(128)), "float32"), T_transpose: T.Buffer((T.int64(128), T.int64(10)), "float32")):
             T.func_attr({"op_pattern": 2, "tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for ax0, ax1 in T.grid(T.int64(128), T.int64(10)):
-                with T.sblock("T_transpose"):
-                    v_ax0, v_ax1 = T.axis.remap("SS", [ax0, ax1])
-                    T.reads(fc2_weight[v_ax1, v_ax0])
-                    T.writes(T_transpose[v_ax0, v_ax1])
+                with Ts.sblock("T_transpose"):
+                    v_ax0, v_ax1 = Ts.axis.remap("SS", [ax0, ax1])
+                    Ts.reads(fc2_weight[v_ax1, v_ax0])
+                    Ts.writes(T_transpose[v_ax0, v_ax1])
                     T_transpose[v_ax0, v_ax1] = fc2_weight[v_ax1, v_ax0]
 
         @R.function
diff --git a/docs/_sources/deep_dive/relax/tutorials/sg_execution_times.rst b/docs/_sources/deep_dive/relax/tutorials/sg_execution_times.rst
index 7d95d74f3cd..834b61457ce 100644
--- a/docs/_sources/deep_dive/relax/tutorials/sg_execution_times.rst
+++ b/docs/_sources/deep_dive/relax/tutorials/sg_execution_times.rst
@@ -6,7 +6,7 @@
 
 Computation times
 =================
-**00:00.133** total execution time for 2 files **from deep_dive/relax/tutorials**:
+**00:00.134** total execution time for 2 files **from deep_dive/relax/tutorials**:
 
 .. container::
 
@@ -33,7 +33,7 @@ Computation times
      - Time
      - Mem (MB)
    * - :ref:`sphx_glr_deep_dive_relax_tutorials_relax_creation.py` (``relax_creation.py``)
-     - 00:00.079
+     - 00:00.080
      - 0.0
    * - :ref:`sphx_glr_deep_dive_relax_tutorials_relax_transformation.py` (``relax_transformation.py``)
      - 00:00.054
diff --git a/docs/_sources/deep_dive/tensor_ir/abstraction.rst b/docs/_sources/deep_dive/tensor_ir/abstraction.rst
index a36e15677ee..bfd790150ff 100644
--- a/docs/_sources/deep_dive/tensor_ir/abstraction.rst
+++ b/docs/_sources/deep_dive/tensor_ir/abstraction.rst
@@ -30,16 +30,17 @@ the compute statements themselves.
 .. code:: python
 
     from tvm.script import tirx as T
+    from tvm.script import s_tir as Ts
 
-    @T.prim_func
+    @Ts.prim_func
     def main(
         A: T.Buffer((128,), "float32"),
         B: T.Buffer((128,), "float32"),
         C: T.Buffer((128,), "float32"),
     ) -> None:
         for i in range(128):
-            with T.sblock("C"):
-                vi = T.axis.spatial(128, i)
+            with Ts.sblock("C"):
+                vi = Ts.axis.spatial(128, i)
                 C[vi] = A[vi] + B[vi]
 
 Key Elements of Tensor Programs
@@ -60,11 +61,11 @@ computations rely on the loop's sequence. Fortunately, the majority of primitive
 functions we focus on possess favorable properties, such as independence among loop iterations.
 For instance, the aforementioned program includes block and iteration annotations:
 
-- The **block annotation** ``with T.sblock("C")`` signifies that the block is the fundamental
+- The **block annotation** ``with Ts.sblock("C")`` signifies that the block is the fundamental
   computation unit designated for scheduling. A block may encompass a single computation
   statement, multiple computation statements with loops, or opaque intrinsics such as Tensor
   Core instructions.
-- The **iteration annotation** ``T.axis.spatial``, indicating that variable ``vi`` is mapped
+- The **iteration annotation** ``Ts.axis.spatial``, indicating that variable ``vi`` is mapped
   to ``i``, and all iterations are independent.
 
 While this information isn't crucial for *executing* the specific program, it proves useful when
diff --git a/docs/_sources/deep_dive/tensor_ir/learning.rst b/docs/_sources/deep_dive/tensor_ir/learning.rst
index e93870c32d5..7d72d597c18 100644
--- a/docs/_sources/deep_dive/tensor_ir/learning.rst
+++ b/docs/_sources/deep_dive/tensor_ir/learning.rst
@@ -60,26 +60,27 @@ language called TVMScript, which is a domain-specific dialect embedded in python
 .. code:: python
 
     from tvm.script import tirx as T
+    from tvm.script import s_tir as Ts
 
     @tvm.script.ir_module
     class MyModule:
-        @T.prim_func
+        @Ts.prim_func
         def mm_relu(A: T.Buffer((128, 128), "float32"),
                     B: T.Buffer((128, 128), "float32"),
                     C: T.Buffer((128, 128), "float32")):
             Y = T.alloc_buffer((128, 128), dtype="float32")
             for i, j, k in T.grid(128, 128, 128):
-                with T.sblock("Y"):
-                    vi = T.axis.spatial(128, i)
-                    vj = T.axis.spatial(128, j)
-                    vk = T.axis.reduce(128, k)
-                    with T.init():
+                with Ts.sblock("Y"):
+                    vi = Ts.axis.spatial(128, i)
+                    vj = Ts.axis.spatial(128, j)
+                    vk = Ts.axis.reduce(128, k)
+                    with Ts.init():
                         Y[vi, vj] = T.float32(0)
                     Y[vi, vj] = Y[vi, vj] + A[vi, vk] * B[vk, vj]
             for i, j in T.grid(128, 128):
-                with T.sblock("C"):
-                    vi = T.axis.spatial(128, i)
-                    vj = T.axis.spatial(128, j)
+                with Ts.sblock("C"):
+                    vi = Ts.axis.spatial(128, i)
+                    vj = Ts.axis.spatial(128, j)
                     C[vi, vj] = T.max(Y[vi, vj], T.float32(0))
 
 
@@ -139,16 +140,16 @@ Loop Iterations
 Computational Block
 ~~~~~~~~~~~~~~~~~~~
 A significant distinction lies in computational statements:
-**TensorIR incorporates an additional construct termed** ``T.sblock``.
+**TensorIR incorporates an additional construct termed** ``Ts.sblock``.
 
 .. code:: python
 
     # TensorIR
-    with T.sblock("Y"):
-        vi = T.axis.spatial(128, i)
-        vj = T.axis.spatial(128, j)
-        vk = T.axis.reduce(128, k)
-        with T.init():
+    with Ts.sblock("Y"):
+        vi = Ts.axis.spatial(128, i)
+        vj = Ts.axis.spatial(128, j)
+        vk = Ts.axis.reduce(128, k)
+        with Ts.init():
             Y[vi, vj] = T.float32(0)
         Y[vi, vj] = Y[vi, vj] + A[vi, vk] * B[vk, vj]
     # NumPy
@@ -163,21 +164,21 @@ a block encompasses more information than standard NumPy code. It comprises a se
 
 .. code:: python
 
-    vi = T.axis.spatial(128, i)
-    vj = T.axis.spatial(128, j)
-    vk = T.axis.reduce(128, k)
+    vi = Ts.axis.spatial(128, i)
+    vj = Ts.axis.spatial(128, j)
+    vk = Ts.axis.reduce(128, k)
 
 The above three lines declare the **key properties** about block axes in the following syntax.
 
 .. code:: python
 
-    [block_axis] = T.axis.[axis_type]([axis_range], [mapped_value])
+    [block_axis] = Ts.axis.[axis_type]([axis_range], [mapped_value])
 
 These three lines convey the following details:
 
 - They specify the binding of ``vi``, ``vj``, ``vk`` (in this instance, to ``i``, ``j``, ``k``).
 - They declare the original range intended for ``vi``, ``vj``, ``vk``
-  (the 128 in ``T.axis.spatial(128, i)``).
+  (the 128 in ``Ts.axis.spatial(128, i)``).
 - They announce the properties of the iterators (spatial, reduce).
 
 Block Axis Properties
@@ -208,8 +209,8 @@ error because the loop expects an iterator of size 128, but we only bound it to
 
     # wrong program due to loop and block iteration mismatch
     for i in range(127):
-        with T.sblock("C"):
-            vi = T.axis.spatial(128, i)
+        with Ts.sblock("C"):
+            vi = Ts.axis.spatial(128, i)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^
             error here due to iterator size mismatch
             ...
@@ -217,20 +218,20 @@ error because the loop expects an iterator of size 128, but we only bound it to
 Sugars for Block Axes Binding
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 In situations where each of the block axes is directly mapped to an outer loop iterator,
-we can use ``T.axis.remap`` to declare the block axis in a single line.
+we can use ``Ts.axis.remap`` to declare the block axis in a single line.
 
 .. code:: python
 
     # SSR means the properties of each axes are "spatial", "spatial", "reduce"
-    vi, vj, vk = T.axis.remap("SSR", [i, j, k])
+    vi, vj, vk = Ts.axis.remap("SSR", [i, j, k])
 
 which is equivalent to
 
 .. code:: python
 
-    vi = T.axis.spatial(range_of_i, i)
-    vj = T.axis.spatial(range_of_j, j)
-    vk = T.axis.reduce (range_of_k, k)
+    vi = Ts.axis.spatial(range_of_i, i)
+    vj = Ts.axis.spatial(range_of_j, j)
+    vk = Ts.axis.reduce (range_of_k, k)
 
 So we can also write the programs as follows.
 
@@ -238,18 +239,18 @@ So we can also write the programs as follows.
 
     @tvm.script.ir_module
     class MyModuleWithAxisRemapSugar:
-        @T.prim_func
+        @Ts.prim_func
         def mm_relu(A: T.Buffer((128, 128), "float32"),
                     B: T.Buffer((128, 128), "float32"),
                     C: T.Buffer((128, 128), "float32")):
             Y = T.alloc_buffer((128, 128), dtype="float32")
             for i, j, k in T.grid(128, 128, 128):
-                with T.sblock("Y"):
-                    vi, vj, vk = T.axis.remap("SSR", [i, j, k])
-                    with T.init():
+                with Ts.sblock("Y"):
+                    vi, vj, vk = Ts.axis.remap("SSR", [i, j, k])
+                    with Ts.init():
                         Y[vi, vj] = T.float32(0)
                     Y[vi, vj] = Y[vi, vj] + A[vi, vk] * B[vk, vj]
             for i, j in T.grid(128, 128):
-                with T.sblock("C"):
-                    vi, vj = T.axis.remap("SS", [i, j])
+                with Ts.sblock("C"):
+                    vi, vj = Ts.axis.remap("SS", [i, j])
                     C[vi, vj] = T.max(Y[vi, vj], T.float32(0))
diff --git a/docs/_sources/deep_dive/tensor_ir/tutorials/dlight_gpu_scheduling.rst b/docs/_sources/deep_dive/tensor_ir/tutorials/dlight_gpu_scheduling.rst
index 059fe5a0c09..95025719e12 100644
--- a/docs/_sources/deep_dive/tensor_ir/tutorials/dlight_gpu_scheduling.rst
+++ b/docs/_sources/deep_dive/tensor_ir/tutorials/dlight_gpu_scheduling.rst
@@ -171,154 +171,155 @@ Here we use a common subset of rules. The full catalog (including ``LowBatchGEMV
     # from tvm.script import ir as I
     # from tvm.script import tirx as T
     # from tvm.tirx.layout import Axis
+    # from tvm.script import s_tir as Ts
     # from tvm.script import relax as R
 
     @I.ir_module
     class Module:
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def fused_matmul1_add1(layer_norm: T.Buffer((T.int64(1), T.int64(768)), "float32"), permute_dims1: T.Buffer((T.int64(768), T.int64(256)), "float32"), fc2_bias: T.Buffer((T.int64(256),), "float32"), T_add_intermediate: T.Buffer((T.int64(1), T.int64(256)), "float32")):
             T.func_attr({"tirx.is_scheduled": True, "tirx.noalias": True})
-            # with T.sblock("root"):
-            matmul_intermediate_local = T.sblock_alloc_buffer((T.int64(1), T.int64(256)), scope="local")
-            matmul_intermediate_rf_local = T.sblock_alloc_buffer((T.int64(16), T.int64(1), T.int64(256)), scope="local")
+            # with Ts.sblock("root"):
+            matmul_intermediate_local = Ts.sblock_alloc_buffer((T.int64(1), T.int64(256)), scope="local")
+            matmul_intermediate_rf_local = Ts.sblock_alloc_buffer((T.int64(16), T.int64(1), T.int64(256)), scope="local")
             for ax0_fused_0 in T.thread_binding(T.int64(16), thread="blockIdx.x"):
                 for ax0_fused_1 in T.thread_binding(T.int64(16), thread="threadIdx.x"):
                     for ax1_fused_1 in T.thread_binding(T.int64(16), thread="threadIdx.y"):
-                        with T.sblock("matmul_rf_init"):
-                            vax1_fused_1 = T.axis.spatial(T.int64(16), ax1_fused_1)
-                            v0 = T.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_1)
-                            T.reads()
-                            T.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                        with Ts.sblock("matmul_rf_init"):
+                            vax1_fused_1 = Ts.axis.spatial(T.int64(16), ax1_fused_1)
+                            v0 = Ts.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_1)
+                            Ts.reads()
+                            Ts.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
                             matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] = T.float32(0.0)
                         for ax1_fused_0, u in T.grid(T.int64(48), 1):
-                            with T.sblock("matmul_rf_update"):
-                                vax1_fused_1 = T.axis.spatial(T.int64(16), ax1_fused_1)
-                                v0 = T.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_1)
-                                vax1_fused_0 = T.axis.reduce(T.int64(48), ax1_fused_0)
-                                T.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0], layer_norm[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1], permute_dims1[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0])
-                                T.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                            with Ts.sblock("matmul_rf_update"):
+                                vax1_fused_1 = Ts.axis.spatial(T.int64(16), ax1_fused_1)
+                                v0 = Ts.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_1)
+                                vax1_fused_0 = Ts.axis.reduce(T.int64(48), ax1_fused_0)
+                                Ts.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0], layer_norm[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1], permute_dims1[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0])
+                                Ts.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
                                 matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] = matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] + layer_norm[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1] * permute_dims1[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0]
                 for ax1_fused in T.thread_binding(T.int64(16), thread="threadIdx.x"):
                     for ax0 in T.thread_binding(T.int64(16), thread="threadIdx.y"):
-                        with T.sblock("matmul"):
-                            vax1_fused_1 = T.axis.reduce(T.int64(16), ax0)
-                            v0 = T.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax1_fused)
-                            T.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
-                            T.writes(matmul_intermediate_local[T.int64(0), v0])
-                            with T.init():
+                        with Ts.sblock("matmul"):
+                            vax1_fused_1 = Ts.axis.reduce(T.int64(16), ax0)
+                            v0 = Ts.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax1_fused)
+                            Ts.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                            Ts.writes(matmul_intermediate_local[T.int64(0), v0])
+                            with Ts.init():
                                 matmul_intermediate_local[T.int64(0), v0] = T.float32(0.0)
                             matmul_intermediate_local[T.int64(0), v0] = matmul_intermediate_local[T.int64(0), v0] + matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0]
                 for ax0_fused_0_1 in T.thread_binding(T.int64(16), thread="threadIdx.x"):
                     for ax0_fused_1 in range(T.int64(1)):
-                        with T.sblock("T_add"):
-                            v0 = T.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_0_1 + ax0_fused_1)
-                            T.reads(matmul_intermediate_local[T.int64(0), v0], fc2_bias[v0])
-                            T.writes(T_add_intermediate[T.int64(0), v0])
+                        with Ts.sblock("T_add"):
+                            v0 = Ts.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_0_1 + ax0_fused_1)
+                            Ts.reads(matmul_intermediate_local[T.int64(0), v0], fc2_bias[v0])
+                            Ts.writes(T_add_intermediate[T.int64(0), v0])
                             T_add_intermediate[T.int64(0), v0] = matmul_intermediate_local[T.int64(0), v0] + fc2_bias[v0]
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def fused_matmul_add_relu(x: T.Buffer((T.int64(1), T.int64(768)), "float32"), permute_dims: T.Buffer((T.int64(768), T.int64(768)), "float32"), fc1_bias: T.Buffer((T.int64(768),), "float32"), compute_intermediate: T.Buffer((T.int64(1), T.int64(768)), "float32")):
             T.func_attr({"tirx.is_scheduled": True, "tirx.noalias": True})
-            # with T.sblock("root"):
-            matmul_intermediate_local = T.sblock_alloc_buffer((T.int64(1), T.int64(768)), scope="local")
-            matmul_intermediate_rf_local = T.sblock_alloc_buffer((T.int64(16), T.int64(1), T.int64(768)), scope="local")
+            # with Ts.sblock("root"):
+            matmul_intermediate_local = Ts.sblock_alloc_buffer((T.int64(1), T.int64(768)), scope="local")
+            matmul_intermediate_rf_local = Ts.sblock_alloc_buffer((T.int64(16), T.int64(1), T.int64(768)), scope="local")
             for ax0_fused_0 in T.thread_binding(T.int64(48), thread="blockIdx.x"):
                 for ax0_fused_1 in T.thread_binding(T.int64(16), thread="threadIdx.x"):
                     for ax1_fused_1 in T.thread_binding(T.int64(16), thread="threadIdx.y"):
-                        with T.sblock("matmul_rf_init"):
-                            vax1_fused_1 = T.axis.spatial(T.int64(16), ax1_fused_1)
-                            v0 = T.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_1)
-                            T.reads()
-                            T.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                        with Ts.sblock("matmul_rf_init"):
+                            vax1_fused_1 = Ts.axis.spatial(T.int64(16), ax1_fused_1)
+                            v0 = Ts.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_1)
+                            Ts.reads()
+                            Ts.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
                             matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] = T.float32(0.0)
                         for ax1_fused_0, u in T.grid(T.int64(48), 1):
-                            with T.sblock("matmul_rf_update"):
-                                vax1_fused_1 = T.axis.spatial(T.int64(16), ax1_fused_1)
-                                v0 = T.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_1)
-                                vax1_fused_0 = T.axis.reduce(T.int64(48), ax1_fused_0)
-                                T.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0], x[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1], permute_dims[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0])
-                                T.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                            with Ts.sblock("matmul_rf_update"):
+                                vax1_fused_1 = Ts.axis.spatial(T.int64(16), ax1_fused_1)
+                                v0 = Ts.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_1)
+                                vax1_fused_0 = Ts.axis.reduce(T.int64(48), ax1_fused_0)
+                                Ts.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0], x[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1], permute_dims[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0])
+                                Ts.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
                                 matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] = matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] + x[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1] * permute_dims[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0]
                 for ax1_fused in T.thread_binding(T.int64(16), thread="threadIdx.x"):
                     for ax0 in T.thread_binding(T.int64(16), thread="threadIdx.y"):
-                        with T.sblock("matmul"):
-                            vax1_fused_1 = T.axis.reduce(T.int64(16), ax0)
-                            v0 = T.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax1_fused)
-                            T.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
-                            T.writes(matmul_intermediate_local[T.int64(0), v0])
-                            with T.init():
+                        with Ts.sblock("matmul"):
+                            vax1_fused_1 = Ts.axis.reduce(T.int64(16), ax0)
+                            v0 = Ts.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax1_fused)
+                            Ts.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                            Ts.writes(matmul_intermediate_local[T.int64(0), v0])
+                            with Ts.init():
                                 matmul_intermediate_local[T.int64(0), v0] = T.float32(0.0)
                             matmul_intermediate_local[T.int64(0), v0] = matmul_intermediate_local[T.int64(0), v0] + matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0]
                 for ax0_fused_0_1 in T.thread_binding(T.int64(16), thread="threadIdx.x"):
                     for ax0_fused_1 in range(T.int64(1)):
-                        with T.sblock("compute"):
-                            v0 = T.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_0_1 + ax0_fused_1)
-                            T.reads(matmul_intermediate_local[T.int64(0), v0], fc1_bias[v0])
-                            T.writes(compute_intermediate[T.int64(0), v0])
+                        with Ts.sblock("compute"):
+                            v0 = Ts.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_0_1 + ax0_fused_1)
+                            Ts.reads(matmul_intermediate_local[T.int64(0), v0], fc1_bias[v0])
+                            Ts.writes(compute_intermediate[T.int64(0), v0])
                             compute_intermediate[T.int64(0), v0] = T.max(matmul_intermediate_local[T.int64(0), v0] + fc1_bias[v0], T.float32(0.0))
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def layer_norm(relu: T.Buffer((T.int64(1), T.int64(768)), "float32"), norm_weight: T.Buffer((T.int64(768),), "float32"), norm_bias: T.Buffer((T.int64(768),), "float32"), T_layer_norm: T.Buffer((T.int64(1), T.int64(768)), "float32")):
             T.func_attr({"op_pattern": 4, "tirx.is_scheduled": True, "tirx.noalias": True})
-            # with T.sblock("root"):
-            relu_sum_shared = T.sblock_alloc_buffer((T.int64(1),), scope="shared")
-            relu_var_sum_shared = T.sblock_alloc_buffer((T.int64(1),), scope="shared")
+            # with Ts.sblock("root"):
+            relu_sum_shared = Ts.sblock_alloc_buffer((T.int64(1),), scope="shared")
+            relu_var_sum_shared = Ts.sblock_alloc_buffer((T.int64(1),), scope="shared")
             for ax0_fused in T.thread_binding(T.int64(1), thread="blockIdx.x"):
                 for ax0 in range(T.int64(1)):
                     for ax1_fused_1 in T.thread_binding(T.int64(256), thread="threadIdx.x"):
                         for ax1_fused_0 in T.serial(T.int64(3), annotations={"pragma_auto_unroll_max_step": 256, "pragma_unroll_explicit": 1}):
-                            with T.sblock("relu_sum"):
-                                v0 = T.axis.spatial(T.int64(1), ax0)
-                                v1 = T.axis.reduce(T.int64(768), ax1_fused_0 * T.int64(256) + ax1_fused_1)
-                                T.reads(relu[T.int64(0), v1])
-                                T.writes(relu_sum_shared[T.int64(0)])
-                                with T.init():
+                            with Ts.sblock("relu_sum"):
+                                v0 = Ts.axis.spatial(T.int64(1), ax0)
+                                v1 = Ts.axis.reduce(T.int64(768), ax1_fused_0 * T.int64(256) + ax1_fused_1)
+                                Ts.reads(relu[T.int64(0), v1])
+                                Ts.writes(relu_sum_shared[T.int64(0)])
+                                with Ts.init():
                                     relu_sum_shared[T.int64(0)] = T.float32(0.0)
                                 relu_sum_shared[T.int64(0)] = relu_sum_shared[T.int64(0)] + relu[T.int64(0), v1]
                 for ax0 in range(T.int64(1)):
                     for ax1_fused_1 in T.thread_binding(T.int64(256), thread="threadIdx.x"):
                         for ax1_fused_0 in T.serial(T.int64(3), annotations={"pragma_auto_unroll_max_step": 256, "pragma_unroll_explicit": 1}):
-                            with T.sblock("relu_var_sum"):
-                                v0 = T.axis.spatial(T.int64(1), ax0)
-                                v1 = T.axis.reduce(T.int64(768), ax1_fused_0 * T.int64(256) + ax1_fused_1)
-                                T.reads(relu[T.int64(0), v1], relu_sum_shared[T.int64(0)])
-                                T.writes(relu_var_sum_shared[T.int64(0)])
-                                with T.init():
+                            with Ts.sblock("relu_var_sum"):
+                                v0 = Ts.axis.spatial(T.int64(1), ax0)
+                                v1 = Ts.axis.reduce(T.int64(768), ax1_fused_0 * T.int64(256) + ax1_fused_1)
+                                Ts.reads(relu[T.int64(0), v1], relu_sum_shared[T.int64(0)])
+                                Ts.writes(relu_var_sum_shared[T.int64(0)])
+                                with Ts.init():
                                     relu_var_sum_shared[T.int64(0)] = T.float32(0.0)
                                 relu_var_sum_shared[T.int64(0)] = relu_var_sum_shared[T.int64(0)] + (relu[T.int64(0), v1] - relu_sum_shared[T.int64(0)] / T.float32(768.0)) * (relu[T.int64(0), v1] - relu_sum_shared[T.int64(0)] / T.float32(768.0))
                 for ax1_1 in T.thread_binding(T.int64(256), thread="threadIdx.x"):
                     for ax1_0 in T.serial(T.int64(3), annotations={"pragma_auto_unroll_max_step": 256, "pragma_unroll_explicit": 1}):
-                        with T.sblock("T_layer_norm"):
-                            v0 = T.axis.spatial(T.int64(1), T.int64(0))
-                            v1 = T.axis.spatial(T.int64(768), ax1_0 * T.int64(256) + ax1_1)
-                            T.reads(relu[T.int64(0), v1], relu_sum_shared[T.int64(0)], relu_var_sum_shared[T.int64(0)], norm_weight[v1], norm_bias[v1])
-                            T.writes(T_layer_norm[T.int64(0), v1])
+                        with Ts.sblock("T_layer_norm"):
+                            v0 = Ts.axis.spatial(T.int64(1), T.int64(0))
+                            v1 = Ts.axis.spatial(T.int64(768), ax1_0 * T.int64(256) + ax1_1)
+                            Ts.reads(relu[T.int64(0), v1], relu_sum_shared[T.int64(0)], relu_var_sum_shared[T.int64(0)], norm_weight[v1], norm_bias[v1])
+                            Ts.writes(T_layer_norm[T.int64(0), v1])
                             T_layer_norm[T.int64(0), v1] = (relu[T.int64(0), v1] - relu_sum_shared[T.int64(0)] / T.float32(768.0)) * T.rsqrt(relu_var_sum_shared[T.int64(0)] / T.float32(768.0) + T.float32(1.0000000000000001e-05)) * norm_weight[v1] + norm_bias[v1]
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def transpose(fc1_weight: T.Buffer((T.int64(768), T.int64(768)), "float32"), T_transpose: T.Buffer((T.int64(768), T.int64(768)), "float32")):
             T.func_attr({"op_pattern": 2, "tirx.is_scheduled": True, "tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for ax0_ax1_fused_0 in T.thread_binding(T.int64(576), thread="blockIdx.x"):
                 for ax0_ax1_fused_1 in T.thread_binding(T.int64(1024), thread="threadIdx.x"):
-                    with T.sblock("T_transpose"):
-                        v0 = T.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) // T.int64(768))
-                        v1 = T.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) % T.int64(768))
-                        T.reads(fc1_weight[v1, v0])
-                        T.writes(T_transpose[v0, v1])
+                    with Ts.sblock("T_transpose"):
+                        v0 = Ts.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) // T.int64(768))
+                        v1 = Ts.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) % T.int64(768))
+                        Ts.reads(fc1_weight[v1, v0])
+                        Ts.writes(T_transpose[v0, v1])
                         T_transpose[v0, v1] = fc1_weight[v1, v0]
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def transpose1(fc2_weight: T.Buffer((T.int64(256), T.int64(768)), "float32"), T_transpose: T.Buffer((T.int64(768), T.int64(256)), "float32")):
             T.func_attr({"op_pattern": 2, "tirx.is_scheduled": True, "tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for ax0_ax1_fused_0 in T.thread_binding(T.int64(192), thread="blockIdx.x"):
                 for ax0_ax1_fused_1 in T.thread_binding(T.int64(1024), thread="threadIdx.x"):
-                    with T.sblock("T_transpose"):
-                        v0 = T.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) // T.int64(256))
-                        v1 = T.axis.spatial(T.int64(256), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) % T.int64(256))
-                        T.reads(fc2_weight[v1, v0])
-                        T.writes(T_transpose[v0, v1])
+                    with Ts.sblock("T_transpose"):
+                        v0 = Ts.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) // T.int64(256))
+                        v1 = Ts.axis.spatial(T.int64(256), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) % T.int64(256))
+                        Ts.reads(fc2_weight[v1, v0])
+                        Ts.writes(T_transpose[v0, v1])
                         T_transpose[v0, v1] = fc2_weight[v1, v0]
 
         @R.function
@@ -603,154 +604,155 @@ Insert the custom rule into the rule chain. Note that ``from_callable`` returns
     # from tvm.script import ir as I
     # from tvm.script import tirx as T
     # from tvm.tirx.layout import Axis
+    # from tvm.script import s_tir as Ts
     # from tvm.script import relax as R
 
     @I.ir_module
     class Module:
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def fused_matmul1_add1(layer_norm: T.Buffer((T.int64(1), T.int64(768)), "float32"), permute_dims1: T.Buffer((T.int64(768), T.int64(256)), "float32"), fc2_bias: T.Buffer((T.int64(256),), "float32"), T_add_intermediate: T.Buffer((T.int64(1), T.int64(256)), "float32")):
             T.func_attr({"tirx.is_scheduled": True, "tirx.noalias": True})
-            # with T.sblock("root"):
-            matmul_intermediate_local = T.sblock_alloc_buffer((T.int64(1), T.int64(256)), scope="local")
-            matmul_intermediate_rf_local = T.sblock_alloc_buffer((T.int64(16), T.int64(1), T.int64(256)), scope="local")
+            # with Ts.sblock("root"):
+            matmul_intermediate_local = Ts.sblock_alloc_buffer((T.int64(1), T.int64(256)), scope="local")
+            matmul_intermediate_rf_local = Ts.sblock_alloc_buffer((T.int64(16), T.int64(1), T.int64(256)), scope="local")
             for ax0_fused_0 in T.thread_binding(T.int64(16), thread="blockIdx.x"):
                 for ax0_fused_1 in T.thread_binding(T.int64(16), thread="threadIdx.x"):
                     for ax1_fused_1 in T.thread_binding(T.int64(16), thread="threadIdx.y"):
-                        with T.sblock("matmul_rf_init"):
-                            vax1_fused_1 = T.axis.spatial(T.int64(16), ax1_fused_1)
-                            v0 = T.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_1)
-                            T.reads()
-                            T.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                        with Ts.sblock("matmul_rf_init"):
+                            vax1_fused_1 = Ts.axis.spatial(T.int64(16), ax1_fused_1)
+                            v0 = Ts.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_1)
+                            Ts.reads()
+                            Ts.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
                             matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] = T.float32(0.0)
                         for ax1_fused_0, u in T.grid(T.int64(48), 1):
-                            with T.sblock("matmul_rf_update"):
-                                vax1_fused_1 = T.axis.spatial(T.int64(16), ax1_fused_1)
-                                v0 = T.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_1)
-                                vax1_fused_0 = T.axis.reduce(T.int64(48), ax1_fused_0)
-                                T.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0], layer_norm[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1], permute_dims1[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0])
-                                T.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                            with Ts.sblock("matmul_rf_update"):
+                                vax1_fused_1 = Ts.axis.spatial(T.int64(16), ax1_fused_1)
+                                v0 = Ts.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_1)
+                                vax1_fused_0 = Ts.axis.reduce(T.int64(48), ax1_fused_0)
+                                Ts.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0], layer_norm[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1], permute_dims1[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0])
+                                Ts.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
                                 matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] = matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] + layer_norm[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1] * permute_dims1[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0]
                 for ax1_fused in T.thread_binding(T.int64(16), thread="threadIdx.x"):
                     for ax0 in T.thread_binding(T.int64(16), thread="threadIdx.y"):
-                        with T.sblock("matmul"):
-                            vax1_fused_1 = T.axis.reduce(T.int64(16), ax0)
-                            v0 = T.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax1_fused)
-                            T.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
-                            T.writes(matmul_intermediate_local[T.int64(0), v0])
-                            with T.init():
+                        with Ts.sblock("matmul"):
+                            vax1_fused_1 = Ts.axis.reduce(T.int64(16), ax0)
+                            v0 = Ts.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax1_fused)
+                            Ts.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                            Ts.writes(matmul_intermediate_local[T.int64(0), v0])
+                            with Ts.init():
                                 matmul_intermediate_local[T.int64(0), v0] = T.float32(0.0)
                             matmul_intermediate_local[T.int64(0), v0] = matmul_intermediate_local[T.int64(0), v0] + matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0]
                 for ax0_fused_0_1 in T.thread_binding(T.int64(16), thread="threadIdx.x"):
                     for ax0_fused_1 in range(T.int64(1)):
-                        with T.sblock("T_add"):
-                            v0 = T.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_0_1 + ax0_fused_1)
-                            T.reads(matmul_intermediate_local[T.int64(0), v0], fc2_bias[v0])
-                            T.writes(T_add_intermediate[T.int64(0), v0])
+                        with Ts.sblock("T_add"):
+                            v0 = Ts.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_0_1 + ax0_fused_1)
+                            Ts.reads(matmul_intermediate_local[T.int64(0), v0], fc2_bias[v0])
+                            Ts.writes(T_add_intermediate[T.int64(0), v0])
                             T_add_intermediate[T.int64(0), v0] = matmul_intermediate_local[T.int64(0), v0] + fc2_bias[v0]
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def fused_matmul_add_relu(x: T.Buffer((T.int64(1), T.int64(768)), "float32"), permute_dims: T.Buffer((T.int64(768), T.int64(768)), "float32"), fc1_bias: T.Buffer((T.int64(768),), "float32"), compute_intermediate: T.Buffer((T.int64(1), T.int64(768)), "float32")):
             T.func_attr({"tirx.is_scheduled": True, "tirx.noalias": True})
-            # with T.sblock("root"):
-            matmul_intermediate_local = T.sblock_alloc_buffer((T.int64(1), T.int64(768)), scope="local")
-            matmul_intermediate_rf_local = T.sblock_alloc_buffer((T.int64(16), T.int64(1), T.int64(768)), scope="local")
+            # with Ts.sblock("root"):
+            matmul_intermediate_local = Ts.sblock_alloc_buffer((T.int64(1), T.int64(768)), scope="local")
+            matmul_intermediate_rf_local = Ts.sblock_alloc_buffer((T.int64(16), T.int64(1), T.int64(768)), scope="local")
             for ax0_fused_0 in T.thread_binding(T.int64(48), thread="blockIdx.x"):
                 for ax0_fused_1 in T.thread_binding(T.int64(16), thread="threadIdx.x"):
                     for ax1_fused_1 in T.thread_binding(T.int64(16), thread="threadIdx.y"):
-                        with T.sblock("matmul_rf_init"):
-                            vax1_fused_1 = T.axis.spatial(T.int64(16), ax1_fused_1)
-                            v0 = T.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_1)
-                            T.reads()
-                            T.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                        with Ts.sblock("matmul_rf_init"):
+                            vax1_fused_1 = Ts.axis.spatial(T.int64(16), ax1_fused_1)
+                            v0 = Ts.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_1)
+                            Ts.reads()
+                            Ts.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
                             matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] = T.float32(0.0)
                         for ax1_fused_0, u in T.grid(T.int64(48), 1):
-                            with T.sblock("matmul_rf_update"):
-                                vax1_fused_1 = T.axis.spatial(T.int64(16), ax1_fused_1)
-                                v0 = T.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_1)
-                                vax1_fused_0 = T.axis.reduce(T.int64(48), ax1_fused_0)
-                                T.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0], x[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1], permute_dims[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0])
-                                T.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                            with Ts.sblock("matmul_rf_update"):
+                                vax1_fused_1 = Ts.axis.spatial(T.int64(16), ax1_fused_1)
+                                v0 = Ts.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_1)
+                                vax1_fused_0 = Ts.axis.reduce(T.int64(48), ax1_fused_0)
+                                Ts.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0], x[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1], permute_dims[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0])
+                                Ts.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
                                 matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] = matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] + x[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1] * permute_dims[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0]
                 for ax1_fused in T.thread_binding(T.int64(16), thread="threadIdx.x"):
                     for ax0 in T.thread_binding(T.int64(16), thread="threadIdx.y"):
-                        with T.sblock("matmul"):
-                            vax1_fused_1 = T.axis.reduce(T.int64(16), ax0)
-                            v0 = T.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax1_fused)
-                            T.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
-                            T.writes(matmul_intermediate_local[T.int64(0), v0])
-                            with T.init():
+                        with Ts.sblock("matmul"):
+                            vax1_fused_1 = Ts.axis.reduce(T.int64(16), ax0)
+                            v0 = Ts.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax1_fused)
+                            Ts.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                            Ts.writes(matmul_intermediate_local[T.int64(0), v0])
+                            with Ts.init():
                                 matmul_intermediate_local[T.int64(0), v0] = T.float32(0.0)
                             matmul_intermediate_local[T.int64(0), v0] = matmul_intermediate_local[T.int64(0), v0] + matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0]
                 for ax0_fused_0_1 in T.thread_binding(T.int64(16), thread="threadIdx.x"):
                     for ax0_fused_1 in range(T.int64(1)):
-                        with T.sblock("compute"):
-                            v0 = T.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_0_1 + ax0_fused_1)
-                            T.reads(matmul_intermediate_local[T.int64(0), v0], fc1_bias[v0])
-                            T.writes(compute_intermediate[T.int64(0), v0])
+                        with Ts.sblock("compute"):
+                            v0 = Ts.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_0_1 + ax0_fused_1)
+                            Ts.reads(matmul_intermediate_local[T.int64(0), v0], fc1_bias[v0])
+                            Ts.writes(compute_intermediate[T.int64(0), v0])
                             compute_intermediate[T.int64(0), v0] = T.max(matmul_intermediate_local[T.int64(0), v0] + fc1_bias[v0], T.float32(0.0))
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def layer_norm(relu: T.Buffer((T.int64(1), T.int64(768)), "float32"), norm_weight: T.Buffer((T.int64(768),), "float32"), norm_bias: T.Buffer((T.int64(768),), "float32"), T_layer_norm: T.Buffer((T.int64(1), T.int64(768)), "float32")):
             T.func_attr({"op_pattern": 4, "tirx.is_scheduled": True, "tirx.noalias": True})
-            # with T.sblock("root"):
-            relu_sum_shared = T.sblock_alloc_buffer((T.int64(1),), scope="shared")
-            relu_var_sum_shared = T.sblock_alloc_buffer((T.int64(1),), scope="shared")
+            # with Ts.sblock("root"):
+            relu_sum_shared = Ts.sblock_alloc_buffer((T.int64(1),), scope="shared")
+            relu_var_sum_shared = Ts.sblock_alloc_buffer((T.int64(1),), scope="shared")
             for ax0_fused in T.thread_binding(T.int64(1), thread="blockIdx.x"):
                 for ax0 in range(T.int64(1)):
                     for ax1_fused_1 in T.thread_binding(T.int64(256), thread="threadIdx.x"):
                         for ax1_fused_0 in T.serial(T.int64(3), annotations={"pragma_auto_unroll_max_step": 256, "pragma_unroll_explicit": 1}):
-                            with T.sblock("relu_sum"):
-                                v0 = T.axis.spatial(T.int64(1), ax0)
-                                v1 = T.axis.reduce(T.int64(768), ax1_fused_0 * T.int64(256) + ax1_fused_1)
-                                T.reads(relu[T.int64(0), v1])
-                                T.writes(relu_sum_shared[T.int64(0)])
-                                with T.init():
+                            with Ts.sblock("relu_sum"):
+                                v0 = Ts.axis.spatial(T.int64(1), ax0)
+                                v1 = Ts.axis.reduce(T.int64(768), ax1_fused_0 * T.int64(256) + ax1_fused_1)
+                                Ts.reads(relu[T.int64(0), v1])
+                                Ts.writes(relu_sum_shared[T.int64(0)])
+                                with Ts.init():
                                     relu_sum_shared[T.int64(0)] = T.float32(0.0)
                                 relu_sum_shared[T.int64(0)] = relu_sum_shared[T.int64(0)] + relu[T.int64(0), v1]
                 for ax0 in range(T.int64(1)):
                     for ax1_fused_1 in T.thread_binding(T.int64(256), thread="threadIdx.x"):
                         for ax1_fused_0 in T.serial(T.int64(3), annotations={"pragma_auto_unroll_max_step": 256, "pragma_unroll_explicit": 1}):
-                            with T.sblock("relu_var_sum"):
-                                v0 = T.axis.spatial(T.int64(1), ax0)
-                                v1 = T.axis.reduce(T.int64(768), ax1_fused_0 * T.int64(256) + ax1_fused_1)
-                                T.reads(relu[T.int64(0), v1], relu_sum_shared[T.int64(0)])
-                                T.writes(relu_var_sum_shared[T.int64(0)])
-                                with T.init():
+                            with Ts.sblock("relu_var_sum"):
+                                v0 = Ts.axis.spatial(T.int64(1), ax0)
+                                v1 = Ts.axis.reduce(T.int64(768), ax1_fused_0 * T.int64(256) + ax1_fused_1)
+                                Ts.reads(relu[T.int64(0), v1], relu_sum_shared[T.int64(0)])
+                                Ts.writes(relu_var_sum_shared[T.int64(0)])
+                                with Ts.init():
                                     relu_var_sum_shared[T.int64(0)] = T.float32(0.0)
                                 relu_var_sum_shared[T.int64(0)] = relu_var_sum_shared[T.int64(0)] + (relu[T.int64(0), v1] - relu_sum_shared[T.int64(0)] / T.float32(768.0)) * (relu[T.int64(0), v1] - relu_sum_shared[T.int64(0)] / T.float32(768.0))
                 for ax1_1 in T.thread_binding(T.int64(256), thread="threadIdx.x"):
                     for ax1_0 in T.serial(T.int64(3), annotations={"pragma_auto_unroll_max_step": 256, "pragma_unroll_explicit": 1}):
-                        with T.sblock("T_layer_norm"):
-                            v0 = T.axis.spatial(T.int64(1), T.int64(0))
-                            v1 = T.axis.spatial(T.int64(768), ax1_0 * T.int64(256) + ax1_1)
-                            T.reads(relu[T.int64(0), v1], relu_sum_shared[T.int64(0)], relu_var_sum_shared[T.int64(0)], norm_weight[v1], norm_bias[v1])
-                            T.writes(T_layer_norm[T.int64(0), v1])
+                        with Ts.sblock("T_layer_norm"):
+                            v0 = Ts.axis.spatial(T.int64(1), T.int64(0))
+                            v1 = Ts.axis.spatial(T.int64(768), ax1_0 * T.int64(256) + ax1_1)
+                            Ts.reads(relu[T.int64(0), v1], relu_sum_shared[T.int64(0)], relu_var_sum_shared[T.int64(0)], norm_weight[v1], norm_bias[v1])
+                            Ts.writes(T_layer_norm[T.int64(0), v1])
                             T_layer_norm[T.int64(0), v1] = (relu[T.int64(0), v1] - relu_sum_shared[T.int64(0)] / T.float32(768.0)) * T.rsqrt(relu_var_sum_shared[T.int64(0)] / T.float32(768.0) + T.float32(1.0000000000000001e-05)) * norm_weight[v1] + norm_bias[v1]
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def transpose(fc1_weight: T.Buffer((T.int64(768), T.int64(768)), "float32"), T_transpose: T.Buffer((T.int64(768), T.int64(768)), "float32")):
             T.func_attr({"op_pattern": 2, "tirx.is_scheduled": True, "tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for ax0_ax1_fused_0 in T.thread_binding(T.int64(576), thread="blockIdx.x"):
                 for ax0_ax1_fused_1 in T.thread_binding(T.int64(1024), thread="threadIdx.x"):
-                    with T.sblock("T_transpose"):
-                        v0 = T.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) // T.int64(768))
-                        v1 = T.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) % T.int64(768))
-                        T.reads(fc1_weight[v1, v0])
-                        T.writes(T_transpose[v0, v1])
+                    with Ts.sblock("T_transpose"):
+                        v0 = Ts.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) // T.int64(768))
+                        v1 = Ts.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) % T.int64(768))
+                        Ts.reads(fc1_weight[v1, v0])
+                        Ts.writes(T_transpose[v0, v1])
                         T_transpose[v0, v1] = fc1_weight[v1, v0]
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def transpose1(fc2_weight: T.Buffer((T.int64(256), T.int64(768)), "float32"), T_transpose: T.Buffer((T.int64(768), T.int64(256)), "float32")):
             T.func_attr({"op_pattern": 2, "tirx.is_scheduled": True, "tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for ax0_ax1_fused_0 in T.thread_binding(T.int64(192), thread="blockIdx.x"):
                 for ax0_ax1_fused_1 in T.thread_binding(T.int64(1024), thread="threadIdx.x"):
-                    with T.sblock("T_transpose"):
-                        v0 = T.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) // T.int64(256))
-                        v1 = T.axis.spatial(T.int64(256), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) % T.int64(256))
-                        T.reads(fc2_weight[v1, v0])
-                        T.writes(T_transpose[v0, v1])
+                    with Ts.sblock("T_transpose"):
+                        v0 = Ts.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) // T.int64(256))
+                        v1 = Ts.axis.spatial(T.int64(256), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) % T.int64(256))
+                        Ts.reads(fc2_weight[v1, v0])
+                        Ts.writes(T_transpose[v0, v1])
                         T_transpose[v0, v1] = fc2_weight[v1, v0]
 
         @R.function
diff --git a/docs/_sources/deep_dive/tensor_ir/tutorials/sg_execution_times.rst b/docs/_sources/deep_dive/tensor_ir/tutorials/sg_execution_times.rst
index f22250b920c..a631b9844a5 100644
--- a/docs/_sources/deep_dive/tensor_ir/tutorials/sg_execution_times.rst
+++ b/docs/_sources/deep_dive/tensor_ir/tutorials/sg_execution_times.rst
@@ -6,7 +6,7 @@
 
 Computation times
 =================
-**00:00.524** total execution time for 4 files **from deep_dive/tensor_ir/tutorials**:
+**00:00.520** total execution time for 4 files **from deep_dive/tensor_ir/tutorials**:
 
 .. container::
 
@@ -33,13 +33,13 @@ Computation times
      - Time
      - Mem (MB)
    * - :ref:`sphx_glr_deep_dive_tensor_ir_tutorials_tir_transformation.py` (``tir_transformation.py``)
-     - 00:00.262
+     - 00:00.259
      - 0.0
    * - :ref:`sphx_glr_deep_dive_tensor_ir_tutorials_tir_creation.py` (``tir_creation.py``)
-     - 00:00.130
+     - 00:00.128
      - 0.0
    * - :ref:`sphx_glr_deep_dive_tensor_ir_tutorials_dlight_gpu_scheduling.py` (``dlight_gpu_scheduling.py``)
-     - 00:00.124
+     - 00:00.125
      - 0.0
    * - :ref:`sphx_glr_deep_dive_tensor_ir_tutorials_meta_schedule.py` (``meta_schedule.py``)
      - 00:00.008
diff --git a/docs/_sources/deep_dive/tensor_ir/tutorials/tir_creation.rst b/docs/_sources/deep_dive/tensor_ir/tutorials/tir_creation.rst
index ba07aaa1938..be29164c44f 100644
--- a/docs/_sources/deep_dive/tensor_ir/tutorials/tir_creation.rst
+++ b/docs/_sources/deep_dive/tensor_ir/tutorials/tir_creation.rst
@@ -50,7 +50,7 @@ Standard Format
 Let's take an example of ``mm_relu`` from :ref:`tirx-learning`. Here is the complete
 format of the ir_module and in TVMScript:
 
-.. GENERATED FROM PYTHON SOURCE LINES 54-94
+.. GENERATED FROM PYTHON SOURCE LINES 54-95
 
 .. code-block:: Python
 
@@ -60,12 +60,13 @@ format of the ir_module and in TVMScript:
 
     import tvm
     from tvm.script import ir as I
+    from tvm.script import s_tir as Ts
     from tvm.script import tirx as T
 
 
     @I.ir_module
     class MyModule:
-        @T.prim_func(s_tir=True)
+        @Ts.prim_func
         def mm_relu(
             A: T.Buffer((128, 128), "float32"),
             B: T.Buffer((128, 128), "float32"),
@@ -75,22 +76,22 @@ format of the ir_module and in TVMScript:
             for i in range(128):
                 for j in range(128):
                     for k in range(128):
-                        with T.sblock("Y"):
-                            vi = T.axis.spatial(128, i)
-                            vj = T.axis.spatial(128, j)
-                            vk = T.axis.reduce(128, k)
-                            T.reads(A[vi, vk], B[vk, vj])
-                            T.writes(Y[vi, vj])
-                            with T.init():
+                        with Ts.sblock("Y"):
+                            vi = Ts.axis.spatial(128, i)
+                            vj = Ts.axis.spatial(128, j)
+                            vk = Ts.axis.reduce(128, k)
+                            Ts.reads(A[vi, vk], B[vk, vj])
+                            Ts.writes(Y[vi, vj])
+                            with Ts.init():
                                 Y[vi, vj] = T.float32(0)
                             Y[vi, vj] = Y[vi, vj] + A[vi, vk] * B[vk, vj]
             for i in range(128):
                 for j in range(128):
-                    with T.sblock("C"):
-                        vi = T.axis.spatial(128, i)
-                        vj = T.axis.spatial(128, j)
-                        T.reads(Y[vi, vj])
-                        T.writes(C[vi, vj])
+                    with Ts.sblock("C"):
+                        vi = Ts.axis.spatial(128, i)
+                        vj = Ts.axis.spatial(128, j)
+                        Ts.reads(Y[vi, vj])
+                        Ts.writes(C[vi, vj])
                         C[vi, vj] = T.max(Y[vi, vj], T.float32(0))
 
 
@@ -101,7 +102,7 @@ format of the ir_module and in TVMScript:
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 95-104
+.. GENERATED FROM PYTHON SOURCE LINES 96-105
 
 Concise with Syntactic Sugar
 ****************************
@@ -109,11 +110,11 @@ For ease of writing, we can employ the following syntactic sugar to
 streamline the code:
 
 - Utilize ``T.grid`` to condense nested loops;
-- Employ ``T.axis.remap`` to abbreviate block iterator annotations;
-- Exclude ``T.reads`` and ``T.writes`` for blocks whose content can
+- Employ ``Ts.axis.remap`` to abbreviate block iterator annotations;
+- Exclude ``Ts.reads`` and ``Ts.writes`` for blocks whose content can
   be inferred from the block body;
 
-.. GENERATED FROM PYTHON SOURCE LINES 104-127
+.. GENERATED FROM PYTHON SOURCE LINES 105-128
 
 .. code-block:: Python
 
@@ -121,7 +122,7 @@ streamline the code:
 
     @I.ir_module
     class ConciseModule:
-        @T.prim_func(s_tir=True)
+        @Ts.prim_func
         def mm_relu(
             A: T.Buffer((128, 128), "float32"),
             B: T.Buffer((128, 128), "float32"),
@@ -129,14 +130,14 @@ streamline the code:
         ):
             Y = T.alloc_buffer((128, 128), dtype="float32")
             for i, j, k in T.grid(128, 128, 128):
-                with T.sblock("Y"):
-                    vi, vj, vk = T.axis.remap("SSR", [i, j, k])
-                    with T.init():
+                with Ts.sblock("Y"):
+                    vi, vj, vk = Ts.axis.remap("SSR", [i, j, k])
+                    with Ts.init():
                         Y[vi, vj] = T.float32(0)
                     Y[vi, vj] = Y[vi, vj] + A[vi, vk] * B[vk, vj]
             for i, j in T.grid(128, 128):
-                with T.sblock("C"):
-                    vi, vj = T.axis.remap("SS", [i, j])
+                with Ts.sblock("C"):
+                    vi, vj = Ts.axis.remap("SS", [i, j])
                     C[vi, vj] = T.max(Y[vi, vj], T.float32(0))
 
 
@@ -147,11 +148,11 @@ streamline the code:
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 128-129
+.. GENERATED FROM PYTHON SOURCE LINES 129-130
 
 We can use the following code to verify that the two modules are equivalent:
 
-.. GENERATED FROM PYTHON SOURCE LINES 129-132
+.. GENERATED FROM PYTHON SOURCE LINES 130-133
 
 .. code-block:: Python
 
@@ -171,7 +172,7 @@ We can use the following code to verify that the two modules are equivalent:
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 133-138
+.. GENERATED FROM PYTHON SOURCE LINES 134-139
 
 Interactive with Python Variables
 *********************************
@@ -179,7 +180,7 @@ Despite TVMScript not being executed by a Python interpreter, limited
 interaction with Python is feasible. For instance, Python variables can
 be used to ascertain the shape and data type of a TensorIR.
 
-.. GENERATED FROM PYTHON SOURCE LINES 138-166
+.. GENERATED FROM PYTHON SOURCE LINES 139-167
 
 .. code-block:: Python
 
@@ -192,7 +193,7 @@ be used to ascertain the shape and data type of a TensorIR.
     # IRModule in TVMScript
     @I.ir_module
     class ConciseModuleFromPython:
-        @T.prim_func(s_tir=True)
+        @Ts.prim_func
         def mm_relu(
             A: T.Buffer((M, K), dtype),
             B: T.Buffer((K, N), dtype),
@@ -200,14 +201,14 @@ be used to ascertain the shape and data type of a TensorIR.
         ):
             Y = T.alloc_buffer((M, N), dtype)
             for i, j, k in T.grid(M, N, K):
-                with T.sblock("Y"):
-                    vi, vj, vk = T.axis.remap("SSR", [i, j, k])
-                    with T.init():
+                with Ts.sblock("Y"):
+                    vi, vj, vk = Ts.axis.remap("SSR", [i, j, k])
+                    with Ts.init():
                         Y[vi, vj] = T.cast(T.float32(0), dtype)
                     Y[vi, vj] = Y[vi, vj] + A[vi, vk] * B[vk, vj]
             for i, j in T.grid(M, N):
-                with T.sblock("C"):
-                    vi, vj = T.axis.remap("SS", [i, j])
+                with Ts.sblock("C"):
+                    vi, vj = Ts.axis.remap("SS", [i, j])
                     C[vi, vj] = T.max(Y[vi, vj], T.cast(T.float32(0), dtype))
 
 
@@ -218,11 +219,11 @@ be used to ascertain the shape and data type of a TensorIR.
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 167-168
+.. GENERATED FROM PYTHON SOURCE LINES 168-169
 
 Check the equivalence:
 
-.. GENERATED FROM PYTHON SOURCE LINES 168-172
+.. GENERATED FROM PYTHON SOURCE LINES 169-173
 
 .. code-block:: Python
 
@@ -243,7 +244,7 @@ Check the equivalence:
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 173-178
+.. GENERATED FROM PYTHON SOURCE LINES 174-179
 
 TensorIR Function with Dynamic Shapes
 *************************************
@@ -251,7 +252,7 @@ Despite TVMScript not being executed by a Python interpreter, limited
 interaction with Python is feasible. For instance, Python variables can
 be used to ascertain the shape and data type of a TensorIR.
 
-.. GENERATED FROM PYTHON SOURCE LINES 178-206
+.. GENERATED FROM PYTHON SOURCE LINES 179-207
 
 .. code-block:: Python
 
@@ -259,7 +260,7 @@ be used to ascertain the shape and data type of a TensorIR.
 
     @I.ir_module
     class DynamicShapeModule:
-        @T.prim_func(s_tir=True)
+        @Ts.prim_func
         def mm_relu(a: T.handle, b: T.handle, c: T.handle):
             # Dynamic shape definition
             M = T.int32()
@@ -272,14 +273,14 @@ be used to ascertain the shape and data type of a TensorIR.
             C = T.match_buffer(c, [M, N], dtype)
             Y = T.alloc_buffer((M, N), dtype)
             for i, j, k in T.grid(M, N, K):
-                with T.sblock("Y"):
-                    vi, vj, vk = T.axis.remap("SSR", [i, j, k])
-                    with T.init():
+                with Ts.sblock("Y"):
+                    vi, vj, vk = Ts.axis.remap("SSR", [i, j, k])
+                    with Ts.init():
                         Y[vi, vj] = T.cast(T.float32(0), dtype)
                     Y[vi, vj] = Y[vi, vj] + A[vi, vk] * B[vk, vj]
             for i, j in T.grid(M, N):
-                with T.sblock("C"):
-                    vi, vj = T.axis.remap("SS", [i, j])
+                with Ts.sblock("C"):
+                    vi, vj = Ts.axis.remap("SS", [i, j])
                     C[vi, vj] = T.max(Y[vi, vj], T.cast(T.float32(0), dtype))
 
 
@@ -290,11 +291,11 @@ be used to ascertain the shape and data type of a TensorIR.
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 207-208
+.. GENERATED FROM PYTHON SOURCE LINES 208-209
 
 Now let's check the runtime dynamic shape inference:
 
-.. GENERATED FROM PYTHON SOURCE LINES 208-224
+.. GENERATED FROM PYTHON SOURCE LINES 209-225
 
 .. code-block:: Python
 
@@ -337,7 +338,7 @@ Now let's check the runtime dynamic shape inference:
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 225-245
+.. GENERATED FROM PYTHON SOURCE LINES 226-246
 
 Create TensorIR using Tensor Expression
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -360,7 +361,7 @@ Create Static-Shape Functions
 We use the same example of ``mm_relu`` from the last subsection to demonstrate the
 TE creation method.
 
-.. GENERATED FROM PYTHON SOURCE LINES 245-254
+.. GENERATED FROM PYTHON SOURCE LINES 246-255
 
 .. code-block:: Python
 
@@ -380,7 +381,7 @@ TE creation method.
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 255-268
+.. GENERATED FROM PYTHON SOURCE LINES 256-269
 
 Here ``te.compute`` takes the signature ``te.compute(output_shape, fcompute)``.
 And the fcompute function describes how we want to compute the value of each
@@ -396,7 +397,7 @@ we can formulate a TensorIR function by incorporating the pertinent parameters o
 In this specific instance, we aim to construct a function with two input parameters **A, B**
 and one output parameter **C**.
 
-.. GENERATED FROM PYTHON SOURCE LINES 268-273
+.. GENERATED FROM PYTHON SOURCE LINES 269-274
 
 .. code-block:: Python
 
@@ -416,41 +417,42 @@ and one output parameter **C**.
     # from tvm.script import ir as I
     # from tvm.script import tirx as T
     # from tvm.tirx.layout import Axis
+    # from tvm.script import s_tir as Ts
 
     @I.ir_module
     class Module:
-        @T.prim_func(s_tir=True)
+        @Ts.prim_func
         def mm_relu(A: T.Buffer((128, 128), "float32"), B: T.Buffer((128, 128), "float32"), C: T.Buffer((128, 128), "float32")):
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
-            Y = T.sblock_alloc_buffer((128, 128))
+            # with Ts.sblock("root"):
+            Y = Ts.sblock_alloc_buffer((128, 128))
             for i, j, k in T.grid(128, 128, 128):
-                with T.sblock("Y"):
-                    v_i, v_j, v_k = T.axis.remap("SSR", [i, j, k])
-                    T.reads(A[v_i, v_k], B[v_k, v_j])
-                    T.writes(Y[v_i, v_j])
-                    with T.init():
+                with Ts.sblock("Y"):
+                    v_i, v_j, v_k = Ts.axis.remap("SSR", [i, j, k])
+                    Ts.reads(A[v_i, v_k], B[v_k, v_j])
+                    Ts.writes(Y[v_i, v_j])
+                    with Ts.init():
                         Y[v_i, v_j] = T.float32(0.0)
                     Y[v_i, v_j] = Y[v_i, v_j] + A[v_i, v_k] * B[v_k, v_j]
             for i, j in T.grid(128, 128):
-                with T.sblock("C"):
-                    v_i, v_j = T.axis.remap("SS", [i, j])
-                    T.reads(Y[v_i, v_j])
-                    T.writes(C[v_i, v_j])
+                with Ts.sblock("C"):
+                    v_i, v_j = Ts.axis.remap("SS", [i, j])
+                    Ts.reads(Y[v_i, v_j])
+                    Ts.writes(C[v_i, v_j])
                     C[v_i, v_j] = T.max(Y[v_i, v_j], T.float32(0.0))
 
 
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 274-278
+.. GENERATED FROM PYTHON SOURCE LINES 275-279
 
 Create Dynamic-Shape Functions
 ******************************
 We can also create a dynamic-shape function using Tensor Expression. The only difference
 is that we need to specify the shape of the input tensors as symbolic variables.
 
-.. GENERATED FROM PYTHON SOURCE LINES 278-290
+.. GENERATED FROM PYTHON SOURCE LINES 279-291
 
 .. code-block:: Python
 
@@ -477,29 +479,30 @@ is that we need to specify the shape of the input tensors as symbolic variables.
     # from tvm.script import ir as I
     # from tvm.script import tirx as T
     # from tvm.tirx.layout import Axis
+    # from tvm.script import s_tir as Ts
 
     @I.ir_module
     class Module:
-        @T.prim_func(s_tir=True)
+        @Ts.prim_func
         def mm_relu(A: T.Buffer(("m", "n"), "float32"), B: T.Buffer(("k", "n"), "float32"), C: T.Buffer(("m", "n"), "float32")):
             m, n = T.int32(), T.int32()
             k = T.int32()
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
-            Y = T.sblock_alloc_buffer((m, n))
+            # with Ts.sblock("root"):
+            Y = Ts.sblock_alloc_buffer((m, n))
             for i, j, k_1 in T.grid(m, n, k):
-                with T.sblock("Y"):
-                    v_i, v_j, v_k = T.axis.remap("SSR", [i, j, k_1])
-                    T.reads(A[v_i, v_k], B[v_k, v_j])
-                    T.writes(Y[v_i, v_j])
-                    with T.init():
+                with Ts.sblock("Y"):
+                    v_i, v_j, v_k = Ts.axis.remap("SSR", [i, j, k_1])
+                    Ts.reads(A[v_i, v_k], B[v_k, v_j])
+                    Ts.writes(Y[v_i, v_j])
+                    with Ts.init():
                         Y[v_i, v_j] = T.float32(0.0)
                     Y[v_i, v_j] = Y[v_i, v_j] + A[v_i, v_k] * B[v_k, v_j]
             for i, j in T.grid(m, n):
-                with T.sblock("C"):
-                    v_i, v_j = T.axis.remap("SS", [i, j])
-                    T.reads(Y[v_i, v_j])
-                    T.writes(C[v_i, v_j])
+                with Ts.sblock("C"):
+                    v_i, v_j = Ts.axis.remap("SS", [i, j])
+                    Ts.reads(Y[v_i, v_j])
+                    Ts.writes(C[v_i, v_j])
                     C[v_i, v_j] = T.max(Y[v_i, v_j], T.float32(0.0))
 
 
diff --git a/docs/_sources/deep_dive/tensor_ir/tutorials/tir_transformation.rst b/docs/_sources/deep_dive/tensor_ir/tutorials/tir_transformation.rst
index 8b055a0539b..ef3385d775a 100644
--- a/docs/_sources/deep_dive/tensor_ir/tutorials/tir_transformation.rst
+++ b/docs/_sources/deep_dive/tensor_ir/tutorials/tir_transformation.rst
@@ -35,38 +35,39 @@ the same functionality, and each implementation can result in different performa
 
 First, let's take a look at the implementation of ``mm_relu`` in the previous section:
 
-.. GENERATED FROM PYTHON SOURCE LINES 38-69
+.. GENERATED FROM PYTHON SOURCE LINES 38-70
 
 .. code-block:: Python
 
 
     import tvm
     from tvm.script import ir as I
+    from tvm.script import s_tir as Ts
     from tvm.script import tirx as T
 
 
     @I.ir_module
     class MyModule:
-        @T.prim_func(s_tir=True)
+        @Ts.prim_func
         def main(
             A: T.Buffer((128, 128), "float32"),
             B: T.Buffer((128, 128), "float32"),
             C: T.Buffer((128, 128), "float32"),
         ):
             T.func_attr({"tirx.noalias": True})
-            with T.sblock("root"):
-                T.reads()
-                T.writes()
-                Y = T.sblock_alloc_buffer((128, 128))
+            with Ts.sblock("root"):
+                Ts.reads()
+                Ts.writes()
+                Y = Ts.sblock_alloc_buffer((128, 128))
                 for i, j, k in T.grid(128, 128, 128):
-                    with T.sblock("Y"):
-                        vi, vj, vk = T.axis.remap("SSR", [i, j, k])
-                        with T.init():
+                    with Ts.sblock("Y"):
+                        vi, vj, vk = Ts.axis.remap("SSR", [i, j, k])
+                        with Ts.init():
                             Y[vi, vj] = T.float32(0)
                         Y[vi, vj] = Y[vi, vj] + A[vi, vk] * B[vk, vj]
                 for i, j in T.grid(128, 128):
-                    with T.sblock("C"):
-                        vi, vj = T.axis.remap("SS", [i, j])
+                    with Ts.sblock("C"):
+                        vi, vj = Ts.axis.remap("SS", [i, j])
                         C[vi, vj] = T.max(Y[vi, vj], T.float32(0))
 
 
@@ -77,12 +78,12 @@ First, let's take a look at the implementation of ``mm_relu`` in the previous se
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 70-72
+.. GENERATED FROM PYTHON SOURCE LINES 71-73
 
 Before we transform the function, let's first evaluate the performance of the
 original implementation.
 
-.. GENERATED FROM PYTHON SOURCE LINES 72-96
+.. GENERATED FROM PYTHON SOURCE LINES 73-97
 
 .. code-block:: Python
 
@@ -120,19 +121,19 @@ original implementation.
 
     Execution time summary:
      mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)  
-       2.5953       2.5953       2.5953       2.5953       0.0000                  
+       2.5850       2.5850       2.5850       2.5850       0.0000                  
 
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 97-101
+.. GENERATED FROM PYTHON SOURCE LINES 98-102
 
 Initialization Schedule
 ***********************
 We initiate the process of code transformation by establishing a Schedule helper class,
 utilizing the provided **MyModule** as input.
 
-.. GENERATED FROM PYTHON SOURCE LINES 101-104
+.. GENERATED FROM PYTHON SOURCE LINES 102-105
 
 .. code-block:: Python
 
@@ -146,14 +147,14 @@ utilizing the provided **MyModule** as input.
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 105-109
+.. GENERATED FROM PYTHON SOURCE LINES 106-110
 
 Loop Tiling
 ***********
 Subsequently, we execute the requisite operations to acquire a reference to
 block **Y** and its associated loops.
 
-.. GENERATED FROM PYTHON SOURCE LINES 109-113
+.. GENERATED FROM PYTHON SOURCE LINES 110-114
 
 .. code-block:: Python
 
@@ -168,7 +169,7 @@ block **Y** and its associated loops.
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 114-119
+.. GENERATED FROM PYTHON SOURCE LINES 115-120
 
 We now proceed to execute the transformations. The initial modification involves
 splitting loop ``j`` into two separate loops, with the inner loop possessing a
@@ -176,7 +177,7 @@ length of 8. It is crucial to understand that the transformation process is proc
 thus, inadvertent execution of the block twice will yield an error stating the
 non-existence of variable ``j``.
 
-.. GENERATED FROM PYTHON SOURCE LINES 119-122
+.. GENERATED FROM PYTHON SOURCE LINES 120-123
 
 .. code-block:: Python
 
@@ -190,11 +191,11 @@ non-existence of variable ``j``.
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 123-124
+.. GENERATED FROM PYTHON SOURCE LINES 124-125
 
 The outcome of the transformation can be examined, as it is retained within ``sch.mod``.
 
-.. GENERATED FROM PYTHON SOURCE LINES 124-127
+.. GENERATED FROM PYTHON SOURCE LINES 125-128
 
 .. code-block:: Python
 
@@ -212,42 +213,43 @@ The outcome of the transformation can be examined, as it is retained within ``sc
     # from tvm.script import ir as I
     # from tvm.script import tirx as T
     # from tvm.tirx.layout import Axis
+    # from tvm.script import s_tir as Ts
 
     @I.ir_module
     class Module:
-        @T.prim_func(s_tir=True)
+        @Ts.prim_func
         def main(A: T.Buffer((128, 128), "float32"), B: T.Buffer((128, 128), "float32"), C: T.Buffer((128, 128), "float32")):
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
-            buffer = T.sblock_alloc_buffer((128, 128))
+            # with Ts.sblock("root"):
+            buffer = Ts.sblock_alloc_buffer((128, 128))
             for i, j_0, j_1, k in T.grid(128, 16, 8, 128):
-                with T.sblock("Y"):
-                    v = T.axis.spatial(128, i)
-                    v_1 = T.axis.spatial(128, j_0 * 8 + j_1)
-                    v_2 = T.axis.reduce(128, k)
-                    T.reads(A[v, v_2], B[v_2, v_1])
-                    T.writes(buffer[v, v_1])
-                    with T.init():
+                with Ts.sblock("Y"):
+                    v = Ts.axis.spatial(128, i)
+                    v_1 = Ts.axis.spatial(128, j_0 * 8 + j_1)
+                    v_2 = Ts.axis.reduce(128, k)
+                    Ts.reads(A[v, v_2], B[v_2, v_1])
+                    Ts.writes(buffer[v, v_1])
+                    with Ts.init():
                         buffer[v, v_1] = T.float32(0.0)
                     buffer[v, v_1] = buffer[v, v_1] + A[v, v_2] * B[v_2, v_1]
             for i, j in T.grid(128, 128):
-                with T.sblock("C"):
-                    v, v_1 = T.axis.remap("SS", [i, j])
-                    T.reads(buffer[v, v_1])
-                    T.writes(C[v, v_1])
+                with Ts.sblock("C"):
+                    v, v_1 = Ts.axis.remap("SS", [i, j])
+                    Ts.reads(buffer[v, v_1])
+                    Ts.writes(C[v, v_1])
                     C[v, v_1] = T.max(buffer[v, v_1], T.float32(0.0))
 
 
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 128-131
+.. GENERATED FROM PYTHON SOURCE LINES 129-132
 
 Following the initial transformation phase, two supplementary loops, ``j_0`` and ``j_1``,
 have been generated with respective ranges of 16 and 8. The subsequent
 action involves reordering these two loops.
 
-.. GENERATED FROM PYTHON SOURCE LINES 131-136
+.. GENERATED FROM PYTHON SOURCE LINES 132-137
 
 .. code-block:: Python
 
@@ -267,39 +269,40 @@ action involves reordering these two loops.
     # from tvm.script import ir as I
     # from tvm.script import tirx as T
     # from tvm.tirx.layout import Axis
+    # from tvm.script import s_tir as Ts
 
     @I.ir_module
     class Module:
-        @T.prim_func(s_tir=True)
+        @Ts.prim_func
         def main(A: T.Buffer((128, 128), "float32"), B: T.Buffer((128, 128), "float32"), C: T.Buffer((128, 128), "float32")):
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
-            buffer = T.sblock_alloc_buffer((128, 128))
+            # with Ts.sblock("root"):
+            buffer = Ts.sblock_alloc_buffer((128, 128))
             for i, j_0, k, j_1 in T.grid(128, 16, 128, 8):
-                with T.sblock("Y"):
-                    v = T.axis.spatial(128, i)
-                    v_1 = T.axis.spatial(128, j_0 * 8 + j_1)
-                    v_2 = T.axis.reduce(128, k)
-                    T.reads(A[v, v_2], B[v_2, v_1])
-                    T.writes(buffer[v, v_1])
-                    with T.init():
+                with Ts.sblock("Y"):
+                    v = Ts.axis.spatial(128, i)
+                    v_1 = Ts.axis.spatial(128, j_0 * 8 + j_1)
+                    v_2 = Ts.axis.reduce(128, k)
+                    Ts.reads(A[v, v_2], B[v_2, v_1])
+                    Ts.writes(buffer[v, v_1])
+                    with Ts.init():
                         buffer[v, v_1] = T.float32(0.0)
                     buffer[v, v_1] = buffer[v, v_1] + A[v, v_2] * B[v_2, v_1]
             for i, j in T.grid(128, 128):
-                with T.sblock("C"):
-                    v, v_1 = T.axis.remap("SS", [i, j])
-                    T.reads(buffer[v, v_1])
-                    T.writes(C[v, v_1])
+                with Ts.sblock("C"):
+                    v, v_1 = Ts.axis.remap("SS", [i, j])
+                    Ts.reads(buffer[v, v_1])
+                    Ts.writes(C[v, v_1])
                     C[v, v_1] = T.max(buffer[v, v_1], T.float32(0.0))
 
     Execution time summary:
      mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)  
-       0.8639       0.8639       0.8639       0.8639       0.0000                  
+       0.8708       0.8708       0.8708       0.8708       0.0000                  
 
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 137-142
+.. GENERATED FROM PYTHON SOURCE LINES 138-143
 
 Leverage Localities
 *******************
@@ -307,7 +310,7 @@ Subsequently, we will execute two additional transformation steps to achieve a d
 variant. First, we employ a primitive known as **reverse_compute_at** to relocate block
 **C** to an inner loop of **Y**.
 
-.. GENERATED FROM PYTHON SOURCE LINES 142-147
+.. GENERATED FROM PYTHON SOURCE LINES 143-148
 
 .. code-block:: Python
 
@@ -327,38 +330,39 @@ variant. First, we employ a primitive known as **reverse_compute_at** to relocat
     # from tvm.script import ir as I
     # from tvm.script import tirx as T
     # from tvm.tirx.layout import Axis
+    # from tvm.script import s_tir as Ts
 
     @I.ir_module
     class Module:
-        @T.prim_func(s_tir=True)
+        @Ts.prim_func
         def main(A: T.Buffer((128, 128), "float32"), B: T.Buffer((128, 128), "float32"), C: T.Buffer((128, 128), "float32")):
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
-            buffer = T.sblock_alloc_buffer((128, 128))
+            # with Ts.sblock("root"):
+            buffer = Ts.sblock_alloc_buffer((128, 128))
             for i, j_0 in T.grid(128, 16):
                 for k, j_1 in T.grid(128, 8):
-                    with T.sblock("Y"):
-                        v = T.axis.spatial(128, i)
-                        v_1 = T.axis.spatial(128, j_0 * 8 + j_1)
-                        v_2 = T.axis.reduce(128, k)
-                        T.reads(A[v, v_2], B[v_2, v_1])
-                        T.writes(buffer[v, v_1])
-                        with T.init():
+                    with Ts.sblock("Y"):
+                        v = Ts.axis.spatial(128, i)
+                        v_1 = Ts.axis.spatial(128, j_0 * 8 + j_1)
+                        v_2 = Ts.axis.reduce(128, k)
+                        Ts.reads(A[v, v_2], B[v_2, v_1])
+                        Ts.writes(buffer[v, v_1])
+                        with Ts.init():
                             buffer[v, v_1] = T.float32(0.0)
                         buffer[v, v_1] = buffer[v, v_1] + A[v, v_2] * B[v_2, v_1]
                 for ax0 in range(8):
-                    with T.sblock("C"):
-                        v = T.axis.spatial(128, i)
-                        v_1 = T.axis.spatial(128, j_0 * 8 + ax0)
-                        T.reads(buffer[v, v_1])
-                        T.writes(C[v, v_1])
+                    with Ts.sblock("C"):
+                        v = Ts.axis.spatial(128, i)
+                        v_1 = Ts.axis.spatial(128, j_0 * 8 + ax0)
+                        Ts.reads(buffer[v, v_1])
+                        Ts.writes(C[v, v_1])
                         C[v, v_1] = T.max(buffer[v, v_1], T.float32(0.0))
 
 
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 148-157
+.. GENERATED FROM PYTHON SOURCE LINES 149-158
 
 Rewrite Reduction
 *****************
@@ -370,7 +374,7 @@ synchronized.
 Following the loop transformations, we can segregate the initialization of Y's elements
 from the reduction update via the **decompose_reduction** primitive.
 
-.. GENERATED FROM PYTHON SOURCE LINES 157-162
+.. GENERATED FROM PYTHON SOURCE LINES 158-163
 
 .. code-block:: Python
 
@@ -390,46 +394,47 @@ from the reduction update via the **decompose_reduction** primitive.
     # from tvm.script import ir as I
     # from tvm.script import tirx as T
     # from tvm.tirx.layout import Axis
+    # from tvm.script import s_tir as Ts
 
     @I.ir_module
     class Module:
-        @T.prim_func(s_tir=True)
+        @Ts.prim_func
         def main(A: T.Buffer((128, 128), "float32"), B: T.Buffer((128, 128), "float32"), C: T.Buffer((128, 128), "float32")):
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
-            buffer = T.sblock_alloc_buffer((128, 128))
+            # with Ts.sblock("root"):
+            buffer = Ts.sblock_alloc_buffer((128, 128))
             for i, j_0 in T.grid(128, 16):
                 for j_1_init in range(8):
-                    with T.sblock("Y_init"):
-                        v = T.axis.spatial(128, i)
-                        v_1 = T.axis.spatial(128, j_0 * 8 + j_1_init)
-                        T.reads()
-                        T.writes(buffer[v, v_1])
+                    with Ts.sblock("Y_init"):
+                        v = Ts.axis.spatial(128, i)
+                        v_1 = Ts.axis.spatial(128, j_0 * 8 + j_1_init)
+                        Ts.reads()
+                        Ts.writes(buffer[v, v_1])
                         buffer[v, v_1] = T.float32(0.0)
                 for k, j_1 in T.grid(128, 8):
-                    with T.sblock("Y_update"):
-                        v = T.axis.spatial(128, i)
-                        v_1 = T.axis.spatial(128, j_0 * 8 + j_1)
-                        v_2 = T.axis.reduce(128, k)
-                        T.reads(buffer[v, v_1], A[v, v_2], B[v_2, v_1])
-                        T.writes(buffer[v, v_1])
+                    with Ts.sblock("Y_update"):
+                        v = Ts.axis.spatial(128, i)
+                        v_1 = Ts.axis.spatial(128, j_0 * 8 + j_1)
+                        v_2 = Ts.axis.reduce(128, k)
+                        Ts.reads(buffer[v, v_1], A[v, v_2], B[v_2, v_1])
+                        Ts.writes(buffer[v, v_1])
                         buffer[v, v_1] = buffer[v, v_1] + A[v, v_2] * B[v_2, v_1]
                 for ax0 in range(8):
-                    with T.sblock("C"):
-                        v = T.axis.spatial(128, i)
-                        v_1 = T.axis.spatial(128, j_0 * 8 + ax0)
-                        T.reads(buffer[v, v_1])
-                        T.writes(C[v, v_1])
+                    with Ts.sblock("C"):
+                        v = Ts.axis.spatial(128, i)
+                        v_1 = Ts.axis.spatial(128, j_0 * 8 + ax0)
+                        Ts.reads(buffer[v, v_1])
+                        Ts.writes(C[v, v_1])
                         C[v, v_1] = T.max(buffer[v, v_1], T.float32(0.0))
 
     Execution time summary:
      mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)  
-       0.3396       0.3396       0.3396       0.3396       0.0000                  
+       0.3477       0.3477       0.3477       0.3477       0.0000                  
 
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 163-171
+.. GENERATED FROM PYTHON SOURCE LINES 164-172
 
 Trace the Transformation
 ************************
@@ -440,7 +445,7 @@ history of the schedule.
 We've already see the schedule by printing ``sch.mod``. We can also print the history
 of the schedule by ``sch.trace``.
 
-.. GENERATED FROM PYTHON SOURCE LINES 171-174
+.. GENERATED FROM PYTHON SOURCE LINES 172-175
 
 .. code-block:: Python
 
@@ -469,11 +474,11 @@ of the schedule by ``sch.trace``.
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 175-176
+.. GENERATED FROM PYTHON SOURCE LINES 176-177
 
 Alternatively, we can output the IRModule in conjunction with the historical trace.
 
-.. GENERATED FROM PYTHON SOURCE LINES 176-178
+.. GENERATED FROM PYTHON SOURCE LINES 177-179
 
 .. code-block:: Python
 
@@ -490,36 +495,37 @@ Alternatively, we can output the IRModule in conjunction with the historical tra
     # from tvm.script import ir as I
     # from tvm.script import tirx as T
     # from tvm.tirx.layout import Axis
+    # from tvm.script import s_tir as Ts
 
     @I.ir_module
     class Module:
-        @T.prim_func(s_tir=True)
+        @Ts.prim_func
         def main(A: T.Buffer((128, 128), "float32"), B: T.Buffer((128, 128), "float32"), C: T.Buffer((128, 128), "float32")):
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
-            buffer = T.sblock_alloc_buffer((128, 128))
+            # with Ts.sblock("root"):
+            buffer = Ts.sblock_alloc_buffer((128, 128))
             for i, j_0 in T.grid(128, 16):
                 for j_1_init in range(8):
-                    with T.sblock("Y_init"):
-                        v = T.axis.spatial(128, i)
-                        v_1 = T.axis.spatial(128, j_0 * 8 + j_1_init)
-                        T.reads()
-                        T.writes(buffer[v, v_1])
+                    with Ts.sblock("Y_init"):
+                        v = Ts.axis.spatial(128, i)
+                        v_1 = Ts.axis.spatial(128, j_0 * 8 + j_1_init)
+                        Ts.reads()
+                        Ts.writes(buffer[v, v_1])
                         buffer[v, v_1] = T.float32(0.0)
                 for k, j_1 in T.grid(128, 8):
-                    with T.sblock("Y_update"):
-                        v = T.axis.spatial(128, i)
-                        v_1 = T.axis.spatial(128, j_0 * 8 + j_1)
-                        v_2 = T.axis.reduce(128, k)
-                        T.reads(buffer[v, v_1], A[v, v_2], B[v_2, v_1])
-                        T.writes(buffer[v, v_1])
+                    with Ts.sblock("Y_update"):
+                        v = Ts.axis.spatial(128, i)
+                        v_1 = Ts.axis.spatial(128, j_0 * 8 + j_1)
+                        v_2 = Ts.axis.reduce(128, k)
+                        Ts.reads(buffer[v, v_1], A[v, v_2], B[v_2, v_1])
+                        Ts.writes(buffer[v, v_1])
                         buffer[v, v_1] = buffer[v, v_1] + A[v, v_2] * B[v_2, v_1]
                 for ax0 in range(8):
-                    with T.sblock("C"):
-                        v = T.axis.spatial(128, i)
-                        v_1 = T.axis.spatial(128, j_0 * 8 + ax0)
-                        T.reads(buffer[v, v_1])
-                        T.writes(C[v, v_1])
+                    with Ts.sblock("C"):
+                        v = Ts.axis.spatial(128, i)
+                        v_1 = Ts.axis.spatial(128, j_0 * 8 + ax0)
+                        Ts.reads(buffer[v, v_1])
+                        Ts.writes(C[v, v_1])
                         C[v, v_1] = T.max(buffer[v, v_1], T.float32(0.0))
 
     # from tvm import s_tir
diff --git a/docs/_sources/get_started/tutorials/ir_module.rst b/docs/_sources/get_started/tutorials/ir_module.rst
index a226559bbf6..d08a0af8cf6 100644
--- a/docs/_sources/get_started/tutorials/ir_module.rst
+++ b/docs/_sources/get_started/tutorials/ir_module.rst
@@ -398,89 +398,90 @@ within the same module. Meanwhile, the Relax operators will be converted into ``
     # from tvm.script import ir as I
     # from tvm.script import tirx as T
     # from tvm.tirx.layout import Axis
+    # from tvm.script import s_tir as Ts
     # from tvm.script import relax as R
 
     @I.ir_module
     class Module:
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def add(p_fc1_bias: T.Buffer((T.int64(256),), "float32"), lv1: T.Buffer((T.int64(1), T.int64(256)), "float32"), T_add: T.Buffer((T.int64(1), T.int64(256)), "float32")):
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for ax0, ax1 in T.grid(T.int64(1), T.int64(256)):
-                with T.sblock("T_add"):
-                    v_ax0, v_ax1 = T.axis.remap("SS", [ax0, ax1])
-                    T.reads(p_fc1_bias[v_ax1], lv1[v_ax0, v_ax1])
-                    T.writes(T_add[v_ax0, v_ax1])
+                with Ts.sblock("T_add"):
+                    v_ax0, v_ax1 = Ts.axis.remap("SS", [ax0, ax1])
+                    Ts.reads(p_fc1_bias[v_ax1], lv1[v_ax0, v_ax1])
+                    Ts.writes(T_add[v_ax0, v_ax1])
                     T_add[v_ax0, v_ax1] = p_fc1_bias[v_ax1] + lv1[v_ax0, v_ax1]
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def add1(p_fc2_bias: T.Buffer((T.int64(10),), "float32"), lv5: T.Buffer((T.int64(1), T.int64(10)), "float32"), T_add: T.Buffer((T.int64(1), T.int64(10)), "float32")):
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for ax0, ax1 in T.grid(T.int64(1), T.int64(10)):
-                with T.sblock("T_add"):
-                    v_ax0, v_ax1 = T.axis.remap("SS", [ax0, ax1])
-                    T.reads(p_fc2_bias[v_ax1], lv5[v_ax0, v_ax1])
-                    T.writes(T_add[v_ax0, v_ax1])
+                with Ts.sblock("T_add"):
+                    v_ax0, v_ax1 = Ts.axis.remap("SS", [ax0, ax1])
+                    Ts.reads(p_fc2_bias[v_ax1], lv5[v_ax0, v_ax1])
+                    Ts.writes(T_add[v_ax0, v_ax1])
                     T_add[v_ax0, v_ax1] = p_fc2_bias[v_ax1] + lv5[v_ax0, v_ax1]
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def matmul(x: T.Buffer((T.int64(1), T.int64(784)), "float32"), lv: T.Buffer((T.int64(784), T.int64(256)), "float32"), matmul: T.Buffer((T.int64(1), T.int64(256)), "float32")):
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for i0, i1, k in T.grid(T.int64(1), T.int64(256), T.int64(784)):
-                with T.sblock("matmul"):
-                    v_i0, v_i1, v_k = T.axis.remap("SSR", [i0, i1, k])
-                    T.reads(x[v_i0, v_k], lv[v_k, v_i1])
-                    T.writes(matmul[v_i0, v_i1])
-                    with T.init():
+                with Ts.sblock("matmul"):
+                    v_i0, v_i1, v_k = Ts.axis.remap("SSR", [i0, i1, k])
+                    Ts.reads(x[v_i0, v_k], lv[v_k, v_i1])
+                    Ts.writes(matmul[v_i0, v_i1])
+                    with Ts.init():
                         matmul[v_i0, v_i1] = T.float32(0.0)
                     matmul[v_i0, v_i1] = matmul[v_i0, v_i1] + x[v_i0, v_k] * lv[v_k, v_i1]
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def matmul1(lv3: T.Buffer((T.int64(1), T.int64(256)), "float32"), lv4: T.Buffer((T.int64(256), T.int64(10)), "float32"), matmul: T.Buffer((T.int64(1), T.int64(10)), "float32")):
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for i0, i1, k in T.grid(T.int64(1), T.int64(10), T.int64(256)):
-                with T.sblock("matmul"):
-                    v_i0, v_i1, v_k = T.axis.remap("SSR", [i0, i1, k])
-                    T.reads(lv3[v_i0, v_k], lv4[v_k, v_i1])
-                    T.writes(matmul[v_i0, v_i1])
-                    with T.init():
+                with Ts.sblock("matmul"):
+                    v_i0, v_i1, v_k = Ts.axis.remap("SSR", [i0, i1, k])
+                    Ts.reads(lv3[v_i0, v_k], lv4[v_k, v_i1])
+                    Ts.writes(matmul[v_i0, v_i1])
+                    with Ts.init():
                         matmul[v_i0, v_i1] = T.float32(0.0)
                     matmul[v_i0, v_i1] = matmul[v_i0, v_i1] + lv3[v_i0, v_k] * lv4[v_k, v_i1]
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def relu(lv2: T.Buffer((T.int64(1), T.int64(256)), "float32"), compute: T.Buffer((T.int64(1), T.int64(256)), "float32")):
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for i0, i1 in T.grid(T.int64(1), T.int64(256)):
-                with T.sblock("compute"):
-                    v_i0, v_i1 = T.axis.remap("SS", [i0, i1])
-                    T.reads(lv2[v_i0, v_i1])
-                    T.writes(compute[v_i0, v_i1])
+                with Ts.sblock("compute"):
+                    v_i0, v_i1 = Ts.axis.remap("SS", [i0, i1])
+                    Ts.reads(lv2[v_i0, v_i1])
+                    Ts.writes(compute[v_i0, v_i1])
                     compute[v_i0, v_i1] = T.max(lv2[v_i0, v_i1], T.float32(0.0))
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def transpose(p_fc1_weight: T.Buffer((T.int64(256), T.int64(784)), "float32"), T_transpose: T.Buffer((T.int64(784), T.int64(256)), "float32")):
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for ax0, ax1 in T.grid(T.int64(784), T.int64(256)):
-                with T.sblock("T_transpose"):
-                    v_ax0, v_ax1 = T.axis.remap("SS", [ax0, ax1])
-                    T.reads(p_fc1_weight[v_ax1, v_ax0])
-                    T.writes(T_transpose[v_ax0, v_ax1])
+                with Ts.sblock("T_transpose"):
+                    v_ax0, v_ax1 = Ts.axis.remap("SS", [ax0, ax1])
+                    Ts.reads(p_fc1_weight[v_ax1, v_ax0])
+                    Ts.writes(T_transpose[v_ax0, v_ax1])
                     T_transpose[v_ax0, v_ax1] = p_fc1_weight[v_ax1, v_ax0]
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def transpose1(p_fc2_weight: T.Buffer((T.int64(10), T.int64(256)), "float32"), T_transpose: T.Buffer((T.int64(256), T.int64(10)), "float32")):
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for ax0, ax1 in T.grid(T.int64(256), T.int64(10)):
-                with T.sblock("T_transpose"):
-                    v_ax0, v_ax1 = T.axis.remap("SS", [ax0, ax1])
-                    T.reads(p_fc2_weight[v_ax1, v_ax0])
-                    T.writes(T_transpose[v_ax0, v_ax1])
+                with Ts.sblock("T_transpose"):
+                    v_ax0, v_ax1 = Ts.axis.remap("SS", [ax0, ax1])
+                    Ts.reads(p_fc2_weight[v_ax1, v_ax0])
+                    Ts.writes(T_transpose[v_ax0, v_ax1])
                     T_transpose[v_ax0, v_ax1] = p_fc2_weight[v_ax1, v_ax0]
 
         @R.function
@@ -572,77 +573,78 @@ The default **zero** pipeline contains very fundamental transformations, includi
     # from tvm.script import ir as I
     # from tvm.script import tirx as T
     # from tvm.tirx.layout import Axis
+    # from tvm.script import s_tir as Ts
     # from tvm.script import relax as R
 
     @I.ir_module
     class Module:
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def fused_matmul1_add1(lv3: T.Buffer((T.int64(1), T.int64(256)), "float32"), lv4: T.Buffer((T.int64(256), T.int64(10)), "float32"), p_fc2_bias: T.Buffer((T.int64(10),), "float32"), T_add_intermediate: T.Buffer((T.int64(1), T.int64(10)), "float32")):
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
-            matmul_intermediate = T.sblock_alloc_buffer((T.int64(1), T.int64(10)))
+            # with Ts.sblock("root"):
+            matmul_intermediate = Ts.sblock_alloc_buffer((T.int64(1), T.int64(10)))
             for i0, i1, k in T.grid(T.int64(1), T.int64(10), T.int64(256)):
-                with T.sblock("matmul"):
-                    v_i0, v_i1, v_k = T.axis.remap("SSR", [i0, i1, k])
-                    T.reads(lv3[v_i0, v_k], lv4[v_k, v_i1])
-                    T.writes(matmul_intermediate[v_i0, v_i1])
-                    with T.init():
+                with Ts.sblock("matmul"):
+                    v_i0, v_i1, v_k = Ts.axis.remap("SSR", [i0, i1, k])
+                    Ts.reads(lv3[v_i0, v_k], lv4[v_k, v_i1])
+                    Ts.writes(matmul_intermediate[v_i0, v_i1])
+                    with Ts.init():
                         matmul_intermediate[v_i0, v_i1] = T.float32(0.0)
                     matmul_intermediate[v_i0, v_i1] = matmul_intermediate[v_i0, v_i1] + lv3[v_i0, v_k] * lv4[v_k, v_i1]
             for ax0, ax1 in T.grid(T.int64(1), T.int64(10)):
-                with T.sblock("T_add"):
-                    v_ax0, v_ax1 = T.axis.remap("SS", [ax0, ax1])
-                    T.reads(p_fc2_bias[v_ax1], matmul_intermediate[v_ax0, v_ax1])
-                    T.writes(T_add_intermediate[v_ax0, v_ax1])
+                with Ts.sblock("T_add"):
+                    v_ax0, v_ax1 = Ts.axis.remap("SS", [ax0, ax1])
+                    Ts.reads(p_fc2_bias[v_ax1], matmul_intermediate[v_ax0, v_ax1])
+                    Ts.writes(T_add_intermediate[v_ax0, v_ax1])
                     T_add_intermediate[v_ax0, v_ax1] = p_fc2_bias[v_ax1] + matmul_intermediate[v_ax0, v_ax1]
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def fused_matmul_add_relu(x: T.Buffer((T.int64(1), T.int64(784)), "float32"), lv: T.Buffer((T.int64(784), T.int64(256)), "float32"), p_fc1_bias: T.Buffer((T.int64(256),), "float32"), compute_intermediate: T.Buffer((T.int64(1), T.int64(256)), "float32")):
             T.func_attr({"tirx.noalias": True})
-            # with T.sblock("root"):
-            matmul_intermediate = T.sblock_alloc_buffer((T.int64(1), T.int64(256)))
-            T_add_intermediate = T.sblock_alloc_buffer((T.int64(1), T.int64(256)))
+            # with Ts.sblock("root"):
+            matmul_intermediate = Ts.sblock_alloc_buffer((T.int64(1), T.int64(256)))
+            T_add_intermediate = Ts.sblock_alloc_buffer((T.int64(1), T.int64(256)))
             for i0, i1, k in T.grid(T.int64(1), T.int64(256), T.int64(784)):
-                with T.sblock("matmul"):
-                    v_i0, v_i1, v_k = T.axis.remap("SSR", [i0, i1, k])
-                    T.reads(x[v_i0, v_k], lv[v_k, v_i1])
-                    T.writes(matmul_intermediate[v_i0, v_i1])
-                    with T.init():
+                with Ts.sblock("matmul"):
+                    v_i0, v_i1, v_k = Ts.axis.remap("SSR", [i0, i1, k])
+                    Ts.reads(x[v_i0, v_k], lv[v_k, v_i1])
+                    Ts.writes(matmul_intermediate[v_i0, v_i1])
+                    with Ts.init():
                         matmul_intermediate[v_i0, v_i1] = T.float32(0.0)
                     matmul_intermediate[v_i0, v_i1] = matmul_intermediate[v_i0, v_i1] + x[v_i0, v_k] * lv[v_k, v_i1]
             for ax0, ax1 in T.grid(T.int64(1), T.int64(256)):
-                with T.sblock("T_add"):
-                    v_ax0, v_ax1 = T.axis.remap("SS", [ax0, ax1])
-                    T.reads(p_fc1_bias[v_ax1], matmul_intermediate[v_ax0, v_ax1])
-                    T.writes(T_add_intermediate[v_ax0, v_ax1])
+                with Ts.sblock("T_add"):
+                    v_ax0, v_ax1 = Ts.axis.remap("SS", [ax0, ax1])
+                    Ts.reads(p_fc1_bias[v_ax1], matmul_intermediate[v_ax0, v_ax1])
+                    Ts.writes(T_add_intermediate[v_ax0, v_ax1])
                     T_add_intermediate[v_ax0, v_ax1] = p_fc1_bias[v_ax1] + matmul_intermediate[v_ax0, v_ax1]
             for i0, i1 in T.grid(T.int64(1), T.int64(256)):
-                with T.sblock("compute"):
-                    v_i0, v_i1 = T.axis.remap("SS", [i0, i1])
-                    T.reads(T_add_intermediate[v_i0, v_i1])
-                    T.writes(compute_intermediate[v_i0, v_i1])
+                with Ts.sblock("compute"):
+                    v_i0, v_i1 = Ts.axis.remap("SS", [i0, i1])
+                    Ts.reads(T_add_intermediate[v_i0, v_i1])
+                    Ts.writes(compute_intermediate[v_i0, v_i1])
                     compute_intermediate[v_i0, v_i1] = T.max(T_add_intermediate[v_i0, v_i1], T.float32(0.0))
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def transpose(p_fc1_weight: T.Buffer((T.int64(256), T.int64(784)), "float32"), T_transpose: T.Buffer((T.int64(784), T.int64(256)), "float32")):
             T.func_attr({"op_pattern": 2, "tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for ax0, ax1 in T.grid(T.int64(784), T.int64(256)):
-                with T.sblock("T_transpose"):
-                    v_ax0, v_ax1 = T.axis.remap("SS", [ax0, ax1])
-                    T.reads(p_fc1_weight[v_ax1, v_ax0])
-                    T.writes(T_transpose[v_ax0, v_ax1])
+                with Ts.sblock("T_transpose"):
+                    v_ax0, v_ax1 = Ts.axis.remap("SS", [ax0, ax1])
+                    Ts.reads(p_fc1_weight[v_ax1, v_ax0])
+                    Ts.writes(T_transpose[v_ax0, v_ax1])
                     T_transpose[v_ax0, v_ax1] = p_fc1_weight[v_ax1, v_ax0]
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def transpose1(p_fc2_weight: T.Buffer((T.int64(10), T.int64(256)), "float32"), T_transpose: T.Buffer((T.int64(256), T.int64(10)), "float32")):
             T.func_attr({"op_pattern": 2, "tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for ax0, ax1 in T.grid(T.int64(256), T.int64(10)):
-                with T.sblock("T_transpose"):
-                    v_ax0, v_ax1 = T.axis.remap("SS", [ax0, ax1])
-                    T.reads(p_fc2_weight[v_ax1, v_ax0])
-                    T.writes(T_transpose[v_ax0, v_ax1])
+                with Ts.sblock("T_transpose"):
+                    v_ax0, v_ax1 = Ts.axis.remap("SS", [ax0, ax1])
+                    Ts.reads(p_fc2_weight[v_ax1, v_ax0])
+                    Ts.writes(T_transpose[v_ax0, v_ax1])
                     T_transpose[v_ax0, v_ax1] = p_fc2_weight[v_ax1, v_ax0]
 
         @R.function
@@ -696,8 +698,8 @@ We can deploy the IRModule on CPU by specifying the target as ``llvm``.
 
  .. code-block:: none
 
-    [[-0.23562552  0.05371134 -0.13055453  0.2650053  -0.13116169 -0.00900859
-       0.16538218  0.12908211 -0.00368892  0.22429338]]
+    [[ 0.03041493 -0.12236952 -0.11497392  0.08369536 -0.09267335  0.00781134
+      -0.00412857  0.09738255 -0.15437272 -0.11997806]]
 
 
 
@@ -763,8 +765,8 @@ Now we can compile the IRModule on GPU, the similar way as we did on CPU.
 
  .. code-block:: none
 
-    [[-0.23562557  0.05371135 -0.13055448  0.2650053  -0.13116166 -0.00900865
-       0.16538215  0.12908214 -0.00368889  0.22429338]]
+    [[ 0.03041491 -0.12236952 -0.11497388  0.08369543 -0.09267339  0.00781127
+      -0.00412863  0.09738256 -0.15437265 -0.11997804]]
 
 
 
diff --git a/docs/_sources/get_started/tutorials/quick_start.rst b/docs/_sources/get_started/tutorials/quick_start.rst
index 02a77c71062..70fbb06e51f 100644
--- a/docs/_sources/get_started/tutorials/quick_start.rst
+++ b/docs/_sources/get_started/tutorials/quick_start.rst
@@ -224,8 +224,8 @@ different devices.
 
  .. code-block:: none
 
-    [[23455.39  24751.37  25286.8   24762.7   25011.197 25126.11  24433.854
-      22964.387 24770.965 26254.316]]
+    [[23292.582 25088.281 23512.379 23857.27  23783.04  26079.24  23850.568
+      23491.396 24608.787 23830.986]]
 
 
 
diff --git a/docs/_sources/get_started/tutorials/sg_execution_times.rst b/docs/_sources/get_started/tutorials/sg_execution_times.rst
index 643adcbe3b2..879f43ce706 100644
--- a/docs/_sources/get_started/tutorials/sg_execution_times.rst
+++ b/docs/_sources/get_started/tutorials/sg_execution_times.rst
@@ -6,7 +6,7 @@
 
 Computation times
 =================
-**00:05.499** total execution time for 2 files **from get_started/tutorials**:
+**00:05.494** total execution time for 2 files **from get_started/tutorials**:
 
 .. container::
 
@@ -33,8 +33,8 @@ Computation times
      - Time
      - Mem (MB)
    * - :ref:`sphx_glr_get_started_tutorials_ir_module.py` (``ir_module.py``)
-     - 00:05.339
+     - 00:05.336
      - 0.0
    * - :ref:`sphx_glr_get_started_tutorials_quick_start.py` (``quick_start.py``)
-     - 00:00.160
+     - 00:00.158
      - 0.0
diff --git a/docs/_sources/how_to/tutorials/cross_compilation_and_rpc.rst b/docs/_sources/how_to/tutorials/cross_compilation_and_rpc.rst
index 6a55743e9c6..7adbf072293 100644
--- a/docs/_sources/how_to/tutorials/cross_compilation_and_rpc.rst
+++ b/docs/_sources/how_to/tutorials/cross_compilation_and_rpc.rst
@@ -275,7 +275,7 @@ device and returns the measured cost. Network overhead is excluded.
 
  .. code-block:: none
 
-    9e-08 secs/op
+    9.4e-08 secs/op
 
 
 
@@ -864,8 +864,8 @@ This workflow is applicable to various deployment scenarios:
     Converted PyTorch model to Relax:
       - Number of parameters: 4
     Using local target for demonstration
-    Exported library to: /tmp/tmp407p4qwk/model_deployed.so
-    Saved parameters to: /tmp/tmp407p4qwk/model_params.npz
+    Exported library to: /tmp/tmp67reiatr/model_deployed.so
+    Saved parameters to: /tmp/tmp67reiatr/model_params.npz
 
     RPC workflow (works for any remote device):
     ==================================================
diff --git a/docs/_sources/how_to/tutorials/customize_opt.rst b/docs/_sources/how_to/tutorials/customize_opt.rst
index 7f4f3a31009..515c839d643 100644
--- a/docs/_sources/how_to/tutorials/customize_opt.rst
+++ b/docs/_sources/how_to/tutorials/customize_opt.rst
@@ -322,55 +322,56 @@ it achieves a balance between performance and compilation time.
     # from tvm.script import ir as I
     # from tvm.script import tirx as T
     # from tvm.tirx.layout import Axis
+    # from tvm.script import s_tir as Ts
     # from tvm.script import relax as R
 
     @I.ir_module
     class Module:
         I.module_attrs({"external_mods": [metadata["ffi.Module"][0]]})
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def matmul(lv: T.Buffer((T.int64(1), T.int64(256)), "float32"), permute_dims1: T.Buffer((T.int64(256), T.int64(10)), "float32"), matmul: T.Buffer((T.int64(1), T.int64(10)), "float32")):
             T.func_attr({"op_pattern": 4, "tirx.is_scheduled": True, "tirx.noalias": True})
-            # with T.sblock("root"):
-            matmul_rf_local = T.sblock_alloc_buffer((T.int64(16), T.int64(1), T.int64(10)), scope="local")
+            # with Ts.sblock("root"):
+            matmul_rf_local = Ts.sblock_alloc_buffer((T.int64(16), T.int64(1), T.int64(10)), scope="local")
             for ax0_fused_0 in T.thread_binding(T.int64(1), thread="blockIdx.x"):
                 for ax0_fused_1 in T.thread_binding(T.int64(10), thread="threadIdx.x"):
                     for ax1_fused_1 in T.thread_binding(T.int64(16), thread="threadIdx.y"):
-                        with T.sblock("matmul_rf_init"):
-                            vax1_fused_1 = T.axis.spatial(T.int64(16), ax1_fused_1)
-                            v0 = T.axis.spatial(T.int64(10), ax0_fused_0 * T.int64(10) + ax0_fused_1)
-                            T.reads()
-                            T.writes(matmul_rf_local[vax1_fused_1, T.int64(0), v0])
+                        with Ts.sblock("matmul_rf_init"):
+                            vax1_fused_1 = Ts.axis.spatial(T.int64(16), ax1_fused_1)
+                            v0 = Ts.axis.spatial(T.int64(10), ax0_fused_0 * T.int64(10) + ax0_fused_1)
+                            Ts.reads()
+                            Ts.writes(matmul_rf_local[vax1_fused_1, T.int64(0), v0])
                             matmul_rf_local[vax1_fused_1, T.int64(0), v0] = T.float32(0.0)
                         for ax1_fused_0, u in T.grid(T.int64(16), 1):
-                            with T.sblock("matmul_rf_update"):
-                                vax1_fused_1 = T.axis.spatial(T.int64(16), ax1_fused_1)
-                                v0 = T.axis.spatial(T.int64(10), ax0_fused_0 * T.int64(10) + ax0_fused_1)
-                                vax1_fused_0 = T.axis.reduce(T.int64(16), ax1_fused_0)
-                                T.reads(matmul_rf_local[vax1_fused_1, T.int64(0), v0], lv[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1], permute_dims1[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0])
-                                T.writes(matmul_rf_local[vax1_fused_1, T.int64(0), v0])
+                            with Ts.sblock("matmul_rf_update"):
+                                vax1_fused_1 = Ts.axis.spatial(T.int64(16), ax1_fused_1)
+                                v0 = Ts.axis.spatial(T.int64(10), ax0_fused_0 * T.int64(10) + ax0_fused_1)
+                                vax1_fused_0 = Ts.axis.reduce(T.int64(16), ax1_fused_0)
+                                Ts.reads(matmul_rf_local[vax1_fused_1, T.int64(0), v0], lv[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1], permute_dims1[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0])
+                                Ts.writes(matmul_rf_local[vax1_fused_1, T.int64(0), v0])
                                 matmul_rf_local[vax1_fused_1, T.int64(0), v0] = matmul_rf_local[vax1_fused_1, T.int64(0), v0] + lv[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1] * permute_dims1[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0]
                 for ax1_fused in T.thread_binding(T.int64(10), thread="threadIdx.x"):
                     for ax0 in T.thread_binding(T.int64(16), thread="threadIdx.y"):
-                        with T.sblock("matmul"):
-                            vax1_fused_1, v0 = T.axis.remap("RS", [ax0, ax1_fused])
-                            T.reads(matmul_rf_local[vax1_fused_1, T.int64(0), v0])
-                            T.writes(matmul[T.int64(0), v0])
-                            with T.init():
+                        with Ts.sblock("matmul"):
+                            vax1_fused_1, v0 = Ts.axis.remap("RS", [ax0, ax1_fused])
+                            Ts.reads(matmul_rf_local[vax1_fused_1, T.int64(0), v0])
+                            Ts.writes(matmul[T.int64(0), v0])
+                            with Ts.init():
                                 matmul[T.int64(0), v0] = T.float32(0.0)
                             matmul[T.int64(0), v0] = matmul[T.int64(0), v0] + matmul_rf_local[vax1_fused_1, T.int64(0), v0]
 
-        @T.prim_func(private=True, s_tir=True)
+        @Ts.prim_func(private=True)
         def transpose(fc2_weight: T.Buffer((T.int64(10), T.int64(256)), "float32"), T_transpose: T.Buffer((T.int64(256), T.int64(10)), "float32")):
             T.func_attr({"op_pattern": 2, "tirx.is_scheduled": True, "tirx.noalias": True})
-            # with T.sblock("root"):
+            # with Ts.sblock("root"):
             for ax0_ax1_fused_0 in T.thread_binding(T.int64(3), thread="blockIdx.x"):
                 for ax0_ax1_fused_1 in T.thread_binding(T.int64(1024), thread="threadIdx.x"):
-                    with T.sblock("T_transpose"):
-                        v0 = T.axis.spatial(T.int64(256), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) // T.int64(10))
-                        v1 = T.axis.spatial(T.int64(10), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) % T.int64(10))
-                        T.where(ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1 < T.int64(2560))
-                        T.reads(fc2_weight[v1, v0])
-                        T.writes(T_transpose[v0, v1])
+                    with Ts.sblock("T_transpose"):
+                        v0 = Ts.axis.spatial(T.int64(256), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) // T.int64(10))
+                        v1 = Ts.axis.spatial(T.int64(10), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) % T.int64(10))
+                        Ts.where(ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1 < T.int64(2560))
+                        Ts.reads(fc2_weight[v1, v0])
+                        Ts.writes(T_transpose[v0, v1])
                         T_transpose[v0, v1] = fc2_weight[v1, v0]
 
         @R.function
diff --git a/docs/_sources/how_to/tutorials/e2e_opt_model.rst b/docs/_sources/how_to/tutorials/e2e_opt_model.rst
index f0e5998568b..898be3b1feb 100644
--- a/docs/_sources/how_to/tutorials/e2e_opt_model.rst
+++ b/docs/_sources/how_to/tutorials/e2e_opt_model.rst
@@ -54,7 +54,7 @@ PyTorch.
  .. 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]      64%|██████▍   | 28.6M/44.7M [00:00<00:00, 300MB/s]     100%|██████████| 44.7M/44.7M [00:00<00:00, 322MB/s]
+       0%|          | 0.00/44.7M [00:00<?, ?B/s]      18%|█▊        | 8.00M/44.7M [00:00<00:00, 83.7MB/s]      85%|████████▌ | 38.0M/44.7M [00:00<00:00, 210MB/s]      100%|██████████| 44.7M/44.7M [00:00<00:00, 196MB/s]
 
 
 
diff --git a/docs/_sources/how_to/tutorials/mix_python_and_tvm_with_pymodule.rst b/docs/_sources/how_to/tutorials/mix_python_and_tvm_with_pymodule.rst
index 2a509f7bab1..e3ad093c084 100644
--- a/docs/_sources/how_to/tutorials/mix_python_and_tvm_with_pymodule.rst
+++ b/docs/_sources/how_to/tutorials/mix_python_and_tvm_with_pymodule.rst
@@ -48,7 +48,7 @@ This tutorial walks through the full workflow step by step.
 Preparation
 -----------
 
-.. GENERATED FROM PYTHON SOURCE LINES 50-71
+.. GENERATED FROM PYTHON SOURCE LINES 50-72
 
 .. code-block:: Python
 
@@ -66,6 +66,7 @@ Preparation
     from tvm.relax.base_py_module import BasePyModule
     from tvm.script import ir as I
     from tvm.script import relax as R
+    from tvm.script import s_tir as Ts
     from tvm.script import tirx as T
 
     IS_IN_CI = os.getenv("CI", "").lower() == "true"
@@ -80,7 +81,7 @@ Preparation
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 72-83
+.. GENERATED FROM PYTHON SOURCE LINES 73-84
 
 Step 1: Your First Hybrid Module
 ----------------------------------
@@ -94,7 +95,7 @@ three decorators for three kinds of functions:
 ``call_tir`` bridges Python and TIR: it converts PyTorch tensors to TVM NDArrays via DLPack
 (zero-copy), allocates the output buffer, calls the compiled kernel, and converts back.
 
-.. GENERATED FROM PYTHON SOURCE LINES 83-122
+.. GENERATED FROM PYTHON SOURCE LINES 84-123
 
 .. code-block:: Python
 
@@ -103,7 +104,7 @@ three decorators for three kinds of functions:
 
         @R.py_module
         class MyFirstModule(BasePyModule):
-            @T.prim_func(s_tir=True)
+            @Ts.prim_func
             def add_tir(
                 A: T.Buffer((4,), "float32"),
                 B: T.Buffer((4,), "float32"),
@@ -144,7 +145,7 @@ three decorators for three kinds of functions:
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 123-129
+.. GENERATED FROM PYTHON SOURCE LINES 124-130
 
 Step 2: Debugging — The Main Selling Point
 ---------------------------------------------
@@ -153,7 +154,7 @@ intermediate tensor values without compiling the entire module. With ``@I.pyfunc
 is as simple as adding a ``print`` statement. You can also make quick edits and re-run
 immediately — no recompilation needed.
 
-.. GENERATED FROM PYTHON SOURCE LINES 129-180
+.. GENERATED FROM PYTHON SOURCE LINES 130-181
 
 .. code-block:: Python
 
@@ -162,16 +163,16 @@ immediately — no recompilation needed.
 
         @R.py_module
         class DebugModule(BasePyModule):
-            @T.prim_func(s_tir=True)
+            @Ts.prim_func
             def matmul_tir(var_A: T.handle, var_B: T.handle, var_C: T.handle):
                 n = T.int32()
                 A = T.match_buffer(var_A, (n, 4), "float32")
                 B = T.match_buffer(var_B, (4, 3), "float32")
                 C = T.match_buffer(var_C, (n, 3), "float32")
                 for i, j, k in T.grid(n, 3, 4):
-                    with T.sblock("matmul"):
-                        vi, vj, vk = T.axis.remap("SSR", [i, j, k])
-                        with T.init():
+                    with Ts.sblock("matmul"):
+                        vi, vj, vk = Ts.axis.remap("SSR", [i, j, k])
+                        with Ts.init():
                             C[vi, vj] = T.float32(0)
                         C[vi, vj] = C[vi, vj] + A[vi, vk] * B[vk, vj]
 
@@ -215,13 +216,13 @@ immediately — no recompilation needed.
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 181-184
+.. GENERATED FROM PYTHON SOURCE LINES 182-185
 
 This is the key benefit: "debugging is as simple as inserting a print statement.
 Users can also make quick, manual edits to Python functions and immediately observe the
 results." No compilation cycle, no VM loading — just Python.
 
-.. GENERATED FROM PYTHON SOURCE LINES 187-198
+.. GENERATED FROM PYTHON SOURCE LINES 188-199
 
 Step 3: A Realistic Pipeline — Python, TIR, and Packed Functions
 -------------------------------------------------------------------
@@ -235,7 +236,7 @@ three different calling conventions:
 ``call_dps_packed`` is useful for calling functions registered via ``tvm.register_global_func``
 — for example, CUBLAS or cuDNN bindings that TVM wraps as packed functions.
 
-.. GENERATED FROM PYTHON SOURCE LINES 198-259
+.. GENERATED FROM PYTHON SOURCE LINES 199-260
 
 .. code-block:: Python
 
@@ -253,15 +254,15 @@ three different calling conventions:
 
         @R.py_module
         class PipelineModule(BasePyModule):
-            @T.prim_func(s_tir=True)
+            @Ts.prim_func
             def matmul_tir(var_A: T.handle, var_B: T.handle, var_C: T.handle):
                 A = T.match_buffer(var_A, (2, 4), "float32")
                 B = T.match_buffer(var_B, (4, 3), "float32")
                 C = T.match_buffer(var_C, (2, 3), "float32")
                 for i, j, k in T.grid(2, 3, 4):
-                    with T.sblock("matmul"):
-                        vi, vj, vk = T.axis.remap("SSR", [i, j, k])
-                        with T.init():
+                    with Ts.sblock("matmul"):
+                        vi, vj, vk = Ts.axis.remap("SSR", [i, j, k])
+                        with Ts.init():
                             C[vi, vj] = T.float32(0)
                         C[vi, vj] = C[vi, vj] + A[vi, vk] * B[vk, vj]
 
@@ -307,7 +308,7 @@ three different calling conventions:
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 260-269
+.. GENERATED FROM PYTHON SOURCE LINES 261-270
 
 Step 4: Relax-to-Python Converter — Verify at Any Compilation Stage
 ----------------------------------------------------------------------
@@ -319,7 +320,7 @@ A key feature: **this conversion can happen at any stage of compilation**.
 You can convert early (right after import) or late (after optimization passes have
 transformed the IR), and compare the output against a PyTorch reference to catch bugs.
 
-.. GENERATED FROM PYTHON SOURCE LINES 269-331
+.. GENERATED FROM PYTHON SOURCE LINES 270-332
 
 .. code-block:: Python
 
@@ -330,7 +331,7 @@ transformed the IR), and compare the output against a PyTorch reference to catch
         # A simple Relax module: matmul + bias + relu (a dense layer)
         @I.ir_module
         class DenseLayer:
-            @T.prim_func(s_tir=True)
+            @Ts.prim_func
             def bias_add_tir(var_x: T.handle, var_b: T.handle, var_out: T.handle):
                 x = T.match_buffer(var_x, (2, 4), "float32")
                 b = T.match_buffer(var_b, (4,), "float32")
@@ -392,7 +393,7 @@ transformed the IR), and compare the output against a PyTorch reference to catch
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 332-345
+.. GENERATED FROM PYTHON SOURCE LINES 333-346
 
 Step 5: R.call_py_func — Python Callbacks in Compiled IR
 -----------------------------------------------------------
@@ -408,7 +409,7 @@ Use case: your model has a custom op (e.g., a special normalization or a samplin
 that is complex to implement in TIR. Compile everything else, and let that one op stay
 in Python.
 
-.. GENERATED FROM PYTHON SOURCE LINES 345-382
+.. GENERATED FROM PYTHON SOURCE LINES 346-383
 
 .. code-block:: Python
 
@@ -456,7 +457,7 @@ in Python.
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 383-399
+.. GENERATED FROM PYTHON SOURCE LINES 384-400
 
 Step 6: Cross-Level Calls and Symbolic Shapes
 ------------------------------------------------
@@ -475,7 +476,7 @@ This step also shows **symbolic shapes**: TIR and Relax functions can declare dy
 dimensions (e.g., ``"n"``). ``BasePyModule`` infers concrete shapes from the actual input
 tensors at call time, so the same module handles different sizes without recompilation.
 
-.. GENERATED FROM PYTHON SOURCE LINES 399-444
+.. GENERATED FROM PYTHON SOURCE LINES 400-445
 
 .. code-block:: Python
 
@@ -484,7 +485,7 @@ tensors at call time, so the same module handles different sizes without recompi
 
         @R.py_module
         class DynamicModule(BasePyModule):
-            @T.prim_func(s_tir=True)
+            @Ts.prim_func
             def scale_tir(var_x: T.handle, var_out: T.handle):
                 n = T.int64()
                 x = T.match_buffer(var_x, (n,), "float32")
@@ -531,7 +532,7 @@ tensors at call time, so the same module handles different sizes without recompi
 
 
 
-.. GENERATED FROM PYTHON SOURCE LINES 445-462
+.. GENERATED FROM PYTHON SOURCE LINES 446-463
 
 Summary
 -------
diff --git a/docs/_sources/how_to/tutorials/sg_execution_times.rst b/docs/_sources/how_to/tutorials/sg_execution_times.rst
index c97867edfb9..309bf8d7936 100644
--- a/docs/_sources/how_to/tutorials/sg_execution_times.rst
+++ b/docs/_sources/how_to/tutorials/sg_execution_times.rst
@@ -6,7 +6,7 @@
 
 Computation times
 =================
-**00:13.039** total execution time for 8 files **from how_to/tutorials**:
+**00:13.306** total execution time for 8 files **from how_to/tutorials**:
 
 .. container::
 
@@ -33,25 +33,25 @@ Computation times
      - Time
      - Mem (MB)
    * - :ref:`sphx_glr_how_to_tutorials_optimize_llm.py` (``optimize_llm.py``)
-     - 00:08.332
+     - 00:08.304
      - 0.0
    * - :ref:`sphx_glr_how_to_tutorials_import_model.py` (``import_model.py``)
-     - 00:03.304
+     - 00:03.325
      - 0.0
    * - :ref:`sphx_glr_how_to_tutorials_e2e_opt_model.py` (``e2e_opt_model.py``)
-     - 00:00.597
+     - 00:00.876
      - 0.0
    * - :ref:`sphx_glr_how_to_tutorials_cross_compilation_and_rpc.py` (``cross_compilation_and_rpc.py``)
-     - 00:00.482
+     - 00:00.475
      - 0.0
    * - :ref:`sphx_glr_how_to_tutorials_customize_opt.py` (``customize_opt.py``)
-     - 00:00.294
+     - 00:00.297
      - 0.0
    * - :ref:`sphx_glr_how_to_tutorials_bring_your_own_codegen.py` (``bring_your_own_codegen.py``)
-     - 00:00.023
+     - 00:00.024
      - 0.0
    * - :ref:`sphx_glr_how_to_tutorials_mix_python_and_tvm_with_pymodule.py` (``mix_python_and_tvm_with_pymodule.py``)
-     - 00:00.005
+     - 00:00.004
      - 0.0
    * - :ref:`sphx_glr_how_to_tutorials_export_and_load_executable.py` (``export_and_load_executable.py``)
      - 00:00.002
diff --git a/docs/_sources/sg_execution_times.rst b/docs/_sources/sg_execution_times.rst
index 8b9b9469397..4d9b5df619c 100644
--- a/docs/_sources/sg_execution_times.rst
+++ b/docs/_sources/sg_execution_times.rst
@@ -6,7 +6,7 @@
 
 Computation times
 =================
-**00:19.196** total execution time for 16 files **from all galleries**:
+**00:19.454** total execution time for 16 files **from all galleries**:
 
 .. container::
 
@@ -33,49 +33,49 @@ Computation times
      - Time
      - Mem (MB)
    * - :ref:`sphx_glr_how_to_tutorials_optimize_llm.py` (``../how_to/tutorials/optimize_llm.py``)
-     - 00:08.332
+     - 00:08.304
      - 0.0
    * - :ref:`sphx_glr_get_started_tutorials_ir_module.py` (``../get_started/tutorials/ir_module.py``)
-     - 00:05.339
+     - 00:05.336
      - 0.0
    * - :ref:`sphx_glr_how_to_tutorials_import_model.py` (``../how_to/tutorials/import_model.py``)
-     - 00:03.304
+     - 00:03.325
      - 0.0
    * - :ref:`sphx_glr_how_to_tutorials_e2e_opt_model.py` (``../how_to/tutorials/e2e_opt_model.py``)
-     - 00:00.597
+     - 00:00.876
      - 0.0
    * - :ref:`sphx_glr_how_to_tutorials_cross_compilation_and_rpc.py` (``../how_to/tutorials/cross_compilation_and_rpc.py``)
-     - 00:00.482
+     - 00:00.475
      - 0.0
    * - :ref:`sphx_glr_how_to_tutorials_customize_opt.py` (``../how_to/tutorials/customize_opt.py``)
-     - 00:00.294
+     - 00:00.297
      - 0.0
    * - :ref:`sphx_glr_deep_dive_tensor_ir_tutorials_tir_transformation.py` (``../deep_dive/tensor_ir/tutorials/tir_transformation.py``)
-     - 00:00.262
+     - 00:00.259
      - 0.0
    * - :ref:`sphx_glr_get_started_tutorials_quick_start.py` (``../get_started/tutorials/quick_start.py``)
-     - 00:00.160
+     - 00:00.158
      - 0.0
    * - :ref:`sphx_glr_deep_dive_tensor_ir_tutorials_tir_creation.py` (``../deep_dive/tensor_ir/tutorials/tir_creation.py``)
-     - 00:00.130
+     - 00:00.128
      - 0.0
    * - :ref:`sphx_glr_deep_dive_tensor_ir_tutorials_dlight_gpu_scheduling.py` (``../deep_dive/tensor_ir/tutorials/dlight_gpu_scheduling.py``)
-     - 00:00.124
+     - 00:00.125
      - 0.0
    * - :ref:`sphx_glr_deep_dive_relax_tutorials_relax_creation.py` (``../deep_dive/relax/tutorials/relax_creation.py``)
-     - 00:00.079
+     - 00:00.080
      - 0.0
    * - :ref:`sphx_glr_deep_dive_relax_tutorials_relax_transformation.py` (``../deep_dive/relax/tutorials/relax_transformation.py``)
      - 00:00.054
      - 0.0
    * - :ref:`sphx_glr_how_to_tutorials_bring_your_own_codegen.py` (``../how_to/tutorials/bring_your_own_codegen.py``)
-     - 00:00.023
+     - 00:00.024
      - 0.0
    * - :ref:`sphx_glr_deep_dive_tensor_ir_tutorials_meta_schedule.py` (``../deep_dive/tensor_ir/tutorials/meta_schedule.py``)
      - 00:00.008
      - 0.0
    * - :ref:`sphx_glr_how_to_tutorials_mix_python_and_tvm_with_pymodule.py` (``../how_to/tutorials/mix_python_and_tvm_with_pymodule.py``)
-     - 00:00.005
+     - 00:00.004
      - 0.0
    * - :ref:`sphx_glr_how_to_tutorials_export_and_load_executable.py` (``../how_to/tutorials/export_and_load_executable.py``)
      - 00:00.002
diff --git a/docs/arch/tvmscript.html b/docs/arch/tvmscript.html
index e0f5710602b..8b033b436ce 100644
--- a/docs/arch/tvmscript.html
+++ b/docs/arch/tvmscript.html
@@ -630,43 +630,11 @@ document.write(`
             </div>
             <nav aria-label="Page">
                 <ul class="visible nav section-nav flex-column">
-<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#overview">Overview</a></li>
-<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#decorators">Decorators</a></li>
-<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#parser-architecture">Parser Architecture</a><ul class="visible nav section-nav flex-column">
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#syntax-and-construction-protocol">Syntax and construction protocol</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#parse-flow">Parse flow</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#definition-and-symbol-scopes">Definition and symbol scopes</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#explicit-host-control-flow">Explicit host control flow</a></li>
-</ul>
-</li>
-<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#ir-builder-architecture">IR Builder Architecture</a><ul class="visible nav section-nav flex-column">
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#frame-stack">Frame stack</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#tir-builder">TIR builder</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#relax-builder">Relax builder</a></li>
-</ul>
-</li>
-<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#printer-architecture">Printer Architecture</a><ul class="visible nav section-nav flex-column">
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#doc-tree">Doc tree</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#irdocsifier">IRDocsifier</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#roundtrip">Roundtrip</a></li>
-</ul>
-</li>
-<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#supported-python-syntax">Supported Python Syntax</a></li>
-<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#tir-syntax-reference">TIR Syntax Reference</a><ul class="visible nav section-nav flex-column">
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#function-definition">Function definition</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#block-and-axes">Block and axes</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#loop-types">Loop types</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#buffer-operations">Buffer operations</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#common-intrinsics">Common intrinsics</a></li>
-</ul>
-</li>
-<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#relax-syntax-reference">Relax Syntax Reference</a><ul class="visible nav section-nav flex-column">
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#id1">Function definition</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#dataflow-blocks">Dataflow blocks</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#calling-tir-functions">Calling TIR functions</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#control-flow">Control flow</a></li>
-</ul>
-</li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#source-and-frontend">Source and frontend</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#syntax-and-construction-protocol">Syntax and construction protocol</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#frame-based-construction">Frame-based construction</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#printing-and-round-trips">Printing and round trips</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#namespace-extension">Namespace extension</a></li>
 </ul>
             </nav>
         </div>
@@ -680,650 +648,90 @@ document.write(`
                   
   <section id="tvmscript">
 <span id="tvmscript-arch"></span><h1>TVMScript<a class="headerlink" href="#tvmscript" title="Link to this heading">#</a></h1>
-<p>TVMScript is a Python-based domain-specific language (DSL) for writing TVM IR. It lets users
-define <code class="docutils literal notranslate"><span class="pre">IRModule</span></code>s — containing both Relax functions and TIR <code class="docutils literal notranslate"><span class="pre">PrimFunc</span></code>s — using
-familiar Python syntax. Decorators acquire the source and its definition context. A syntax
-transpiler translates the Python AST into a Python builder program; executing that program
-constructs TVM IR. The scripted function body is therefore translated before execution.</p>
-<p>TVMScript serves two roles in the TVM stack:</p>
-<ul class="simple">
-<li><p><strong>Authoring</strong>: users write TIR kernels and Relax programs directly in TVMScript.</p></li>
-<li><p><strong>Roundtrip</strong>: <code class="docutils literal notranslate"><span class="pre">mod.script()</span></code> prints IR as TVMScript, which can be re-parsed with any
-required external symbols to reconstruct equivalent IR. This supports inspection,
-debugging, and serialization of printable IR.</p></li>
-</ul>
-<section id="overview">
-<h2>Overview<a class="headerlink" href="#overview" title="Link to this heading">#</a></h2>
-<p>TVMScript separates source acquisition, syntax translation, IR construction, and printing:</p>
-<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>Parsing (Python source → TVM IR):
-
-Python source (TVMScript)
-     │
-     ▼  Frontend: source + definition context
-     │
-Python AST
-     │
-     ▼  Syntax transpiler + construction protocol
-     │
-Generated Python builder program
-     │
-     ▼  Frontend: recompose and execute callable
-     │
-     ▼  IR builders (frame stack + dialect policy)
-     │
-TVM IR (IRModule, PrimFunc, relax.Function)
-
-
-Printing (TVM IR → Python source):
-
+<p>TVMScript expresses TVM IR with Python syntax. A shared frontend translates source
+into a Python builder program; executing that program constructs IR. A separate
+printer converts IR back into readable, parseable source.</p>
+<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>Source + definition context
+    → Python AST → syntax transpiler → Python builder program → TVM IR
 TVM IR
-     │
-     ▼  IRDocsifier (C++, dispatch by token + type)
-     │
-Doc tree (ExprDoc, StmtDoc, ...)
-     │
-     ▼  DocToPythonScript
-     │
-TVMScript text
+    → IRDocsifier → Doc tree → Python text
 </pre></div>
 </div>
-<ul class="simple">
-<li><p><strong>Frontend</strong> (Python): captures definition context, acquires source, and composes the
-generated callable with its lexical environment. It owns decorators, helper entry points,
-and execution of the builder program.</p></li>
-<li><p><strong>Syntax transpiler</strong> (Python): rewrites Python AST nodes into calls on the selected
-construction namespace. It preserves source scopes, evaluation order, and locations.</p></li>
-<li><p><strong>IR builders</strong> (Python + C++): own typed values, symbol identity, dialect policy, and
-construction frames. Exiting a frame finalizes its IR and attaches it to its parent.</p></li>
-<li><p><strong>Printer</strong> (C++): converts IR to a <code class="docutils literal notranslate"><span class="pre">Doc</span></code> tree and formats it as Python syntax. The
-printer’s Doc tree is separate from the Python AST used for parsing.</p></li>
-</ul>
-<p>All source entry points use the canonical <code class="docutils literal notranslate"><span class="pre">tvm.script.parser</span></code> implementation.</p>
+<section id="source-and-frontend">
+<h2>Source and frontend<a class="headerlink" href="#source-and-frontend" title="Link to this heading">#</a></h2>
+<p><code class="docutils literal notranslate"><span class="pre">tvm.script.parser</span></code> accepts Python functions, classes and source strings through
+public decorators, <code class="docutils literal notranslate"><span class="pre">tvm.script.parse</span></code> and <code class="docutils literal notranslate"><span class="pre">tvm.script.from_source</span></code>. The frontend
+acquires source and locations, captures the definition’s globals and closure bindings,
+and composes the generated callable with that environment. String callers provide
+external bindings through <code class="docutils literal notranslate"><span class="pre">extra_vars</span></code>.</p>
+<p>Standalone function decorators construct IR immediately. Within an IR-module class,
+function decorators retain definitions until module construction, which can declare
+signatures before building bodies. Captured Python values belong to the source
+context; symbolic IR values are created and resolved by builders.</p>
 </section>
-<section id="decorators">
-<h2>Decorators<a class="headerlink" href="#decorators" title="Link to this heading">#</a></h2>
-<p>TVMScript uses three import aliases by convention:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">ir</span> <span class="k">as</span> <span class="n">I</span>       <span class="c1"># module-level constructs</span>
-<span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">tirx</span> <span class="k">as</span> <span class="n">T</span>     <span class="c1"># TIR constructs</span>
-<span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">relax</span> <span class="k">as</span> <span class="n">R</span>    <span class="c1"># Relax constructs</span>
-<span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script.parser.entry</span><span class="w"> </span><span class="kn">import</span> <span class="n">make_macro_decorator</span>
-<span class="kn">from</span><span class="w"> </span><span class="nn">tvm.target</span><span class="w"> </span><span class="kn">import</span> <span class="n">Target</span>
-</pre></div>
-</div>
-<p>These are public authoring APIs. <code class="docutils literal notranslate"><span class="pre">Target</span></code> configures compilation targets; it remains in
-<code class="docutils literal notranslate"><span class="pre">tvm.target</span></code>. Public dialect namespaces expose decorators and source constructors, so
-scripted programs do not need direct imports from builder implementation packages.</p>
-<p>The primary decorators are:</p>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">&#64;I.ir_module</span></code>: marks a Python class as an <code class="docutils literal notranslate"><span class="pre">IRModule</span></code>. Each method inside becomes a
-function in the module.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">&#64;T.prim_func</span></code>: marks a function as a TIR <code class="docutils literal notranslate"><span class="pre">PrimFunc</span></code>.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">&#64;R.function</span></code>: marks a function as a <code class="docutils literal notranslate"><span class="pre">relax.Function</span></code>.</p></li>
-</ul>
-<p>These can be composed:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="nd">@I</span><span class="o">.</span><span class="n">ir_module</span>
-<span class="k">class</span><span class="w"> </span><span class="nc">MyModule</span><span class="p">:</span>
-    <span class="nd">@T</span><span class="o">.</span><span class="n">prim_func</span><span class="p">(</span><span class="n">s_tir</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
-    <span class="k">def</span><span class="w"> </span><span class="nf">add_kernel</span><span class="p">(</span><span class="n">A</span><span class="p">:</span> <span class="n">T</span><span class="o">.</span><span class="n">Buffer</span><span class="p">((</span><span class="mi">128</span><span class="p">,),</span> <span class="s2">&quot;float32&quot;</span><span class="p">),</span>
-                   <span class="n">B</span><span class="p">:</span> <span class="n">T</span><span class="o">.</span><span class="n">Buffer</span><span class="p">((</span><span class="mi">128</span><span class="p">,),</span> <span class="s2">&quot;float32&quot;</span><span class="p">),</span>
-                   <span class="n">C</span><span class="p">:</span> <span class="n">T</span><span class="o">.</span><span class="n">Buffer</span><span class="p">((</span><span class="mi">128</span><span class="p">,),</span> <span class="s2">&quot;float32&quot;</span><span class="p">)):</span>
-        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">128</span><span class="p">):</span>
-            <span class="k">with</span> <span class="n">T</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;compute&quot;</span><span class="p">):</span>
-                <span class="n">vi</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
-                <span class="n">C</span><span class="p">[</span><span class="n">vi</span><span class="p">]</span> <span class="o">=</span> <span class="n">A</span><span class="p">[</span><span class="n">vi</span><span class="p">]</span> <span class="o">+</span> <span class="n">B</span><span class="p">[</span><span class="n">vi</span><span class="p">]</span>
-
-    <span class="nd">@R</span><span class="o">.</span><span class="n">function</span>
-    <span class="k">def</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">x</span><span class="p">:</span> <span class="n">R</span><span class="o">.</span><span class="n">Tensor</span><span class="p">((</span><span class="mi">128</span><span class="p">,),</span> <span class="s2">&quot;float32&quot;</span><span class="p">),</span>
-             <span class="n">y</span><span class="p">:</span> <span class="n">R</span><span class="o">.</span><span class="n">Tensor</span><span class="p">((</span><span class="mi">128</span><span class="p">,),</span> <span class="s2">&quot;float32&quot;</span><span class="p">))</span> <span class="o">-&gt;</span> <span class="n">R</span><span class="o">.</span><span class="n">Tensor</span><span class="p">((</span><span class="mi">128</span><span class="p">,),</span> <span class="s2">&qu [...]
-        <span class="k">with</span> <span class="n">R</span><span class="o">.</span><span class="n">dataflow</span><span class="p">():</span>
-            <span class="n">out</span> <span class="o">=</span> <span class="n">R</span><span class="o">.</span><span class="n">call_tir</span><span class="p">(</span><span class="n">MyModule</span><span class="o">.</span><span class="n">add_kernel</span><span class="p">,</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">),</span>
-                             <span class="n">out_ty</span><span class="o">=</span><span class="n">R</span><span class="o">.</span><span class="n">Tensor</span><span class="p">((</span><span class="mi">128</span><span class="p">,),</span> <span class="s2">&quot;float32&quot;</span><span class="p">))</span>
-            <span class="n">R</span><span class="o">.</span><span class="n">output</span><span class="p">(</span><span class="n">out</span><span class="p">)</span>
-        <span class="k">return</span> <span class="n">out</span>
-</pre></div>
-</div>
-<p>Python creates the class before invoking <code class="docutils literal notranslate"><span class="pre">&#64;I.ir_module</span></code>. Function decorators inside an
-IR-module class retain method definitions for module construction. The module frontend then
-acquires the source and constructs declarations and bodies in the module’s builder context.
-Standalone <code class="docutils literal notranslate"><span class="pre">&#64;T.prim_func</span></code> and <code class="docutils literal notranslate"><span class="pre">&#64;R.function</span></code> definitions construct their IR immediately.</p>
-<p>A helper can construct expressions or statements in the caller’s active builder frames:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="nd">@make_macro_decorator</span><span class="p">(</span><span class="n">T</span><span class="p">)</span>
-<span class="k">def</span><span class="w"> </span><span class="nf">add_one</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
-    <span class="k">return</span> <span class="n">value</span> <span class="o">+</span> <span class="mi">1</span>
-</pre></div>
-</div>
-<p>Unlike a function decorator, <code class="docutils literal notranslate"><span class="pre">make_macro_decorator</span></code> does not create an IR function for
-each helper. Its default return behavior is ordinary Python return from the generated
-helper program.
-<code class="docutils literal notranslate"><span class="pre">T.inline</span></code> and the dialect macro decorators are supplied through the same frontend helper
-mechanism.</p>
-</section>
-<section id="parser-architecture">
-<h2>Parser Architecture<a class="headerlink" href="#parser-architecture" title="Link to this heading">#</a></h2>
-<p>The parser lives in <code class="docutils literal notranslate"><span class="pre">python/tvm/script/parser/</span></code>. <code class="docutils literal notranslate"><span class="pre">inspect_source.py</span></code> owns source
-acquisition, the <code class="docutils literal notranslate"><span class="pre">Source</span></code> representation and its coordinate helpers, and definition-context
-capture. Documented functions in <code class="docutils literal notranslate"><span class="pre">entry.py</span></code> manage the parse sequence, callable composition
-and execution.
-The transpiler handles syntax; the builders interpret concrete values. TIRx JIT validation,
-defaults and specialization caching live in <code class="docutils literal notranslate"><span class="pre">tvm.tirx.script.jit</span></code>; shared parser utilities
-remain independent of that policy.</p>
 <section id="syntax-and-construction-protocol">
-<h3>Syntax and construction protocol<a class="headerlink" href="#syntax-and-construction-protocol" title="Link to this heading">#</a></h3>
-<p>A registered function decorator selects a construction namespace. The same Python syntax
-then lowers to operations supplied by that namespace: for example, unmarked <code class="docutils literal notranslate"><span class="pre">if</span></code> creates
-TIR control-flow frames in a primitive function and Relax control-flow frames in a Relax
-function. The transpiler emits these operations without implementing dialect IR semantics.</p>
-<p><code class="docutils literal notranslate"><span class="pre">parser/protocol_registry.py</span></code> owns callable syntax metadata and registration. Argument policies such
-as <code class="docutils literal notranslate"><span class="pre">expr_str</span></code> translate symbolic strings written directly in source expressions.
-Global-info selectors use the builder decorator
-<a class="reference internal" href="../reference/api/python/script/ir_builder.html#tvm.script.ir_builder.resolve_global_info_args" title="tvm.script.ir_builder.resolve_global_info_args"><code class="xref py py-func docutils literal notranslate"><span class="pre">tvm.script.ir_builder.resolve_global_info_args()</span></code></a>, which resolves named string arguments
-through an explicit dialect callback after ordinary Python argument evaluation. Captured
-aliases and unpacked calls use the same decorator. Dtype and placement strings remain literal. Captured or computed symbolic shapes must already contain explicit IR variables;
-the parser does not interpret expression strings found inside captured values.
-Registration keeps syntax facts in simple dictionaries keyed by canonical namespace paths.
-Known namespace aliases normalize to the registered path; ordinary captured callables,
-local aliases, methods and closures execute as Python without marker inference. The
-dictionaries retain no source functions or parse captures. Dialects own their namespace
-exports, entry points and aliases and register them with the generic parser.
-The registry selects a call’s argument policy before traversal and reuses positional
-parameter names computed once at registration;
-<code class="docutils literal notranslate"><span class="pre">parser/expr_str_handling.py</span></code> decodes annotation/expression strings and maps their
-escaped, multiline and UTF-8 source ranges. The main visitor rewrites the decoded syntax.</p>
-<p>Assignments become binding operations, standalone expressions become emission operations,
-and loops and scopes become builder contexts. An ordinary assignment passes its evaluated
-RHS and a separate <code class="docutils literal notranslate"><span class="pre">value_span</span></code> to <code class="docutils literal notranslate"><span class="pre">bind_</span></code>, without first stamping the returned value.
-The binding target has its own span. TIRx preserves returned Vars, including BufferVars,
-and ordinary metadata objects; other expressions follow the dialect’s binding rules.
-Construction still runs in the source context, and nested expressions retain their locations.
-Concrete binding, type checking, comparison construction, and frame finalization belong to
-the builders. Ordinary host calls and
-operator overloads execute as part of the generated Python program.</p>
-<p>Loop frames create their named variables during construction. Entering a frame returns
-the variable directly for one dimension and the variable sequence for multiple dimensions,
-so ordinary Python uses <code class="docutils literal notranslate"><span class="pre">with</span> <span class="pre">T.serial(0,</span> <span class="pre">n)</span> <span class="pre">as</span> <span class="pre">i</span></code>. Generated scalar loops use the same
-entry form. Generated tuple, list and starred targets unpack the entered frame’s stable
-<code class="docutils literal notranslate"><span class="pre">vars</span></code> sequence, preserving explicit one-dimensional unpacking and native variable identity.</p>
-<p>Parser syntax restrictions raise <code class="docutils literal notranslate"><span class="pre">SyntaxError</span></code> with the original filename and source
-range. Python helper and builder exceptions propagate unchanged, preserving their identity,
-type and source-mapped traceback. Temporary parser contexts are released on both successful
-and exceptional exits.</p>
-</section>
-<section id="parse-flow">
-<h3>Parse flow<a class="headerlink" href="#parse-flow" title="Link to this heading">#</a></h3>
-<p>The public entry points include <code class="docutils literal notranslate"><span class="pre">tvm.script.parse</span></code> and <code class="docutils literal notranslate"><span class="pre">tvm.script.from_source</span></code>:</p>
-<ol class="arabic simple">
-<li><p><strong>Acquire source and context</strong>: the frontend accepts a function, class, or source string,
-obtains its Python AST, and retains source locations. Decorators capture the definition
-context temporarily through <code class="docutils literal notranslate"><span class="pre">definition_scope</span></code>; source-string callers can supply
-external bindings through <code class="docutils literal notranslate"><span class="pre">extra_vars</span></code>. Source inspection belongs to
-<code class="docutils literal notranslate"><span class="pre">parser.inspect_source</span></code>.</p></li>
-<li><p><strong>Prescan and translate syntax</strong>: acquisition supplies a fresh owned AST. One
-<code class="docutils literal notranslate"><span class="pre">PrescanCollector</span></code> produces read-only <code class="docutils literal notranslate"><span class="pre">PrescanContext</span></code> facts for reserved names,
-scoped declarations and conditional outputs. <code class="docutils literal notranslate"><span class="pre">IRBuilderTranspiler</span></code> rewrites that owned
-tree with the standard Python AST visitor, using fixed namespace metadata and registered
-argument policies without copying or reparsing the tree. One shared name allocator
-avoids collisions with user identifiers through rewriting and recomposition.</p></li>
-<li><p><strong>Compose the callable</strong>: the private frontend helper <code class="docutils literal notranslate"><span class="pre">_recompose_builder</span></code> compiles
-the generated program with the source’s globals, closure bindings, and necessary
-annotation context. Explicit temporary phase inputs connect generated helpers to
-their source functions without rediscovering them through a generated-AST walk.</p></li>
-<li><p><strong>Execute construction</strong>: the callable enters native builder frames and reconstructs
-declarations and annotations in their required context. When forward declarations are
-needed, it declares all signatures first. Inside each retained native function frame,
-it defines and calls a lexical body helper without an explicit frame argument. Re-entry
-uses the existing parameters instead of adding them again. Native frames own module
-references, results and function-local symbols.</p></li>
-<li><p><strong>Validate and return IR</strong>: generated code calls the dialect’s
-<code class="docutils literal notranslate"><span class="pre">X.check_well_formed_</span></code> for a completed function or the shared
-<code class="docutils literal notranslate"><span class="pre">I.check_well_formed_</span></code> for a completed module. Public parsing validates by default.
-Parsing owns execution and releases its temporary builder and captures afterward.</p></li>
-</ol>
-</section>
-<section id="definition-and-symbol-scopes">
-<h3>Definition and symbol scopes<a class="headerlink" href="#definition-and-symbol-scopes" title="Link to this heading">#</a></h3>
-<p>Python lexical bindings and DSL symbolic declarations have different owners. The frontend
-captures the exact definition scope during decoration, including enclosing names used only
-in annotations that Python may omit from the function’s closure. Ordinary body references
-retain their source globals and closure bindings. Unrelated callers’ local variables do not
-become part of this environment.</p>
-<p>Annotations are reconstructed as builder operations within the module/function context.
-The generated program preserves their definition scope and original names, using a
-distinct compiler binding only when a source-local binding would shadow the annotation.
-One prescan-seeded name allocator serves rewriting and callable recomposition. Body
-globals and closures retain their original lookup, including a method closure whose name
-also appears as a class member. Callable recomposition and
-lexical environment setup belong to the frontend. The transpiler preserves source scopes
-through Python syntax; it does not classify each name by membership in a runtime environment
-or search caller stacks for values.</p>
-<p>DSL expression strings such as <code class="docutils literal notranslate"><span class="pre">R.Tensor((&quot;n&quot;,</span> <span class="pre">4),</span> <span class="pre">&quot;float32&quot;)</span></code> use
-<code class="docutils literal notranslate"><span class="pre">X.resolve_type_var_(&quot;n&quot;)</span></code>, which delegates to the nearest native function frame’s
-<code class="docutils literal notranslate"><span class="pre">type_var_map</span></code>. Repeated names refer to the same symbol across parameters, return
-annotations and the body. Quoted lookup does not introduce a Python name; an explicit
-symbol declaration does. A Python name in <code class="docutils literal notranslate"><span class="pre">R.Tensor((n,</span> <span class="pre">4),</span> <span class="pre">...)</span></code> follows its source
-lexical scope. Relax global-info selectors use <code class="docutils literal notranslate"><span class="pre">R.resolve_global_info_</span></code> against the
-nearest active native module frame’s existing map. String selectors outside an active module
-raise, including when an unrelated builder is active. Concrete metadata objects retain identity.
-When defining Python functions before their module builder opens, quote the whole annotation
-or use <code class="docutils literal notranslate"><span class="pre">from</span> <span class="pre">__future__</span> <span class="pre">import</span> <span class="pre">annotations</span></code>; the parser reconstructs these annotations inside
-the module. Printed module function signatures containing selectors request postponed annotations.
-Eager printed class assignments, such as typed <code class="docutils literal notranslate"><span class="pre">R.ExternFunc</span></code> declarations, retrieve concrete
-virtual devices with <code class="docutils literal notranslate"><span class="pre">R.lookup_vdevice</span></code> because postponed annotations do not defer assignment
-values. This explicit lookup preserves the module metadata object before tensor construction.</p>
-<p>During rewriting, each needed source range becomes a fixed native span entry in an
-injected table. <code class="docutils literal notranslate"><span class="pre">_S[i](value)</span></code> attaches that location while preserving identity;
-<code class="docutils literal notranslate"><span class="pre">_S[i].ctx(lambda:</span> <span class="pre">helper(value))</span></code> evaluates the callee and arguments once within
-the source context and restores it on success or failure. Entries live in
-<code class="docutils literal notranslate"><span class="pre">ir_builder.base</span></code> and retain no AST or active caller context. Dynamic caller/definition
-provenance is composed when an entry is used. Ordinary names, Python literals, fixed
-namespace/callee lookup and structural indexing tuples need no entries. Arithmetic and
-buffer loads retain their own expression ranges.</p>
-<p>Generated hooks receive entries explicitly: <code class="docutils literal notranslate"><span class="pre">X.for_(X.range_(3),</span> <span class="pre">names=&quot;i&quot;,</span> <span class="pre">span=_S[i])</span></code>
-and <code class="docutils literal notranslate"><span class="pre">X.emit_(value,</span> <span class="pre">span=_S[j])</span></code> own their result locations. A callable registered with
-<code class="docutils literal notranslate"><span class="pre">result_span</span></code> promises that its complete IR effect is represented by its returned node
-or emission receipt, allowing result attachment without a construction context. Opaque
-helpers still require <code class="docutils literal notranslate"><span class="pre">.ctx</span></code> to locate internal effects. At an ordinary assignment boundary,
-<code class="docutils literal notranslate"><span class="pre">.ctx(...,</span> <span class="pre">attach_result=False)</span></code> preserves construction context while leaving the returned
-value’s attribution to <code class="docutils literal notranslate"><span class="pre">bind_</span></code> through its separate <code class="docutils literal notranslate"><span class="pre">value_span</span></code>.
-The parser-owned <a class="reference internal" href="../reference/api/python/script/parser.html#module-tvm.script.parser.protocol_registry" title="tvm.script.parser.protocol_registry"><code class="xref py py-mod docutils literal notranslate"><span class="pre">tvm.script.parser.protocol_registry</span></code></a> module defines registration APIs,
-metadata and persistent registration state. Dialects apply these policies beside concrete definitions,
-constructor creation or necessary exposure sites, without namespace scans or bulk
-registration inventories. Dialect <code class="docutils literal notranslate"><span class="pre">parser_protocol</span></code> modules implement construction hooks. The shared
-<a class="reference internal" href="../reference/api/python/script/ir_builder.html#module-tvm.script.ir_builder.parser_protocol" title="tvm.script.ir_builder.parser_protocol"><code class="xref py py-mod docutils literal notranslate"><span class="pre">tvm.script.ir_builder.parser_protocol</span></code></a> documents the detailed builder-hook contract and links
-to the registry for special syntax policies. Dialect hooks retain typed signatures and
-document only their specific behavior. For example, dialects import <code class="docutils literal notranslate"><span class="pre">args_policy</span></code>
-from <code class="docutils literal notranslate"><span class="pre">tvm.script.parser.protocol_registry</span></code> to register literal argument policies.</p>
-<p>Ordinary assignments pass returned values to <code class="docutils literal notranslate"><span class="pre">bind_</span></code>. TIRx Vars keep their exact identity,
-producer names and spans, including scope variables, block axes and explicit <code class="docutils literal notranslate"><span class="pre">T.bind</span></code>
-results. This behavior belongs to the builder’s value handling and requires no parser
-producer classification. Self-emitting builders return <code class="docutils literal notranslate"><span class="pre">AlreadyEmitted[T]</span></code> so
-source-location handling can annotate the emitted object without emitting it twice.
-Layout, meta_class and view results likewise follow dialect value handling for assignment
-and standalone statements. Unsupported host values still fail under the dialect’s emission
-rules. Expression-facing thread APIs return native Vars; IterVar remains native metadata.</p>
-<p>Simple comparison chains such as <code class="docutils literal notranslate"><span class="pre">0</span> <span class="pre">&lt;</span> <span class="pre">i</span> <span class="pre">&lt;</span> <span class="pre">10</span></code> lower to
-<code class="docutils literal notranslate"><span class="pre">X.and_(X.lt_(0,</span> <span class="pre">i),</span> <span class="pre">X.lt_(i,</span> <span class="pre">10))</span></code>. Only names and numeric literals, including signed
-literals, are supported in a chain. Complex chain operands fail with a source-located
-syntax error before they evaluate. Single comparisons retain general operands, and the
-explicit constexpr boundary retains Python comparison semantics.</p>
-<p>A bare loop target receives the native entry result: <code class="docutils literal notranslate"><span class="pre">for</span> <span class="pre">iters</span> <span class="pre">in</span> <span class="pre">T.grid(m,</span> <span class="pre">n)</span></code> binds
-the original variable sequence, while <code class="docutils literal notranslate"><span class="pre">for</span> <span class="pre">i</span> <span class="pre">in</span> <span class="pre">T.serial(n)</span></code> binds one Var. Explicit
-tuple, list and starred targets unpack the native frame’s stable <code class="docutils literal notranslate"><span class="pre">vars</span></code> field.</p>
-<p>Function decorators pass their construction namespace and options explicitly to parsing.
-Generated <code class="docutils literal notranslate"><span class="pre">X.function_(**options)</span></code> creates the frame; the dialect hook owns option defaults.
-Declaration creates stable references before function bodies; generated code reads the
-native <code class="docutils literal notranslate"><span class="pre">global_var</span></code> or <code class="docutils literal notranslate"><span class="pre">local_var</span></code> field directly, without a separate reservation pass.
-There is no function-registration record or copied source-function metadata. The root
-retains <code class="docutils literal notranslate"><span class="pre">pyfunc</span></code> behavior and original Python callables for module assembly.</p>
-<p>Completed modules use generic root coordination over dialect-owned validation hooks.
-Each dialect checks its members and cross-function requirements against the whole module,
-including captured members. Shared GlobalInfo construction and lookup belong to <code class="docutils literal notranslate"><span class="pre">tvm.ir</span></code>;
-existing Relax class exports and serialized type keys remain compatible.</p>
-<p>Each parse rewrites the fresh AST returned by source acquisition directly, without
-copying or reparsing it. Ordinary functions construct arguments directly and bind their
-known body parameters from <code class="docutils literal notranslate"><span class="pre">frame.params</span></code>. Specialization setup and conditional
-parameter selection are generated only for an explicit specialization request; an empty
-mapping still requests that path, while <code class="docutils literal notranslate"><span class="pre">None</span></code> selects ordinary parsing.</p>
-</section>
-<section id="explicit-host-control-flow">
-<h3>Explicit host control flow<a class="headerlink" href="#explicit-host-control-flow" title="Link to this heading">#</a></h3>
-<p>Mark compile-time Python selection with <code class="docutils literal notranslate"><span class="pre">I.constexpr</span></code> or the identical dialect alias:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">if</span> <span class="n">I</span><span class="o">.</span><span class="n">constexpr</span><span class="p">(</span><span class="n">enabled</span><span class="p">):</span>
-    <span class="n">T</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
-<span class="k">else</span><span class="p">:</span>
-    <span class="n">T</span><span class="o">.</span><span class="n">evaluate</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
-
-<span class="n">value</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">ramp</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">lanes</span><span class="p">)</span> <span class="k">if</span> <span class="n">T</span><span class="o">.</span><span class="n">constexpr</span><span class="p">(</span><span class="n">lanes</span> <span class="o">&gt;</span> [...]
-</pre></div>
-</div>
-<p>The marker applies to the controlling value. The generated program evaluates it once and
-executes only the selected Python branch in the existing builder scope. Branch bodies and
-result expressions still translate normally. Marked <code class="docutils literal notranslate"><span class="pre">and</span></code> and <code class="docutils literal notranslate"><span class="pre">or</span></code> decisions retain
-Python short-circuiting; unmarked conditionals and logical expressions call dialect IR
-constructors. A Python boolean alone does not request compile-time branch selection.</p>
-<p>JIT supplies validated specialization bindings and optional-argument absence to builder
-execution. Syntax translation does not inspect those values to select a branch.</p>
-</section>
-</section>
-<section id="ir-builder-architecture">
-<h2>IR Builder Architecture<a class="headerlink" href="#ir-builder-architecture" title="Link to this heading">#</a></h2>
-<p>The IR builder (<code class="docutils literal notranslate"><span class="pre">python/tvm/script/ir_builder/</span></code>, backed by C++ in <code class="docutils literal notranslate"><span class="pre">src/script/ir_builder/</span></code>)
-provides a frame-stack API for constructing IR incrementally.</p>
-<section id="frame-stack">
-<h3>Frame stack<a class="headerlink" href="#frame-stack" title="Link to this heading">#</a></h3>
-<p>The core idea: each IR scope (module, function, block, loop) is a <strong>frame</strong>. Frames are pushed
-on <code class="docutils literal notranslate"><span class="pre">__enter__</span></code> and popped on <code class="docutils literal notranslate"><span class="pre">__exit__</span></code>. When a frame exits, it finalizes the IR it
-represents and attaches it to the parent frame.</p>
-<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>IRBuilder (current construction context)
-└── frame stack:
-    ├── IRModuleFrame          ← @I.ir_module
-    │   ├── PrimFuncFrame      ← @T.prim_func
-    │   │   ├── ForFrame       ← T.grid(...) / T.serial(...)
-    │   │   │   └── SBlockFrame ← T.sblock(...)
-    │   │   └── ...
-    │   └── FunctionFrame      ← @R.function
-    │       └── BindingBlockFrame ← R.dataflow()
-    └── ...
-</pre></div>
-</div>
-<p>The generated program constructs IR by entering and exiting frames. Each frame owns its
-construction policy and finalization; the syntax transpiler does not maintain an IR tree.</p>
-</section>
-<section id="tir-builder">
-<h3>TIR builder<a class="headerlink" href="#tir-builder" title="Link to this heading">#</a></h3>
-<p>The TIR builder (<code class="docutils literal notranslate"><span class="pre">python/tvm/tirx/script/ir_builder/</span></code>) implements the construction operations
-behind public <code class="docutils literal notranslate"><span class="pre">T</span></code> syntax. Builder modules also support direct programmatic construction;
-public decorators and internal frame-opening operations have distinct roles. Key categories:</p>
-<p><strong>Function and block</strong>:</p>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">&#64;T.prim_func</span></code> selects TIR construction; its builder <code class="docutils literal notranslate"><span class="pre">function()</span></code> opens <code class="docutils literal notranslate"><span class="pre">PrimFuncFrame</span></code></p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">T.sblock(name)</span></code> → <code class="docutils literal notranslate"><span class="pre">SBlockFrame</span></code> (spatial block)</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">T.init()</span></code> → <code class="docutils literal notranslate"><span class="pre">BlockInitFrame</span></code> (reduction initialization)</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">T.reads(...)</span></code>, <code class="docutils literal notranslate"><span class="pre">T.writes(...)</span></code> → declare buffer access regions</p></li>
-</ul>
-<p><strong>Loops</strong>:</p>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">T.grid(*extents)</span></code> → <code class="docutils literal notranslate"><span class="pre">ForFrame</span></code> returning loop variables</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">T.serial(start,</span> <span class="pre">stop)</span></code>, <code class="docutils literal notranslate"><span class="pre">T.parallel(...)</span></code>, <code class="docutils literal notranslate"><span class="pre">T.vectorized(...)</span></code>,
-<code class="docutils literal notranslate"><span class="pre">T.unroll(...)</span></code>, <code class="docutils literal notranslate"><span class="pre">T.thread_binding(...)</span></code> → loop with specific iterator type</p></li>
-</ul>
-<p><strong>Block axes</strong>:</p>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">T.axis.spatial(dom,</span> <span class="pre">binding)</span></code> — spatial iteration axis</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">T.axis.reduce(dom,</span> <span class="pre">binding)</span></code> — reduction axis</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">T.axis.remap(kinds,</span> <span class="pre">bindings)</span></code> — shorthand for multiple axes</p></li>
-</ul>
-<p><strong>Buffers</strong>:</p>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">T.match_buffer(param,</span> <span class="pre">shape,</span> <span class="pre">dtype)</span></code> — match function parameter to buffer</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">T.alloc_buffer(shape,</span> <span class="pre">dtype)</span></code> — allocate intermediate buffer</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">T.Buffer(shape,</span> <span class="pre">dtype)</span></code> — buffer type annotation in function signatures</p></li>
-</ul>
-</section>
-<section id="relax-builder">
-<h3>Relax builder<a class="headerlink" href="#relax-builder" title="Link to this heading">#</a></h3>
-<p>The Relax builder (<code class="docutils literal notranslate"><span class="pre">python/tvm/relax/script/ir_builder/</span></code>) implements:</p>
-<p><strong>Function and dataflow</strong>:</p>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">&#64;R.function</span></code> selects Relax construction; its builder <code class="docutils literal notranslate"><span class="pre">function()</span></code> opens <code class="docutils literal notranslate"><span class="pre">FunctionFrame</span></code></p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">R.dataflow()</span></code> → <code class="docutils literal notranslate"><span class="pre">BindingBlockFrame</span></code></p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">R.output(*vars)</span></code> → expose variables from a dataflow block</p></li>
-</ul>
-<p><strong>Emit</strong>:</p>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">R.emit(value)</span></code> → emit a binding, returns a <code class="docutils literal notranslate"><span class="pre">Var</span></code></p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">R.emit_match_cast(value,</span> <span class="pre">ty)</span></code> → emit with type assertion</p></li>
-</ul>
-<p>Generated standalone-statement emission uses the construction protocol’s separate <code class="docutils literal notranslate"><span class="pre">emit_</span></code>
-operation. Public <code class="docutils literal notranslate"><span class="pre">R.emit</span></code> retains its binding-returning imperative API.</p>
-<p><strong>Type annotations</strong>:</p>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">R.Tensor(shape,</span> <span class="pre">dtype)</span></code> — tensor type</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">R.Tuple(*fields)</span></code> — tuple type</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">R.Shape(values)</span></code> — shape type</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">R.Any()</span></code> — any Relax value type</p></li>
-</ul>
-<p><strong>Calling conventions</strong>:</p>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">R.call_tir(func,</span> <span class="pre">args,</span> <span class="pre">out_ty)</span></code> — call a TIR function</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">R.call_packed(name,</span> <span class="pre">*args)</span></code> — call a PackedFunc</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">R.call_dps_packed(func,</span> <span class="pre">*args)</span></code> — call using destination-passing style</p></li>
-</ul>
-<p><strong>Operators</strong>: the <code class="docutils literal notranslate"><span class="pre">R</span></code> module also re-exports all Relax operators
-(<code class="docutils literal notranslate"><span class="pre">R.add</span></code>, <code class="docutils literal notranslate"><span class="pre">R.matmul</span></code>, <code class="docutils literal notranslate"><span class="pre">R.nn.conv2d</span></code>, etc.) so they can be used directly in TVMScript.</p>
-</section>
-</section>
-<section id="printer-architecture">
-<h2>Printer Architecture<a class="headerlink" href="#printer-architecture" title="Link to this heading">#</a></h2>
-<p>The printer converts TVM IR back to TVMScript text. It is implemented primarily in C++
-(<code class="docutils literal notranslate"><span class="pre">src/script/printer/</span></code>) for performance.</p>
-<section id="doc-tree">
-<h3>Doc tree<a class="headerlink" href="#doc-tree" title="Link to this heading">#</a></h3>
-<p>The printer does <strong>not</strong> generate text directly. Instead, it first builds a <code class="docutils literal notranslate"><span class="pre">Doc</span></code> tree — an
-intermediate representation that mirrors Python syntax:</p>
-<ul class="simple">
-<li><p><strong>Expression docs</strong>: <code class="docutils literal notranslate"><span class="pre">IdDoc</span></code>, <code class="docutils literal notranslate"><span class="pre">AttrAccessDoc</span></code>, <code class="docutils literal notranslate"><span class="pre">CallDoc</span></code>, <code class="docutils literal notranslate"><span class="pre">IndexDoc</span></code>,
-<code class="docutils literal notranslate"><span class="pre">OperationDoc</span></code>, <code class="docutils literal notranslate"><span class="pre">LiteralDoc</span></code>, <code class="docutils literal notranslate"><span class="pre">TupleDoc</span></code>, <code class="docutils literal notranslate"><span class="pre">ListDoc</span></code>, etc.</p></li>
-<li><p><strong>Statement docs</strong>: <code class="docutils literal notranslate"><span class="pre">AssignDoc</span></code>, <code class="docutils literal notranslate"><span class="pre">ForDoc</span></code>, <code class="docutils literal notranslate"><span class="pre">IfDoc</span></code>, <code class="docutils literal notranslate"><span class="pre">ScopeDoc</span></code> (<code class="docutils literal notranslate"><span class="pre">with</span></code> blocks),
-<code class="docutils literal notranslate"><span class="pre">FunctionDoc</span></code>, <code class="docutils literal notranslate"><span class="pre">ClassDoc</span></code>, <code class="docutils literal notranslate"><span class="pre">ReturnDoc</span></code>, <code class="docutils literal notranslate"><span class="pre">CommentDoc</span></code>, etc.</p></li>
-</ul>
-<p>For example, <code class="docutils literal notranslate"><span class="pre">T.axis.spatial(128,</span> <span class="pre">i)</span></code> is represented as:</p>
-<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>CallDoc(
-  callee=AttrAccessDoc(AttrAccessDoc(IdDoc(&quot;T&quot;), &quot;axis&quot;), &quot;spatial&quot;),
-  args=[LiteralDoc(128), IdDoc(&quot;i&quot;)]
-)
-</pre></div>
-</div>
-</section>
-<section id="irdocsifier">
-<h3>IRDocsifier<a class="headerlink" href="#irdocsifier" title="Link to this heading">#</a></h3>
-<p>The <code class="docutils literal notranslate"><span class="pre">IRDocsifier</span></code> (<code class="docutils literal notranslate"><span class="pre">include/tvm/script/printer/ir_docsifier.h</span></code>) is the main dispatcher.
-It maintains:</p>
-<ul class="simple">
-<li><p>A dispatch table mapping <code class="docutils literal notranslate"><span class="pre">(token,</span> <span class="pre">type_index)</span></code> pairs to converter functions.</p></li>
-<li><p>A frame stack for tracking the current scope (similar to the builder’s frame stack).</p></li>
-<li><p>A variable-to-name mapping to produce readable names.</p></li>
-</ul>
-<p>Each IR dialect registers its own converters:</p>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">src/tirx/script/printer/</span></code> — converts PrimFunc, Buffer, SBlock, loops, expressions.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">src/relax/script/printer/</span></code> — converts relax.Function, bindings, types, operators.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">src/script/printer/ir/</span></code> — converts IRModule, shared types.</p></li>
-</ul>
-<p>The final step calls <code class="docutils literal notranslate"><span class="pre">DocToPythonScript()</span></code> (<code class="docutils literal notranslate"><span class="pre">src/script/printer/doc_printer/python_doc_printer.cc</span></code>)
-to format the Doc tree into properly indented Python text.</p>
-</section>
-<section id="roundtrip">
-<h3>Roundtrip<a class="headerlink" href="#roundtrip" title="Link to this heading">#</a></h3>
-<p>For printable IR with the required source context available:</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">text</span> <span class="o">=</span> <span class="n">mod</span><span class="o">.</span><span class="n">script</span><span class="p">()</span>           <span class="c1"># IR → TVMScript text</span>
-<span class="n">reparsed</span> <span class="o">=</span> <span class="n">tvm</span><span class="o">.</span><span class="n">script</span><span class="o">.</span><span class="n">from_source</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>  <span class="c1"># text → IR</span>
-<span class="n">tvm</span><span class="o">.</span><span class="n">ir</span><span class="o">.</span><span class="n">assert_structural_equal</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="n">reparsed</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>This roundtrip property is relied upon by testing infrastructure and serialization workflows.
-Printed text uses canonical forms and may differ from hand-written TVMScript. External
-objects or Python attachments require their corresponding context; text alone does not
-serialize arbitrary Python state.</p>
-</section>
-</section>
-<section id="supported-python-syntax">
-<h2>Supported Python Syntax<a class="headerlink" href="#supported-python-syntax" title="Link to this heading">#</a></h2>
-<p>TVMScript supports a subset of Python syntax. The table below summarizes what is supported
-and how each construct is interpreted:</p>
-<div class="pst-scrollable-table-container"><table class="table">
-<colgroup>
-<col style="width: 25.0%" />
-<col style="width: 15.0%" />
-<col style="width: 60.0%" />
-</colgroup>
-<thead>
-<tr class="row-odd"><th class="head"><p>Python Syntax</p></th>
-<th class="head"><p>TIR</p></th>
-<th class="head"><p>Relax</p></th>
-</tr>
-</thead>
-<tbody>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">for</span> <span class="pre">i</span> <span class="pre">in</span> <span class="pre">range(n)</span></code></p></td>
-<td><p>Serial loop nest</p></td>
-<td><p>No Relax IR loop construction</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">with</span> <span class="pre">T.sblock(...)</span></code></p></td>
-<td><p>Spatial block scope</p></td>
-<td><p>N/A</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">with</span> <span class="pre">R.dataflow()</span></code></p></td>
-<td><p>N/A</p></td>
-<td><p>Dataflow block</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">if</span> <span class="pre">...</span> <span class="pre">else</span></code></p></td>
-<td><p>TIR <code class="docutils literal notranslate"><span class="pre">IfThenElse</span></code>; explicit <code class="docutils literal notranslate"><span class="pre">I.constexpr</span></code> selects a Python branch</p></td>
-<td><p>Relax <code class="docutils literal notranslate"><span class="pre">If</span></code>; explicit <code class="docutils literal notranslate"><span class="pre">I.constexpr</span></code> selects a Python branch</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">while</span></code></p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">T.While</span></code> loop</p></td>
-<td><p>Not supported</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">x</span> <span class="pre">=</span> <span class="pre">expr</span></code></p></td>
-<td><p>Variable binding</p></td>
-<td><p>Emit binding (implicit <code class="docutils literal notranslate"><span class="pre">R.emit</span></code>)</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">x:</span> <span class="pre">T.Buffer(...)</span></code></p></td>
-<td><p>Buffer annotation</p></td>
-<td><p>N/A</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">x:</span> <span class="pre">R.Tensor(...)</span></code></p></td>
-<td><p>N/A</p></td>
-<td><p>Type annotation</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">return</span></code></p></td>
-<td><p>Primitive return expression</p></td>
-<td><p>Function return value</p></td>
-</tr>
-<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">A[i,</span> <span class="pre">j]</span></code></p></td>
-<td><p>Buffer load</p></td>
-<td><p>Not applicable (use operators)</p></td>
-</tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">A[i,</span> <span class="pre">j]</span> <span class="pre">=</span> <span class="pre">expr</span></code></p></td>
-<td><p>Buffer store</p></td>
-<td><p>Not applicable</p></td>
-</tr>
-<tr class="row-odd"><td><p>Arithmetic (<code class="docutils literal notranslate"><span class="pre">+</span></code>, <code class="docutils literal notranslate"><span class="pre">-</span></code>, etc.)</p></td>
-<td><p>PrimExpr operations</p></td>
-<td><p>Calls to Relax operators</p></td>
-</tr>
-<tr class="row-even"><td><p>Function calls</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">T.*</span></code> intrinsics</p></td>
-<td><p><code class="docutils literal notranslate"><span class="pre">R.*</span></code> operators or <code class="docutils literal notranslate"><span class="pre">call_tir</span></code> / <code class="docutils literal notranslate"><span class="pre">call_packed</span></code></p></td>
-</tr>
-</tbody>
-</table>
-</div>
-<p>Inside scripted function bodies, unsupported statement forms include <code class="docutils literal notranslate"><span class="pre">class</span></code>,
-<code class="docutils literal notranslate"><span class="pre">try/except</span></code>, <code class="docutils literal notranslate"><span class="pre">import</span></code>, and <code class="docutils literal notranslate"><span class="pre">global</span></code>. <code class="docutils literal notranslate"><span class="pre">yield</span></code> and <code class="docutils literal notranslate"><span class="pre">async/await</span></code> are also unsupported.
-Place imports and ordinary Python class definitions in the surrounding Python program.</p>
-</section>
-<section id="tir-syntax-reference">
-<h2>TIR Syntax Reference<a class="headerlink" href="#tir-syntax-reference" title="Link to this heading">#</a></h2>
-<section id="function-definition">
-<h3>Function definition<a class="headerlink" href="#function-definition" title="Link to this heading">#</a></h3>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="nd">@T</span><span class="o">.</span><span class="n">prim_func</span>
-<span class="k">def</span><span class="w"> </span><span class="nf">func_name</span><span class="p">(</span><span class="n">a</span><span class="p">:</span> <span class="n">T</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">b</span><span class="p">:</span> <span class="n">T</span><span class="o">.</span><span class="n">handle</span><span class="p">):</span>
-    <span class="n">m</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">int32</span><span class="p">()</span>
-    <span class="n">n</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">int32</span><span class="p">()</span>
-    <span class="n">A</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">match_buffer</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="n">n</span><span class="p">),</span> <span class="s2">&quot;float32&quot;</span><span class="p">)</span>
-    <span class="n">B</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">match_buffer</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="p">(</span><span class="n">m</span><span class="p">,),</span> <span class="s2">&quot;float32&quot;</span><span class="p">)</span>
-    <span class="c1"># function body</span>
-</pre></div>
-</div>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">T.handle</span></code> — opaque handle parameter (matched to a buffer inside the function).</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">T.Buffer(shape,</span> <span class="pre">dtype)</span></code> — can also be used directly in the signature:
-<code class="docutils literal notranslate"><span class="pre">def</span> <span class="pre">func(A:</span> <span class="pre">T.Buffer((128,),</span> <span class="pre">&quot;float32&quot;))</span></code>.</p></li>
-</ul>
-</section>
-<section id="block-and-axes">
-<h3>Block and axes<a class="headerlink" href="#block-and-axes" title="Link to this heading">#</a></h3>
-<p>Use <code class="docutils literal notranslate"><span class="pre">&#64;T.prim_func(s_tir=True)</span></code> for functions with scheduled-TIR blocks and block axes.</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">T</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">):</span>
-    <span class="k">with</span> <span class="n">T</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;block_name&quot;</span><span class="p">):</span>
-        <span class="n">vi</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
-        <span class="n">vj</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span>
-        <span class="n">T</span><span class="o">.</span><span class="n">reads</span><span class="p">(</span><span class="n">A</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">])</span>
-        <span class="n">T</span><span class="o">.</span><span class="n">writes</span><span class="p">(</span><span class="n">B</span><span class="p">[</span><span class="n">vi</span><span class="p">])</span>
-        <span class="c1"># compute</span>
-</pre></div>
-</div>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">T.axis.spatial</span></code> / <code class="docutils literal notranslate"><span class="pre">T.axis.reduce</span></code> / <code class="docutils literal notranslate"><span class="pre">T.axis.scan</span></code> — declare axis variables with
-their iteration domain and binding to outer loop variables.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">T.axis.remap(&quot;SR&quot;,</span> <span class="pre">[i,</span> <span class="pre">j])</span></code> — shorthand: <code class="docutils literal notranslate"><span class="pre">S</span></code> = spatial, <code class="docutils literal notranslate"><span class="pre">R</span></code> = reduce.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">T.reads(...)</span></code>, <code class="docutils literal notranslate"><span class="pre">T.writes(...)</span></code> — declare buffer regions accessed by this block.</p></li>
-</ul>
-</section>
-<section id="loop-types">
-<h3>Loop types<a class="headerlink" href="#loop-types" title="Link to this heading">#</a></h3>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">T</span><span class="o">.</span><span class="n">serial</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">128</span><span class="p">):</span>          <span class="c1"># sequential</span>
-<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">T</span><span class="o">.</span><span class="n">parallel</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">128</span><span class="p">):</span>        <span class="c1"># parallel</span>
-<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">T</span><span class="o">.</span><span class="n">vectorized</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">128</span><span class="p">):</span>      <span class="c1"># vectorized</span>
-<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">T</span><span class="o">.</span><span class="n">unroll</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">128</span><span class="p">):</span>          <span class="c1"># unrolled</span>
-<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">T</span><span class="o">.</span><span class="n">thread_binding</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">128</span><span class="p">,</span> <span class="n">thread</span><span class="o">=</span><span class="s2">&quot;threadIdx.x&quot;</span><span class="p">):</span>  <span class="c1"># GPU thread</span>
-</pre></div>
-</div>
-</section>
-<section id="buffer-operations">
-<h3>Buffer operations<a class="headerlink" href="#buffer-operations" title="Link to this heading">#</a></h3>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">C</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">alloc_buffer</span><span class="p">((</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">),</span> <span class="s2">&quot;float32&quot;</span><span class="p">)</span>  <span class="c1"># intermediate buffer</span>
-<span class="n">val</span> <span class="o">=</span> <span class="n">A</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">]</span>                               <span class="c1"># buffer load</span>
-<span class="n">B</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span> <span class="o">+</span> <span class="mf">1.0</span>                            <span class="c1"># buffer store</span>
-</pre></div>
-</div>
-</section>
-<section id="common-intrinsics">
-<h3>Common intrinsics<a class="headerlink" href="#common-intrinsics" title="Link to this heading">#</a></h3>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">T</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="n">T</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="n">T</span><span class="o">.</span><span class="n">sqrt</span><span class="p">(</span><span class="n [...]
-<span class="n">T</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="s2">&quot;float16&quot;</span><span class="p">)</span>                              <span class="c1"># type cast</span>
-<span class="n">T</span><span class="o">.</span><span class="n">if_then_else</span><span class="p">(</span><span class="n">cond</span><span class="p">,</span> <span class="n">true_val</span><span class="p">,</span> <span class="n">false_val</span><span class="p">)</span>          <span class="c1"># conditional expression</span>
-<span class="n">T</span><span class="o">.</span><span class="n">min</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">),</span> <span class="n">T</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>                           <span class="c1"># min/max</span>
-<span class="n">T</span><span class="o">.</span><span class="n">call_extern</span><span class="p">(</span><span class="s2">&quot;int32&quot;</span><span class="p">,</span> <span class="s2">&quot;func_name&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>                  <span class="c1"># external function call</span>
-<span class="n">T</span><span class="o">.</span><span class="n">call_packed</span><span class="p">(</span><span class="s2">&quot;func_name&quot;</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>                   <span class="c1"># packed function call</span>
-<span class="n">T</span><span class="o">.</span><span class="n">tvm_storage_sync</span><span class="p">(</span><span class="s2">&quot;shared&quot;</span><span class="p">)</span>                        <span class="c1"># GPU memory fence</span>
-</pre></div>
-</div>
-</section>
-</section>
-<section id="relax-syntax-reference">
-<h2>Relax Syntax Reference<a class="headerlink" href="#relax-syntax-reference" title="Link to this heading">#</a></h2>
-<section id="id1">
-<h3>Function definition<a class="headerlink" href="#id1" title="Link to this heading">#</a></h3>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="nd">@R</span><span class="o">.</span><span class="n">function</span>
-<span class="k">def</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">x</span><span class="p">:</span> <span class="n">R</span><span class="o">.</span><span class="n">Tensor</span><span class="p">((</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">),</span> <span class="s2">&quot;float32&quot;</span><span class="p">),</span>
-         <span class="n">y</span><span class="p">:</span> <span class="n">R</span><span class="o">.</span><span class="n">Tensor</span><span class="p">((</span><span class="mi">128</span><span class="p">,),</span> <span class="s2">&quot;float32&quot;</span><span class="p">))</span> <span class="o">-&gt;</span> <span class="n">R</span><span class="o">.</span><span class="n">Tensor</span><span class="p">((</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span [...]
-    <span class="c1"># function body</span>
-    <span class="k">return</span> <span class="n">result</span>
-</pre></div>
-</div>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">R.Tensor(shape,</span> <span class="pre">dtype)</span></code> — tensor type annotation.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">R.Tuple(...)</span></code>, <code class="docutils literal notranslate"><span class="pre">R.Shape(...)</span></code>, <code class="docutils literal notranslate"><span class="pre">R.Any()</span></code> — other Relax type annotations.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">R.function(private=True)</span></code> — marks the function as module-private.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">R.function(pure=False)</span></code> — marks the function as having side effects.</p></li>
-</ul>
+<h2>Syntax and construction protocol<a class="headerlink" href="#syntax-and-construction-protocol" title="Link to this heading">#</a></h2>
+<p>The syntax transpiler rewrites a fresh Python AST using scope and declaration facts
+from a prescan. A registered decorator selects the construction namespace. Assignments
+call binding hooks, expression statements call emission hooks, and control flow opens
+builder frames. The namespace owns the meaning of these operations and the supported
+IR constructs.</p>
+<p><code class="docutils literal notranslate"><span class="pre">tvm.script.parser.protocol_registry</span></code> records syntax policies under registered
+namespace paths. These policies identify declarations and arguments that need special
+handling, such as symbolic expression strings. Source aliases resolve to those paths;
+ordinary Python calls remain calls in the generated program. Explicit <code class="docutils literal notranslate"><span class="pre">constexpr</span></code>
+markers select host control flow during construction.</p>
+<p>Generated operations retain source locations. Syntax restrictions raise source-located
+<code class="docutils literal notranslate"><span class="pre">SyntaxError</span></code> exceptions; builder and Python helper errors retain their original
+exception types. Temporary parse state is released when construction finishes or fails.</p>
 </section>
-<section id="dataflow-blocks">
-<h3>Dataflow blocks<a class="headerlink" href="#dataflow-blocks" title="Link to this heading">#</a></h3>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">with</span> <span class="n">R</span><span class="o">.</span><span class="n">dataflow</span><span class="p">():</span>
-    <span class="n">lv0</span> <span class="o">=</span> <span class="n">R</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
-    <span class="n">lv1</span> <span class="o">=</span> <span class="n">R</span><span class="o">.</span><span class="n">nn</span><span class="o">.</span><span class="n">relu</span><span class="p">(</span><span class="n">lv0</span><span class="p">)</span>
-    <span class="n">R</span><span class="o">.</span><span class="n">output</span><span class="p">(</span><span class="n">lv1</span><span class="p">)</span>
-</pre></div>
-</div>
-<p>Variables inside a <code class="docutils literal notranslate"><span class="pre">R.dataflow()</span></code> block are local to that block. <code class="docutils literal notranslate"><span class="pre">R.output(...)</span></code> exposes
-variables to the outer scope.</p>
+<section id="frame-based-construction">
+<h2>Frame-based construction<a class="headerlink" href="#frame-based-construction" title="Link to this heading">#</a></h2>
+<p>The IR builder maintains an active stack of frames, such as module, function and loop
+frames. Entering a frame establishes its scope; exiting finalizes its IR and attaches it
+to its parent. Frames own parameters, symbols and construction state. Builder hooks own
+value binding, type rules and validation of completed IR. The shared
+<code class="docutils literal notranslate"><span class="pre">resolve_global_info_args</span></code> decorator resolves named metadata arguments after
+ordinary Python argument evaluation; dialect callbacks own selector syntax and
+lookup in the active module.</p>
+<p>Public script namespaces expose decorators and construction operations. The same
+underlying builders can also be used directly from Python. The transpiler therefore
+needs no separate mutable IR representation: it generates calls to this construction
+protocol.</p>
 </section>
-<section id="calling-tir-functions">
-<h3>Calling TIR functions<a class="headerlink" href="#calling-tir-functions" title="Link to this heading">#</a></h3>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">out</span> <span class="o">=</span> <span class="n">R</span><span class="o">.</span><span class="n">call_tir</span><span class="p">(</span><span class="n">MyModule</span><span class="o">.</span><span class="n">my_kernel</span><span class="p">,</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">),</span> <span class="n">out [...]
-</pre></div>
-</div>
-<ul class="simple">
-<li><p><code class="docutils literal notranslate"><span class="pre">MyModule.my_kernel</span></code> — references a TIR <code class="docutils literal notranslate"><span class="pre">PrimFunc</span></code> in the same module.</p></li>
-<li><p><code class="docutils literal notranslate"><span class="pre">out_ty</span></code> — the type (shape and dtype) of the output tensor.</p></li>
-</ul>
-</section>
-<section id="control-flow">
-<h3>Control flow<a class="headerlink" href="#control-flow" title="Link to this heading">#</a></h3>
-<p>Relax <code class="docutils literal notranslate"><span class="pre">if</span></code> uses plain Python <code class="docutils literal notranslate"><span class="pre">if</span></code> syntax. The condition must be a Relax variable with
-boolean type. Both branches are required.</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="nd">@R</span><span class="o">.</span><span class="n">function</span>
-<span class="k">def</span><span class="w"> </span><span class="nf">f</span><span class="p">(</span><span class="n">cond</span><span class="p">:</span> <span class="n">R</span><span class="o">.</span><span class="n">Tensor</span><span class="p">((),</span> <span class="s2">&quot;bool&quot;</span><span class="p">),</span> <span class="n">x</span><span class="p">:</span> <span class="n">R</span><span class="o">.</span><span class="n">Tensor</span><span class="p">((</span><span class="mi">12 [...]
-    <span class="k">if</span> <span class="n">cond</span><span class="p">:</span>
-        <span class="n">result</span> <span class="o">=</span> <span class="n">R</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
-    <span class="k">else</span><span class="p">:</span>
-        <span class="n">result</span> <span class="o">=</span> <span class="n">R</span><span class="o">.</span><span class="n">multiply</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
-    <span class="k">return</span> <span class="n">result</span>
+<section id="printing-and-round-trips">
+<h2>Printing and round trips<a class="headerlink" href="#printing-and-round-trips" title="Link to this heading">#</a></h2>
+<p><code class="docutils literal notranslate"><span class="pre">IRDocsifier</span></code> dispatches on IR types and context to produce a <code class="docutils literal notranslate"><span class="pre">Doc</span></code> tree of
+expressions and statements. It tracks scopes and names; <code class="docutils literal notranslate"><span class="pre">DocToPythonScript</span></code> formats
+the tree as Python text. This document tree is separate from the parser’s Python AST.</p>
+<p>For example, a small function can be authored, printed and parsed again:</p>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">tvm</span>
+<span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">tirx</span> <span class="k">as</span> <span class="n">T</span>
+
+<span class="nd">@T</span><span class="o">.</span><span class="n">prim_func</span>
+<span class="k">def</span><span class="w"> </span><span class="nf">increment</span><span class="p">(</span><span class="n">A</span><span class="p">:</span> <span class="n">T</span><span class="o">.</span><span class="n">Buffer</span><span class="p">((</span><span class="mi">4</span><span class="p">,),</span> <span class="s2">&quot;float32&quot;</span><span class="p">)):</span>
+    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">T</span><span class="o">.</span><span class="n">serial</span><span class="p">(</span><span class="mi">4</span><span class="p">):</span>
+        <span class="n">A</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">A</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">+</span> <span class="mf">1.0</span>
+
+<span class="n">text</span> <span class="o">=</span> <span class="n">increment</span><span class="o">.</span><span class="n">script</span><span class="p">()</span>
+<span class="n">reparsed</span> <span class="o">=</span> <span class="n">tvm</span><span class="o">.</span><span class="n">script</span><span class="o">.</span><span class="n">from_source</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
+<span class="n">tvm</span><span class="o">.</span><span class="n">ir</span><span class="o">.</span><span class="n">assert_structural_equal</span><span class="p">(</span><span class="n">increment</span><span class="p">,</span> <span class="n">reparsed</span><span class="p">)</span>
 </pre></div>
 </div>
+<p>Printed source uses canonical forms rather than preserving the original spelling.
+Round trips require printable IR and any external objects needed by the source;
+the text does not serialize arbitrary Python state.</p>
 </section>
+<section id="namespace-extension">
+<h2>Namespace extension<a class="headerlink" href="#namespace-extension" title="Link to this heading">#</a></h2>
+<p>A language variant supplies construction hooks and a public script namespace, then
+registers its aliases with <code class="docutils literal notranslate"><span class="pre">register_namespace</span></code>. <code class="docutils literal notranslate"><span class="pre">register_namespace_initializer</span></code>
+supports lazy setup. <code class="docutils literal notranslate"><span class="pre">tvm.script.register_dialect</span></code> exposes a package through the
+public script namespace. Syntax policies are registered beside the operations that
+need them, while IR printing is extended through docsifier registrations.</p>
+<p>This division keeps source acquisition, syntax translation and formatting shared.
+Language-specific construction and validation remain with the namespace and its
+builders.</p>
 </section>
 </section>
 
@@ -1372,43 +780,11 @@ boolean type. Both branches are required.</p>
   </div>
   <nav class="bd-toc-nav page-toc">
     <ul class="visible nav section-nav flex-column">
-<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#overview">Overview</a></li>
-<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#decorators">Decorators</a></li>
-<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#parser-architecture">Parser Architecture</a><ul class="visible nav section-nav flex-column">
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#syntax-and-construction-protocol">Syntax and construction protocol</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#parse-flow">Parse flow</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#definition-and-symbol-scopes">Definition and symbol scopes</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#explicit-host-control-flow">Explicit host control flow</a></li>
-</ul>
-</li>
-<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#ir-builder-architecture">IR Builder Architecture</a><ul class="visible nav section-nav flex-column">
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#frame-stack">Frame stack</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#tir-builder">TIR builder</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#relax-builder">Relax builder</a></li>
-</ul>
-</li>
-<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#printer-architecture">Printer Architecture</a><ul class="visible nav section-nav flex-column">
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#doc-tree">Doc tree</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#irdocsifier">IRDocsifier</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#roundtrip">Roundtrip</a></li>
-</ul>
-</li>
-<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#supported-python-syntax">Supported Python Syntax</a></li>
-<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#tir-syntax-reference">TIR Syntax Reference</a><ul class="visible nav section-nav flex-column">
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#function-definition">Function definition</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#block-and-axes">Block and axes</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#loop-types">Loop types</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#buffer-operations">Buffer operations</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#common-intrinsics">Common intrinsics</a></li>
-</ul>
-</li>
-<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#relax-syntax-reference">Relax Syntax Reference</a><ul class="visible nav section-nav flex-column">
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#id1">Function definition</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#dataflow-blocks">Dataflow blocks</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#calling-tir-functions">Calling TIR functions</a></li>
-<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#control-flow">Control flow</a></li>
-</ul>
-</li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#source-and-frontend">Source and frontend</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#syntax-and-construction-protocol">Syntax and construction protocol</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#frame-based-construction">Frame-based construction</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#printing-and-round-trips">Printing and round trips</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#namespace-extension">Namespace extension</a></li>
 </ul>
   </nav></div>
 
diff --git a/docs/commit_hash b/docs/commit_hash
index f01443ae9e8..120906eaa22 100644
--- a/docs/commit_hash
+++ b/docs/commit_hash
@@ -1 +1 @@
-37f7b580c8d6a58998b01d5f91079fa463cd271e
+7188215f5c5d08685949f47c5a1290daa92d278a
diff --git a/docs/deep_dive/relax/learning.html b/docs/deep_dive/relax/learning.html
index cd0cec44a48..c011067ddb2 100644
--- a/docs/deep_dive/relax/learning.html
+++ b/docs/deep_dive/relax/learning.html
@@ -743,11 +743,12 @@ The code block below shows a low-level numpy implementation of the same model.</
 for the end-to-end model execution. The code block below shows a TVMScript implementation of the model.</p>
 <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">ir</span> <span class="k">as</span> <span class="n">I</span>
 <span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">tirx</span> <span class="k">as</span> <span class="n">T</span>
+<span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">s_tir</span> <span class="k">as</span> <span class="n">Ts</span>
 <span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">relax</span> <span class="k">as</span> <span class="n">R</span>
 
 <span class="nd">@I</span><span class="o">.</span><span class="n">ir_module</span>
 <span class="k">class</span><span class="w"> </span><span class="nc">Module</span><span class="p">:</span>
-    <span class="nd">@T</span><span class="o">.</span><span class="n">prim_func</span><span class="p">(</span><span class="n">private</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="nd">@Ts</span><span class="o">.</span><span class="n">prim_func</span><span class="p">(</span><span class="n">private</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
     <span class="k">def</span><span class="w"> </span><span class="nf">linear</span><span class="p">(</span><span class="n">x</span><span class="p">:</span> <span class="n">T</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">w</span><span class="p">:</span> <span class="n">T</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">b</span><span class="p">:</span> <span class="n">T</span><span cla [...]
         <span class="n">M</span><span class="p">,</span> <span class="n">N</span><span class="p">,</span> <span class="n">K</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">int64</span><span class="p">(),</span> <span class="n">T</span><span class="o">.</span><span class="n">int64</span><span class="p">(),</span> <span class="n">T</span><span class="o">.</span><span class="n">int64</span><span class="p">()</span>
         <span class="n">X</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">match_buffer</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="p">(</span><span class="n">M</span><span class="p">,</span> <span class="n">K</span><span class="p">),</span> <span class="s2">&quot;float32&quot;</span><span class="p">)</span>
@@ -756,24 +757,24 @@ for the end-to-end model execution. The code block below shows a TVMScript imple
         <span class="n">Z</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">match_buffer</span><span class="p">(</span><span class="n">z</span><span class="p">,</span> <span class="p">(</span><span class="n">M</span><span class="p">,</span> <span class="n">N</span><span class="p">),</span> <span class="s2">&quot;float32&quot;</span><span class="p">)</span>
         <span class="n">Y</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">alloc_buffer</span><span class="p">((</span><span class="n">M</span><span class="p">,</span> <span class="n">N</span><span class="p">),</span> <span class="s2">&quot;float32&quot;</span><span class="p">)</span>
         <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">T</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="n">M</span><span class="p">,</span> <span class="n">N</span><span class="p">,</span> <span class="n">K</span><span class="p">):</span>
-            <span class="k">with</span> <span class="n">T</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;Y&quot;</span><span class="p">):</span>
-                <span class="n">v_i</span><span class="p">,</span> <span class="n">v_j</span><span class="p">,</span> <span class="n">v_k</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SSR&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span clas [...]
-                <span class="k">with</span> <span class="n">T</span><span class="o">.</span><span class="n">init</span><span class="p">():</span>
+            <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;Y&quot;</span><span class="p">):</span>
+                <span class="n">v_i</span><span class="p">,</span> <span class="n">v_j</span><span class="p">,</span> <span class="n">v_k</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SSR&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span cla [...]
+                <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">init</span><span class="p">():</span>
                     <span class="n">Y</span><span class="p">[</span><span class="n">v_i</span><span class="p">,</span> <span class="n">v_j</span><span class="p">]</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">float32</span><span class="p">(</span><span class="mf">0.0</span><span class="p">)</span>
                 <span class="n">Y</span><span class="p">[</span><span class="n">v_i</span><span class="p">,</span> <span class="n">v_j</span><span class="p">]</span> <span class="o">=</span> <span class="n">Y</span><span class="p">[</span><span class="n">v_i</span><span class="p">,</span> <span class="n">v_j</span><span class="p">]</span> <span class="o">+</span> <span class="n">X</span><span class="p">[</span><span class="n">v_i</span><span class="p">,</span> <span class="n">v_k</span>< [...]
         <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">T</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="n">M</span><span class="p">,</span> <span class="n">N</span><span class="p">):</span>
-            <span class="k">with</span> <span class="n">T</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;Z&quot;</span><span class="p">):</span>
-                <span class="n">v_i</span><span class="p">,</span> <span class="n">v_j</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SS&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">])</span>
+            <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;Z&quot;</span><span class="p">):</span>
+                <span class="n">v_i</span><span class="p">,</span> <span class="n">v_j</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SS&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">])</span>
                 <span class="n">Z</span><span class="p">[</span><span class="n">v_i</span><span class="p">,</span> <span class="n">v_j</span><span class="p">]</span> <span class="o">=</span> <span class="n">Y</span><span class="p">[</span><span class="n">v_i</span><span class="p">,</span> <span class="n">v_j</span><span class="p">]</span> <span class="o">+</span> <span class="n">B</span><span class="p">[</span><span class="n">v_j</span><span class="p">]</span>
 
-    <span class="nd">@T</span><span class="o">.</span><span class="n">prim_func</span><span class="p">(</span><span class="n">private</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="nd">@Ts</span><span class="o">.</span><span class="n">prim_func</span><span class="p">(</span><span class="n">private</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
     <span class="k">def</span><span class="w"> </span><span class="nf">relu</span><span class="p">(</span><span class="n">x</span><span class="p">:</span> <span class="n">T</span><span class="o">.</span><span class="n">handle</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="n">T</span><span class="o">.</span><span class="n">handle</span><span class="p">):</span>
         <span class="n">M</span><span class="p">,</span> <span class="n">N</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">int64</span><span class="p">(),</span> <span class="n">T</span><span class="o">.</span><span class="n">int64</span><span class="p">()</span>
         <span class="n">X</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">match_buffer</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="p">(</span><span class="n">M</span><span class="p">,</span> <span class="n">N</span><span class="p">),</span> <span class="s2">&quot;float32&quot;</span><span class="p">)</span>
         <span class="n">Y</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">match_buffer</span><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="p">(</span><span class="n">M</span><span class="p">,</span> <span class="n">N</span><span class="p">),</span> <span class="s2">&quot;float32&quot;</span><span class="p">)</span>
         <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">T</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="n">M</span><span class="p">,</span> <span class="n">N</span><span class="p">):</span>
-            <span class="k">with</span> <span class="n">T</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;Y&quot;</span><span class="p">):</span>
-                <span class="n">v_i</span><span class="p">,</span> <span class="n">v_j</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SS&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">])</span>
+            <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;Y&quot;</span><span class="p">):</span>
+                <span class="n">v_i</span><span class="p">,</span> <span class="n">v_j</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SS&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">])</span>
                 <span class="n">Y</span><span class="p">[</span><span class="n">v_i</span><span class="p">,</span> <span class="n">v_j</span><span class="p">]</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">X</span><span class="p">[</span><span class="n">v_i</span><span class="p">,</span> <span class="n">v_j</span><span class="p">],</span> <span class="n">T</span><span class="o">.</span><spa [...]
 
     <span class="nd">@R</span><span class="o">.</span><span class="n">function</span>
diff --git a/docs/deep_dive/relax/tutorials/relax_creation.html b/docs/deep_dive/relax/tutorials/relax_creation.html
index 8c3fcf3dd71..c9d99512375 100644
--- a/docs/deep_dive/relax/tutorials/relax_creation.html
+++ b/docs/deep_dive/relax/tutorials/relax_creation.html
@@ -664,6 +664,7 @@ high-level Relax operators using TVMScript.</p>
 <div class="highlight-Python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">tvm</span><span class="w"> </span><span class="kn">import</span> <span class="n">relax</span><span class="p">,</span> <span class="n">topi</span>
 <span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">ir</span> <span class="k">as</span> <span class="n">I</span>
 <span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">relax</span> <span class="k">as</span> <span class="n">R</span>
+<span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">s_tir</span> <span class="k">as</span> <span class="n">Ts</span>
 <span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">tirx</span> <span class="k">as</span> <span class="n">T</span>
 
 
@@ -717,15 +718,15 @@ representation and transformation. To be specific, we can directly call
 TensorIR functions in Relax function.</p>
 <div class="highlight-Python notranslate"><div class="highlight"><pre><span></span><span class="nd">@I</span><span class="o">.</span><span class="n">ir_module</span>
 <span class="k">class</span><span class="w"> </span><span class="nc">RelaxModuleWithTIR</span><span class="p">:</span>
-    <span class="nd">@T</span><span class="o">.</span><span class="n">prim_func</span><span class="p">(</span><span class="n">s_tir</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="nd">@Ts</span><span class="o">.</span><span class="n">prim_func</span>
     <span class="k">def</span><span class="w"> </span><span class="nf">relu</span><span class="p">(</span><a href="../../../reference/api/python/ir.html#tvm.ir.Var" title="tvm.ir.Var" class="sphx-glr-backref-module-tvm-ir sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">x</span></a><span class="p">:</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.handle" title="tvm.script.tirx.handle" class="sphx-glr-backref-module-tvm-script-tirx [...]
         <a href="../../../reference/api/python/ir.html#tvm.ir.Var" title="tvm.ir.Var" class="sphx-glr-backref-module-tvm-ir sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">n</span></a> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">int64</span><span class="p">()</span>
         <span class="n">m</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">int64</span><span class="p">()</span>
         <span class="n">X</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.match_buffer" title="tvm.script.tirx.match_buffer" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">match_buffer</span></a><span class="p">(</span><a href="../../../reference/api/python/ir.html#tvm.ir.Var" title="tvm.ir.Var" class="sphx-glr-backref-module-tvm-ir  [...]
         <span class="n">Y</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.match_buffer" title="tvm.script.tirx.match_buffer" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">match_buffer</span></a><span class="p">(</span><span class="n">y</span><span class="p">,</span> <span class="p">(</span><a href="../../../reference/api/python/ir.h [...]
         <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.grid" title="tvm.script.tirx.grid" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">grid</span></a><span class="p">(</span><a href="../../../reference/api/python/ir.html#tvm.ir.Var" tit [...]
-            <span class="k">with</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.sblock" title="tvm.script.tirx.sblock" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">sblock</span></a><span class="p">(</span><span class="s2">&quot;relu&quot;</span><span class="p">):</span>
-                <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.axis.remap" title="tvm.script.tirx.axis.remap" class="sphx-glr-backref-module-tvm-script-tirx-axis sphx-glr-backref-type-py-method"><span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span></a><span class="p">(</span><span class="s [...]
+            <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;relu&quot;</span><span class="p">):</span>
+                <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SS&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">])</span>
                 <span class="n">Y</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.max" title="tvm.script.tirx.max" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">max</span></a><span class="p">(</span><span class= [...]
 
     <span class="nd">@R</span><span class="o">.</span><span class="n">function</span>
@@ -753,22 +754,23 @@ TensorIR functions in Relax function.</p>
 # from tvm.script import ir as I
 # from tvm.script import tirx as T
 # from tvm.tirx.layout import Axis
+# from tvm.script import s_tir as Ts
 # from tvm.script import relax as R
 
 m = TypeVar(&quot;m&quot;)
 n = TypeVar(&quot;n&quot;)
 @I.ir_module
 class Module:
-    @T.prim_func(s_tir=True)
+    @Ts.prim_func
     def relu(X: T.Buffer((n, m), &quot;float32&quot;), Y: T.Buffer((n, m), &quot;float32&quot;)):
         m = T.int64()
         n = T.int64()
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for i, j in T.grid(n, m):
-            with T.sblock(&quot;relu&quot;):
-                v, v_1 = T.axis.remap(&quot;SS&quot;, [i, j])
-                T.reads(X[v, v_1])
-                T.writes(Y[v, v_1])
+            with Ts.sblock(&quot;relu&quot;):
+                v, v_1 = Ts.axis.remap(&quot;SS&quot;, [i, j])
+                Ts.reads(X[v, v_1])
+                Ts.writes(Y[v, v_1])
                 Y[v, v_1] = T.max(X[v, v_1], T.float32(0.0))
 
     @R.function
@@ -863,7 +865,7 @@ class Module:
 </div>
 <p>We can also insert customized function calls into the NNModule, such as
 Tensor Expression(TE), TensorIR functions or other TVM packed functions.</p>
-<div class="highlight-Python notranslate"><div class="highlight"><pre><span></span><span class="nd">@T</span><span class="o">.</span><span class="n">prim_func</span><span class="p">(</span><span class="n">s_tir</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<div class="highlight-Python notranslate"><div class="highlight"><pre><span></span><span class="nd">@Ts</span><span class="o">.</span><span class="n">prim_func</span>
 <span class="k">def</span><span class="w"> </span><span class="nf">tir_linear</span><span class="p">(</span><a href="../../../reference/api/python/ir.html#tvm.ir.Var" title="tvm.ir.Var" class="sphx-glr-backref-module-tvm-ir sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">x</span></a><span class="p">:</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.handle" title="tvm.script.tirx.handle" class="sphx-glr-backref-module-tvm-script-ti [...]
     <span class="n">M</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">int64</span><span class="p">()</span>
     <span class="n">N</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">int64</span><span class="p">()</span>
@@ -873,14 +875,14 @@ Tensor Expression(TE), TensorIR functions or other TVM packed functions.</p>
     <span class="n">B</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.match_buffer" title="tvm.script.tirx.match_buffer" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">match_buffer</span></a><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="p">(</span><span class="n">N</span><span class="p">,),</sp [...]
     <span class="n">Z</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.match_buffer" title="tvm.script.tirx.match_buffer" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">match_buffer</span></a><span class="p">(</span><span class="n">z</span><span class="p">,</span> <span class="p">(</span><span class="n">M</span><span class="p">,</span [...]
     <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">k</span> <span class="ow">in</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.grid" title="tvm.script.tirx.grid" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">grid</span></a><span class="p">(</span><span class="n">M [...]
-        <span class="k">with</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.sblock" title="tvm.script.tirx.sblock" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">sblock</span></a><span class="p">(</span><span class="s2">&quot;linear&quot;</span><span class="p">):</span>
-            <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">,</span> <span class="n">vk</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.axis.remap" title="tvm.script.tirx.axis.remap" class="sphx-glr-backref-module-tvm-script-tirx-axis sphx-glr-backref-type-py-method"><span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</s [...]
-            <span class="k">with</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.init" title="tvm.script.tirx.init" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">init</span></a><span class="p">():</span>
+        <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;linear&quot;</span><span class="p">):</span>
+            <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">,</span> <span class="n">vk</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SSR&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p"> [...]
+            <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">init</span><span class="p">():</span>
                 <span class="n">Z</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
             <span class="n">Z</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <span class="n">Z</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">+</span> <span class="n">X</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vk</span><span class [...]
     <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.grid" title="tvm.script.tirx.grid" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">grid</span></a><span class="p">(</span><span class="n">M</span><span class="p">,</span> <span class="n">N [...]
-        <span class="k">with</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.sblock" title="tvm.script.tirx.sblock" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">sblock</span></a><span class="p">(</span><span class="s2">&quot;add&quot;</span><span class="p">):</span>
-            <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.axis.remap" title="tvm.script.tirx.axis.remap" class="sphx-glr-backref-module-tvm-script-tirx-axis sphx-glr-backref-type-py-method"><span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span></a><span class="p">(</span><span class="s2">& [...]
+        <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;add&quot;</span><span class="p">):</span>
+            <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SS&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">])</span>
             <span class="n">Z</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <span class="n">Z</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">+</span> <span class="n">B</span><span class="p">[</span><span class="n">vj</span><span class="p">]</span>
 
 
@@ -920,6 +922,7 @@ Tensor Expression(TE), TensorIR functions or other TVM packed functions.</p>
 # from tvm.script import ir as I
 # from tvm.script import tirx as T
 # from tvm.tirx.layout import Axis
+# from tvm.script import s_tir as Ts
 # from tvm.script import relax as R
 
 n = TypeVar(&quot;n&quot;)
@@ -928,37 +931,37 @@ M = TypeVar(&quot;M&quot;)
 N = TypeVar(&quot;N&quot;)
 @I.ir_module
 class Module:
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def relu(env_linear: T.Buffer((n, T.int64(128)), &quot;float32&quot;), compute: T.Buffer((n, T.int64(128)), &quot;float32&quot;)):
         n = T.int64()
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for i0, i1 in T.grid(n, T.int64(128)):
-            with T.sblock(&quot;compute&quot;):
-                v_i0, v_i1 = T.axis.remap(&quot;SS&quot;, [i0, i1])
-                T.reads(env_linear[v_i0, v_i1])
-                T.writes(compute[v_i0, v_i1])
+            with Ts.sblock(&quot;compute&quot;):
+                v_i0, v_i1 = Ts.axis.remap(&quot;SS&quot;, [i0, i1])
+                Ts.reads(env_linear[v_i0, v_i1])
+                Ts.writes(compute[v_i0, v_i1])
                 compute[v_i0, v_i1] = T.max(env_linear[v_i0, v_i1], T.float32(0.0))
 
-    @T.prim_func(s_tir=True)
+    @Ts.prim_func
     def tir_linear(X: T.Buffer((M, K), &quot;float32&quot;), W: T.Buffer((N, K), &quot;float32&quot;), B: T.Buffer((N,), &quot;float32&quot;), Z: T.Buffer((M, N), &quot;float32&quot;)):
         K = T.int64()
         M = T.int64()
         N = T.int64()
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for i, j, k in T.grid(M, N, K):
-            with T.sblock(&quot;linear&quot;):
-                v, v_1, v_2 = T.axis.remap(&quot;SSR&quot;, [i, j, k])
-                T.reads(X[v, v_2], W[v_1, v_2])
-                T.writes(Z[v, v_1])
-                with T.init():
+            with Ts.sblock(&quot;linear&quot;):
+                v, v_1, v_2 = Ts.axis.remap(&quot;SSR&quot;, [i, j, k])
+                Ts.reads(X[v, v_2], W[v_1, v_2])
+                Ts.writes(Z[v, v_1])
+                with Ts.init():
                     Z[v, v_1] = T.float32(0.0)
                 Z[v, v_1] = Z[v, v_1] + X[v, v_2] * W[v_1, v_2]
         for i, j in T.grid(M, N):
-            with T.sblock(&quot;add&quot;):
-                v, v_1 = T.axis.remap(&quot;SS&quot;, [i, j])
-                T.reads(Z[v, v_1], B[v_1])
-                T.writes(Z[v, v_1])
+            with Ts.sblock(&quot;add&quot;):
+                v, v_1 = Ts.axis.remap(&quot;SS&quot;, [i, j])
+                Ts.reads(Z[v, v_1], B[v_1])
+                Ts.writes(Z[v, v_1])
                 Z[v, v_1] = Z[v, v_1] + B[v_1]
 
     @R.function
@@ -1057,6 +1060,7 @@ Relax functions, TensorIR functions and other TVM packed functions.</p>
 # from tvm.script import ir as I
 # from tvm.script import tirx as T
 # from tvm.tirx.layout import Axis
+# from tvm.script import s_tir as Ts
 # from tvm.script import relax as R
 
 v = TypeVar(&quot;v&quot;)
@@ -1065,37 +1069,37 @@ M = TypeVar(&quot;M&quot;)
 N = TypeVar(&quot;N&quot;)
 @I.ir_module
 class Module:
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def relu(lv: T.Buffer((v, T.int64(128)), &quot;float32&quot;), compute: T.Buffer((v, T.int64(128)), &quot;float32&quot;)):
         v = T.int64()
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for i0, i1 in T.grid(v, T.int64(128)):
-            with T.sblock(&quot;compute&quot;):
-                v_i0, v_i1 = T.axis.remap(&quot;SS&quot;, [i0, i1])
-                T.reads(lv[v_i0, v_i1])
-                T.writes(compute[v_i0, v_i1])
+            with Ts.sblock(&quot;compute&quot;):
+                v_i0, v_i1 = Ts.axis.remap(&quot;SS&quot;, [i0, i1])
+                Ts.reads(lv[v_i0, v_i1])
+                Ts.writes(compute[v_i0, v_i1])
                 compute[v_i0, v_i1] = T.max(lv[v_i0, v_i1], T.float32(0.0))
 
-    @T.prim_func(s_tir=True)
+    @Ts.prim_func
     def tir_linear(X: T.Buffer((M, K), &quot;float32&quot;), W: T.Buffer((N, K), &quot;float32&quot;), B: T.Buffer((N,), &quot;float32&quot;), Z: T.Buffer((M, N), &quot;float32&quot;)):
         K = T.int64()
         M = T.int64()
         N = T.int64()
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for i, j, k in T.grid(M, N, K):
-            with T.sblock(&quot;linear&quot;):
-                v, v_1, v_2 = T.axis.remap(&quot;SSR&quot;, [i, j, k])
-                T.reads(X[v, v_2], W[v_1, v_2])
-                T.writes(Z[v, v_1])
-                with T.init():
+            with Ts.sblock(&quot;linear&quot;):
+                v, v_1, v_2 = Ts.axis.remap(&quot;SSR&quot;, [i, j, k])
+                Ts.reads(X[v, v_2], W[v_1, v_2])
+                Ts.writes(Z[v, v_1])
+                with Ts.init():
                     Z[v, v_1] = T.float32(0.0)
                 Z[v, v_1] = Z[v, v_1] + X[v, v_2] * W[v_1, v_2]
         for i, j in T.grid(M, N):
-            with T.sblock(&quot;add&quot;):
-                v, v_1 = T.axis.remap(&quot;SS&quot;, [i, j])
-                T.reads(Z[v, v_1], B[v_1])
-                T.writes(Z[v, v_1])
+            with Ts.sblock(&quot;add&quot;):
+                v, v_1 = Ts.axis.remap(&quot;SS&quot;, [i, j])
+                Ts.reads(Z[v, v_1], B[v_1])
+                Ts.writes(Z[v, v_1])
                 Z[v, v_1] = Z[v, v_1] + B[v_1]
 
     @R.function
diff --git a/docs/deep_dive/relax/tutorials/relax_transformation.html b/docs/deep_dive/relax/tutorials/relax_transformation.html
index 6d4cf4fb9e4..3e1f9a3358a 100644
--- a/docs/deep_dive/relax/tutorials/relax_transformation.html
+++ b/docs/deep_dive/relax/tutorials/relax_transformation.html
@@ -720,95 +720,96 @@ into low-level operators.</p>
 # from tvm.script import ir as I
 # from tvm.script import tirx as T
 # from tvm.tirx.layout import Axis
+# from tvm.script import s_tir as Ts
 # from tvm.script import relax as R
 
 n = TypeVar(&quot;n&quot;)
 @I.ir_module
 class Module:
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def add(matmul: T.Buffer((n, T.int64(128)), &quot;float32&quot;), fc1_bias: T.Buffer((T.int64(128),), &quot;float32&quot;), T_add: T.Buffer((n, T.int64(128)), &quot;float32&quot;)):
         n = T.int64()
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for ax0, ax1 in T.grid(n, T.int64(128)):
-            with T.sblock(&quot;T_add&quot;):
-                v_ax0, v_ax1 = T.axis.remap(&quot;SS&quot;, [ax0, ax1])
-                T.reads(matmul[v_ax0, v_ax1], fc1_bias[v_ax1])
-                T.writes(T_add[v_ax0, v_ax1])
+            with Ts.sblock(&quot;T_add&quot;):
+                v_ax0, v_ax1 = Ts.axis.remap(&quot;SS&quot;, [ax0, ax1])
+                Ts.reads(matmul[v_ax0, v_ax1], fc1_bias[v_ax1])
+                Ts.writes(T_add[v_ax0, v_ax1])
                 T_add[v_ax0, v_ax1] = matmul[v_ax0, v_ax1] + fc1_bias[v_ax1]
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def add1(matmul1: T.Buffer((n, T.int64(10)), &quot;float32&quot;), fc2_bias: T.Buffer((T.int64(10),), &quot;float32&quot;), T_add: T.Buffer((n, T.int64(10)), &quot;float32&quot;)):
         n = T.int64()
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for ax0, ax1 in T.grid(n, T.int64(10)):
-            with T.sblock(&quot;T_add&quot;):
-                v_ax0, v_ax1 = T.axis.remap(&quot;SS&quot;, [ax0, ax1])
-                T.reads(matmul1[v_ax0, v_ax1], fc2_bias[v_ax1])
-                T.writes(T_add[v_ax0, v_ax1])
+            with Ts.sblock(&quot;T_add&quot;):
+                v_ax0, v_ax1 = Ts.axis.remap(&quot;SS&quot;, [ax0, ax1])
+                Ts.reads(matmul1[v_ax0, v_ax1], fc2_bias[v_ax1])
+                Ts.writes(T_add[v_ax0, v_ax1])
                 T_add[v_ax0, v_ax1] = matmul1[v_ax0, v_ax1] + fc2_bias[v_ax1]
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def matmul(x: T.Buffer((n, T.int64(784)), &quot;float32&quot;), permute_dims: T.Buffer((T.int64(784), T.int64(128)), &quot;float32&quot;), matmul: T.Buffer((n, T.int64(128)), &quot;float32&quot;)):
         n = T.int64()
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for i0, i1, k in T.grid(n, T.int64(128), T.int64(784)):
-            with T.sblock(&quot;matmul&quot;):
-                v_i0, v_i1, v_k = T.axis.remap(&quot;SSR&quot;, [i0, i1, k])
-                T.reads(x[v_i0, v_k], permute_dims[v_k, v_i1])
-                T.writes(matmul[v_i0, v_i1])
-                with T.init():
+            with Ts.sblock(&quot;matmul&quot;):
+                v_i0, v_i1, v_k = Ts.axis.remap(&quot;SSR&quot;, [i0, i1, k])
+                Ts.reads(x[v_i0, v_k], permute_dims[v_k, v_i1])
+                Ts.writes(matmul[v_i0, v_i1])
+                with Ts.init():
                     matmul[v_i0, v_i1] = T.float32(0.0)
                 matmul[v_i0, v_i1] = matmul[v_i0, v_i1] + x[v_i0, v_k] * permute_dims[v_k, v_i1]
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def matmul1(relu: T.Buffer((n, T.int64(128)), &quot;float32&quot;), permute_dims1: T.Buffer((T.int64(128), T.int64(10)), &quot;float32&quot;), matmul: T.Buffer((n, T.int64(10)), &quot;float32&quot;)):
         n = T.int64()
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for i0, i1, k in T.grid(n, T.int64(10), T.int64(128)):
-            with T.sblock(&quot;matmul&quot;):
-                v_i0, v_i1, v_k = T.axis.remap(&quot;SSR&quot;, [i0, i1, k])
-                T.reads(relu[v_i0, v_k], permute_dims1[v_k, v_i1])
-                T.writes(matmul[v_i0, v_i1])
-                with T.init():
+            with Ts.sblock(&quot;matmul&quot;):
+                v_i0, v_i1, v_k = Ts.axis.remap(&quot;SSR&quot;, [i0, i1, k])
+                Ts.reads(relu[v_i0, v_k], permute_dims1[v_k, v_i1])
+                Ts.writes(matmul[v_i0, v_i1])
+                with Ts.init():
                     matmul[v_i0, v_i1] = T.float32(0.0)
                 matmul[v_i0, v_i1] = matmul[v_i0, v_i1] + relu[v_i0, v_k] * permute_dims1[v_k, v_i1]
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def relu(add: T.Buffer((n, T.int64(128)), &quot;float32&quot;), compute: T.Buffer((n, T.int64(128)), &quot;float32&quot;)):
         n = T.int64()
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for i0, i1 in T.grid(n, T.int64(128)):
-            with T.sblock(&quot;compute&quot;):
-                v_i0, v_i1 = T.axis.remap(&quot;SS&quot;, [i0, i1])
-                T.reads(add[v_i0, v_i1])
-                T.writes(compute[v_i0, v_i1])
+            with Ts.sblock(&quot;compute&quot;):
+                v_i0, v_i1 = Ts.axis.remap(&quot;SS&quot;, [i0, i1])
+                Ts.reads(add[v_i0, v_i1])
+                Ts.writes(compute[v_i0, v_i1])
                 compute[v_i0, v_i1] = T.max(add[v_i0, v_i1], T.float32(0.0))
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def transpose(fc1_weight: T.Buffer((T.int64(128), T.int64(784)), &quot;float32&quot;), T_transpose: T.Buffer((T.int64(784), T.int64(128)), &quot;float32&quot;)):
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for ax0, ax1 in T.grid(T.int64(784), T.int64(128)):
-            with T.sblock(&quot;T_transpose&quot;):
-                v_ax0, v_ax1 = T.axis.remap(&quot;SS&quot;, [ax0, ax1])
-                T.reads(fc1_weight[v_ax1, v_ax0])
-                T.writes(T_transpose[v_ax0, v_ax1])
+            with Ts.sblock(&quot;T_transpose&quot;):
+                v_ax0, v_ax1 = Ts.axis.remap(&quot;SS&quot;, [ax0, ax1])
+                Ts.reads(fc1_weight[v_ax1, v_ax0])
+                Ts.writes(T_transpose[v_ax0, v_ax1])
                 T_transpose[v_ax0, v_ax1] = fc1_weight[v_ax1, v_ax0]
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def transpose1(fc2_weight: T.Buffer((T.int64(10), T.int64(128)), &quot;float32&quot;), T_transpose: T.Buffer((T.int64(128), T.int64(10)), &quot;float32&quot;)):
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for ax0, ax1 in T.grid(T.int64(128), T.int64(10)):
-            with T.sblock(&quot;T_transpose&quot;):
-                v_ax0, v_ax1 = T.axis.remap(&quot;SS&quot;, [ax0, ax1])
-                T.reads(fc2_weight[v_ax1, v_ax0])
-                T.writes(T_transpose[v_ax0, v_ax1])
+            with Ts.sblock(&quot;T_transpose&quot;):
+                v_ax0, v_ax1 = Ts.axis.remap(&quot;SS&quot;, [ax0, ax1])
+                Ts.reads(fc2_weight[v_ax1, v_ax0])
+                Ts.writes(T_transpose[v_ax0, v_ax1])
                 T_transpose[v_ax0, v_ax1] = fc2_weight[v_ax1, v_ax0]
 
     @R.function
@@ -848,80 +849,81 @@ a set of passes. We can apply them in a sequence.</p>
 # from tvm.script import ir as I
 # from tvm.script import tirx as T
 # from tvm.tirx.layout import Axis
+# from tvm.script import s_tir as Ts
 # from tvm.script import relax as R
 
 n = TypeVar(&quot;n&quot;)
 @I.ir_module
 class Module:
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def fused_matmul1_add1(relu: T.Buffer((n, T.int64(128)), &quot;float32&quot;), permute_dims1: T.Buffer((T.int64(128), T.int64(10)), &quot;float32&quot;), fc2_bias: T.Buffer((T.int64(10),), &quot;float32&quot;), T_add_intermediate: T.Buffer((n, T.int64(10)), &quot;float32&quot;)):
         n = T.int64()
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
-        matmul_intermediate = T.sblock_alloc_buffer((n, T.int64(10)))
+        # with Ts.sblock(&quot;root&quot;):
+        matmul_intermediate = Ts.sblock_alloc_buffer((n, T.int64(10)))
         for i0, i1, k in T.grid(n, T.int64(10), T.int64(128)):
-            with T.sblock(&quot;matmul&quot;):
-                v_i0, v_i1, v_k = T.axis.remap(&quot;SSR&quot;, [i0, i1, k])
-                T.reads(relu[v_i0, v_k], permute_dims1[v_k, v_i1])
-                T.writes(matmul_intermediate[v_i0, v_i1])
-                with T.init():
+            with Ts.sblock(&quot;matmul&quot;):
+                v_i0, v_i1, v_k = Ts.axis.remap(&quot;SSR&quot;, [i0, i1, k])
+                Ts.reads(relu[v_i0, v_k], permute_dims1[v_k, v_i1])
+                Ts.writes(matmul_intermediate[v_i0, v_i1])
+                with Ts.init():
                     matmul_intermediate[v_i0, v_i1] = T.float32(0.0)
                 matmul_intermediate[v_i0, v_i1] = matmul_intermediate[v_i0, v_i1] + relu[v_i0, v_k] * permute_dims1[v_k, v_i1]
         for ax0, ax1 in T.grid(n, T.int64(10)):
-            with T.sblock(&quot;T_add&quot;):
-                v_ax0, v_ax1 = T.axis.remap(&quot;SS&quot;, [ax0, ax1])
-                T.reads(matmul_intermediate[v_ax0, v_ax1], fc2_bias[v_ax1])
-                T.writes(T_add_intermediate[v_ax0, v_ax1])
+            with Ts.sblock(&quot;T_add&quot;):
+                v_ax0, v_ax1 = Ts.axis.remap(&quot;SS&quot;, [ax0, ax1])
+                Ts.reads(matmul_intermediate[v_ax0, v_ax1], fc2_bias[v_ax1])
+                Ts.writes(T_add_intermediate[v_ax0, v_ax1])
                 T_add_intermediate[v_ax0, v_ax1] = matmul_intermediate[v_ax0, v_ax1] + fc2_bias[v_ax1]
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def fused_matmul_add_relu(x: T.Buffer((n, T.int64(784)), &quot;float32&quot;), permute_dims: T.Buffer((T.int64(784), T.int64(128)), &quot;float32&quot;), fc1_bias: T.Buffer((T.int64(128),), &quot;float32&quot;), compute_intermediate: T.Buffer((n, T.int64(128)), &quot;float32&quot;)):
         n = T.int64()
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
-        matmul_intermediate = T.sblock_alloc_buffer((n, T.int64(128)))
-        T_add_intermediate = T.sblock_alloc_buffer((n, T.int64(128)))
+        # with Ts.sblock(&quot;root&quot;):
+        matmul_intermediate = Ts.sblock_alloc_buffer((n, T.int64(128)))
+        T_add_intermediate = Ts.sblock_alloc_buffer((n, T.int64(128)))
         for i0, i1, k in T.grid(n, T.int64(128), T.int64(784)):
-            with T.sblock(&quot;matmul&quot;):
-                v_i0, v_i1, v_k = T.axis.remap(&quot;SSR&quot;, [i0, i1, k])
-                T.reads(x[v_i0, v_k], permute_dims[v_k, v_i1])
-                T.writes(matmul_intermediate[v_i0, v_i1])
-                with T.init():
+            with Ts.sblock(&quot;matmul&quot;):
+                v_i0, v_i1, v_k = Ts.axis.remap(&quot;SSR&quot;, [i0, i1, k])
+                Ts.reads(x[v_i0, v_k], permute_dims[v_k, v_i1])
+                Ts.writes(matmul_intermediate[v_i0, v_i1])
+                with Ts.init():
                     matmul_intermediate[v_i0, v_i1] = T.float32(0.0)
                 matmul_intermediate[v_i0, v_i1] = matmul_intermediate[v_i0, v_i1] + x[v_i0, v_k] * permute_dims[v_k, v_i1]
         for ax0, ax1 in T.grid(n, T.int64(128)):
-            with T.sblock(&quot;T_add&quot;):
-                v_ax0, v_ax1 = T.axis.remap(&quot;SS&quot;, [ax0, ax1])
-                T.reads(matmul_intermediate[v_ax0, v_ax1], fc1_bias[v_ax1])
-                T.writes(T_add_intermediate[v_ax0, v_ax1])
+            with Ts.sblock(&quot;T_add&quot;):
+                v_ax0, v_ax1 = Ts.axis.remap(&quot;SS&quot;, [ax0, ax1])
+                Ts.reads(matmul_intermediate[v_ax0, v_ax1], fc1_bias[v_ax1])
+                Ts.writes(T_add_intermediate[v_ax0, v_ax1])
                 T_add_intermediate[v_ax0, v_ax1] = matmul_intermediate[v_ax0, v_ax1] + fc1_bias[v_ax1]
         for i0, i1 in T.grid(n, T.int64(128)):
-            with T.sblock(&quot;compute&quot;):
-                v_i0, v_i1 = T.axis.remap(&quot;SS&quot;, [i0, i1])
-                T.reads(T_add_intermediate[v_i0, v_i1])
-                T.writes(compute_intermediate[v_i0, v_i1])
+            with Ts.sblock(&quot;compute&quot;):
+                v_i0, v_i1 = Ts.axis.remap(&quot;SS&quot;, [i0, i1])
+                Ts.reads(T_add_intermediate[v_i0, v_i1])
+                Ts.writes(compute_intermediate[v_i0, v_i1])
                 compute_intermediate[v_i0, v_i1] = T.max(T_add_intermediate[v_i0, v_i1], T.float32(0.0))
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def transpose(fc1_weight: T.Buffer((T.int64(128), T.int64(784)), &quot;float32&quot;), T_transpose: T.Buffer((T.int64(784), T.int64(128)), &quot;float32&quot;)):
         T.func_attr({&quot;op_pattern&quot;: 2, &quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for ax0, ax1 in T.grid(T.int64(784), T.int64(128)):
-            with T.sblock(&quot;T_transpose&quot;):
-                v_ax0, v_ax1 = T.axis.remap(&quot;SS&quot;, [ax0, ax1])
-                T.reads(fc1_weight[v_ax1, v_ax0])
-                T.writes(T_transpose[v_ax0, v_ax1])
+            with Ts.sblock(&quot;T_transpose&quot;):
+                v_ax0, v_ax1 = Ts.axis.remap(&quot;SS&quot;, [ax0, ax1])
+                Ts.reads(fc1_weight[v_ax1, v_ax0])
+                Ts.writes(T_transpose[v_ax0, v_ax1])
                 T_transpose[v_ax0, v_ax1] = fc1_weight[v_ax1, v_ax0]
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def transpose1(fc2_weight: T.Buffer((T.int64(10), T.int64(128)), &quot;float32&quot;), T_transpose: T.Buffer((T.int64(128), T.int64(10)), &quot;float32&quot;)):
         T.func_attr({&quot;op_pattern&quot;: 2, &quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for ax0, ax1 in T.grid(T.int64(128), T.int64(10)):
-            with T.sblock(&quot;T_transpose&quot;):
-                v_ax0, v_ax1 = T.axis.remap(&quot;SS&quot;, [ax0, ax1])
-                T.reads(fc2_weight[v_ax1, v_ax0])
-                T.writes(T_transpose[v_ax0, v_ax1])
+            with Ts.sblock(&quot;T_transpose&quot;):
+                v_ax0, v_ax1 = Ts.axis.remap(&quot;SS&quot;, [ax0, ax1])
+                Ts.reads(fc2_weight[v_ax1, v_ax0])
+                Ts.writes(T_transpose[v_ax0, v_ax1])
                 T_transpose[v_ax0, v_ax1] = fc2_weight[v_ax1, v_ax0]
 
     @R.function
diff --git a/docs/deep_dive/relax/tutorials/sg_execution_times.html b/docs/deep_dive/relax/tutorials/sg_execution_times.html
index 16067443fe4..a7d98fbefc3 100644
--- a/docs/deep_dive/relax/tutorials/sg_execution_times.html
+++ b/docs/deep_dive/relax/tutorials/sg_execution_times.html
@@ -634,7 +634,7 @@ document.write(`
                   
   <section id="computation-times">
 <span id="sphx-glr-deep-dive-relax-tutorials-sg-execution-times"></span><h1>Computation times<a class="headerlink" href="#computation-times" title="Link to this heading">#</a></h1>
-<p><strong>00:00.133</strong> total execution time for 2 files <strong>from deep_dive/relax/tutorials</strong>:</p>
+<p><strong>00:00.134</strong> total execution time for 2 files <strong>from deep_dive/relax/tutorials</strong>:</p>
 <div class="docutils container">
 <style scoped>
 <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet" />
@@ -656,7 +656,7 @@ $(document).ready( function () {
 </thead>
 <tbody>
 <tr class="row-even"><td><p><a class="reference internal" href="relax_creation.html#sphx-glr-deep-dive-relax-tutorials-relax-creation-py"><span class="std std-ref">Relax Creation</span></a> (<code class="docutils literal notranslate"><span class="pre">relax_creation.py</span></code>)</p></td>
-<td><p>00:00.079</p></td>
+<td><p>00:00.080</p></td>
 <td><p>0.0</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="relax_transformation.html#sphx-glr-deep-dive-relax-tutorials-relax-transformation-py"><span class="std std-ref">Transformation</span></a> (<code class="docutils literal notranslate"><span class="pre">relax_transformation.py</span></code>)</p></td>
diff --git a/docs/deep_dive/tensor_ir/abstraction.html b/docs/deep_dive/tensor_ir/abstraction.html
index acfa0dc1111..0dc8e32949f 100644
--- a/docs/deep_dive/tensor_ir/abstraction.html
+++ b/docs/deep_dive/tensor_ir/abstraction.html
@@ -653,16 +653,17 @@ Usually, a typical abstraction for primitive tensor function implementation cont
 elements: multi-dimensional buffers, loop nests that drive the tensor computations, and finally,
 the compute statements themselves.</p>
 <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">tirx</span> <span class="k">as</span> <span class="n">T</span>
+<span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">s_tir</span> <span class="k">as</span> <span class="n">Ts</span>
 
-<span class="nd">@T</span><span class="o">.</span><span class="n">prim_func</span>
+<span class="nd">@Ts</span><span class="o">.</span><span class="n">prim_func</span>
 <span class="k">def</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span>
     <span class="n">A</span><span class="p">:</span> <span class="n">T</span><span class="o">.</span><span class="n">Buffer</span><span class="p">((</span><span class="mi">128</span><span class="p">,),</span> <span class="s2">&quot;float32&quot;</span><span class="p">),</span>
     <span class="n">B</span><span class="p">:</span> <span class="n">T</span><span class="o">.</span><span class="n">Buffer</span><span class="p">((</span><span class="mi">128</span><span class="p">,),</span> <span class="s2">&quot;float32&quot;</span><span class="p">),</span>
     <span class="n">C</span><span class="p">:</span> <span class="n">T</span><span class="o">.</span><span class="n">Buffer</span><span class="p">((</span><span class="mi">128</span><span class="p">,),</span> <span class="s2">&quot;float32&quot;</span><span class="p">),</span>
 <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
     <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">128</span><span class="p">):</span>
-        <span class="k">with</span> <span class="n">T</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;C&quot;</span><span class="p">):</span>
-            <span class="n">vi</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
+        <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;C&quot;</span><span class="p">):</span>
+            <span class="n">vi</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
             <span class="n">C</span><span class="p">[</span><span class="n">vi</span><span class="p">]</span> <span class="o">=</span> <span class="n">A</span><span class="p">[</span><span class="n">vi</span><span class="p">]</span> <span class="o">+</span> <span class="n">B</span><span class="p">[</span><span class="n">vi</span><span class="p">]</span>
 </pre></div>
 </div>
@@ -685,11 +686,11 @@ computations rely on the loop’s sequence. Fortunately, the majority of primiti
 functions we focus on possess favorable properties, such as independence among loop iterations.
 For instance, the aforementioned program includes block and iteration annotations:</p>
 <ul class="simple">
-<li><p>The <strong>block annotation</strong> <code class="docutils literal notranslate"><span class="pre">with</span> <span class="pre">T.sblock(&quot;C&quot;)</span></code> signifies that the block is the fundamental
+<li><p>The <strong>block annotation</strong> <code class="docutils literal notranslate"><span class="pre">with</span> <span class="pre">Ts.sblock(&quot;C&quot;)</span></code> signifies that the block is the fundamental
 computation unit designated for scheduling. A block may encompass a single computation
 statement, multiple computation statements with loops, or opaque intrinsics such as Tensor
 Core instructions.</p></li>
-<li><p>The <strong>iteration annotation</strong> <code class="docutils literal notranslate"><span class="pre">T.axis.spatial</span></code>, indicating that variable <code class="docutils literal notranslate"><span class="pre">vi</span></code> is mapped
+<li><p>The <strong>iteration annotation</strong> <code class="docutils literal notranslate"><span class="pre">Ts.axis.spatial</span></code>, indicating that variable <code class="docutils literal notranslate"><span class="pre">vi</span></code> is mapped
 to <code class="docutils literal notranslate"><span class="pre">i</span></code>, and all iterations are independent.</p></li>
 </ul>
 <p>While this information isn’t crucial for <em>executing</em> the specific program, it proves useful when
diff --git a/docs/deep_dive/tensor_ir/learning.html b/docs/deep_dive/tensor_ir/learning.html
index 0a5ace76c1c..47419f038ce 100644
--- a/docs/deep_dive/tensor_ir/learning.html
+++ b/docs/deep_dive/tensor_ir/learning.html
@@ -680,26 +680,27 @@ a linear layer with relu activation. We use TensorIR to depict the above computa
 below shows a TensorIR implementation of <code class="docutils literal notranslate"><span class="pre">mm_relu</span></code>. The particular code is implemented in a
 language called TVMScript, which is a domain-specific dialect embedded in python AST.</p>
 <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">tirx</span> <span class="k">as</span> <span class="n">T</span>
+<span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">s_tir</span> <span class="k">as</span> <span class="n">Ts</span>
 
 <span class="nd">@tvm</span><span class="o">.</span><span class="n">script</span><span class="o">.</span><span class="n">ir_module</span>
 <span class="k">class</span><span class="w"> </span><span class="nc">MyModule</span><span class="p">:</span>
-    <span class="nd">@T</span><span class="o">.</span><span class="n">prim_func</span>
+    <span class="nd">@Ts</span><span class="o">.</span><span class="n">prim_func</span>
     <span class="k">def</span><span class="w"> </span><span class="nf">mm_relu</span><span class="p">(</span><span class="n">A</span><span class="p">:</span> <span class="n">T</span><span class="o">.</span><span class="n">Buffer</span><span class="p">((</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">),</span> <span class="s2">&quot;float32&quot;</span><span class="p">),</span>
                 <span class="n">B</span><span class="p">:</span> <span class="n">T</span><span class="o">.</span><span class="n">Buffer</span><span class="p">((</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">),</span> <span class="s2">&quot;float32&quot;</span><span class="p">),</span>
                 <span class="n">C</span><span class="p">:</span> <span class="n">T</span><span class="o">.</span><span class="n">Buffer</span><span class="p">((</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">),</span> <span class="s2">&quot;float32&quot;</span><span class="p">)):</span>
         <span class="n">Y</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">alloc_buffer</span><span class="p">((</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="s2">&quot;float32&quot;</span><span class="p">)</span>
         <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">T</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">):</span>
-            <span class="k">with</span> <span class="n">T</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;Y&quot;</span><span class="p">):</span>
-                <span class="n">vi</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
-                <span class="n">vj</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span>
-                <span class="n">vk</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span>
-                <span class="k">with</span> <span class="n">T</span><span class="o">.</span><span class="n">init</span><span class="p">():</span>
+            <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;Y&quot;</span><span class="p">):</span>
+                <span class="n">vi</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
+                <span class="n">vj</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span>
+                <span class="n">vk</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span>
+                <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">init</span><span class="p">():</span>
                     <span class="n">Y</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">float32</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
                 <span class="n">Y</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <span class="n">Y</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">+</span> <span class="n">A</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vk</span><span c [...]
         <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">T</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">):</span>
-            <span class="k">with</span> <span class="n">T</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;C&quot;</span><span class="p">):</span>
-                <span class="n">vi</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
-                <span class="n">vj</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span>
+            <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;C&quot;</span><span class="p">):</span>
+                <span class="n">vi</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
+                <span class="n">vj</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span>
                 <span class="n">C</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">Y</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">],</span> <span class="n">T</span><span class="o">.</span><span cl [...]
 </pre></div>
 </div>
@@ -752,13 +753,13 @@ type.</p>
 <section id="computational-block">
 <h2>Computational Block<a class="headerlink" href="#computational-block" title="Link to this heading">#</a></h2>
 <p>A significant distinction lies in computational statements:
-<strong>TensorIR incorporates an additional construct termed</strong> <code class="docutils literal notranslate"><span class="pre">T.sblock</span></code>.</p>
+<strong>TensorIR incorporates an additional construct termed</strong> <code class="docutils literal notranslate"><span class="pre">Ts.sblock</span></code>.</p>
 <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># TensorIR</span>
-<span class="k">with</span> <span class="n">T</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;Y&quot;</span><span class="p">):</span>
-    <span class="n">vi</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
-    <span class="n">vj</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span>
-    <span class="n">vk</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span>
-    <span class="k">with</span> <span class="n">T</span><span class="o">.</span><span class="n">init</span><span class="p">():</span>
+<span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;Y&quot;</span><span class="p">):</span>
+    <span class="n">vi</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
+    <span class="n">vj</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span>
+    <span class="n">vk</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span>
+    <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">init</span><span class="p">():</span>
         <span class="n">Y</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">float32</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
     <span class="n">Y</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <span class="n">Y</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">+</span> <span class="n">A</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vk</span><span class="p">]</ [...]
 <span class="c1"># NumPy</span>
@@ -771,20 +772,20 @@ type.</p>
 <p>A <strong>block</strong> represents a fundamental computation unit within TensorIR. Importantly,
 a block encompasses more information than standard NumPy code. It comprises a set of block axes
 <code class="docutils literal notranslate"><span class="pre">(vi,</span> <span class="pre">vj,</span> <span class="pre">vk)</span></code> and the computations delineated around them.</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">vi</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
-<span class="n">vj</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span>
-<span class="n">vk</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">vi</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
+<span class="n">vj</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span>
+<span class="n">vk</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span>
 </pre></div>
 </div>
 <p>The above three lines declare the <strong>key properties</strong> about block axes in the following syntax.</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">block_axis</span><span class="p">]</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="p">[</span><span class="n">axis_type</span><span class="p">]([</span><span class="n">axis_range</span><span class="p">],</span> <span class="p">[</span><span class="n">mapped_value</span><sp [...]
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">block_axis</span><span class="p">]</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="p">[</span><span class="n">axis_type</span><span class="p">]([</span><span class="n">axis_range</span><span class="p">],</span> <span class="p">[</span><span class="n">mapped_value</span><s [...]
 </pre></div>
 </div>
 <p>These three lines convey the following details:</p>
 <ul class="simple">
 <li><p>They specify the binding of <code class="docutils literal notranslate"><span class="pre">vi</span></code>, <code class="docutils literal notranslate"><span class="pre">vj</span></code>, <code class="docutils literal notranslate"><span class="pre">vk</span></code> (in this instance, to <code class="docutils literal notranslate"><span class="pre">i</span></code>, <code class="docutils literal notranslate"><span class="pre">j</span></code>, <code class="docutils literal notranslate"> [...]
 <li><p>They declare the original range intended for <code class="docutils literal notranslate"><span class="pre">vi</span></code>, <code class="docutils literal notranslate"><span class="pre">vj</span></code>, <code class="docutils literal notranslate"><span class="pre">vk</span></code>
-(the 128 in <code class="docutils literal notranslate"><span class="pre">T.axis.spatial(128,</span> <span class="pre">i)</span></code>).</p></li>
+(the 128 in <code class="docutils literal notranslate"><span class="pre">Ts.axis.spatial(128,</span> <span class="pre">i)</span></code>).</p></li>
 <li><p>They announce the properties of the iterators (spatial, reduce).</p></li>
 </ul>
 </section>
@@ -811,8 +812,8 @@ external loops that are used to carry out the computation. For example, the abov
 error because the loop expects an iterator of size 128, but we only bound it to a for loop of size 127.</p>
 <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># wrong program due to loop and block iteration mismatch</span>
 <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">127</span><span class="p">):</span>
-    <span class="k">with</span> <span class="n">T</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;C&quot;</span><span class="p">):</span>
-        <span class="n">vi</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
+    <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;C&quot;</span><span class="p">):</span>
+        <span class="n">vi</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
         <span class="o">^^^^^^^^^^^^^^^^^^^^^^^^^^^</span>
         <span class="n">error</span> <span class="n">here</span> <span class="n">due</span> <span class="n">to</span> <span class="n">iterator</span> <span class="n">size</span> <span class="n">mismatch</span>
         <span class="o">...</span>
@@ -822,34 +823,34 @@ error because the loop expects an iterator of size 128, but we only bound it to
 <section id="sugars-for-block-axes-binding">
 <h2>Sugars for Block Axes Binding<a class="headerlink" href="#sugars-for-block-axes-binding" title="Link to this heading">#</a></h2>
 <p>In situations where each of the block axes is directly mapped to an outer loop iterator,
-we can use <code class="docutils literal notranslate"><span class="pre">T.axis.remap</span></code> to declare the block axis in a single line.</p>
+we can use <code class="docutils literal notranslate"><span class="pre">Ts.axis.remap</span></code> to declare the block axis in a single line.</p>
 <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># SSR means the properties of each axes are &quot;spatial&quot;, &quot;spatial&quot;, &quot;reduce&quot;</span>
-<span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">,</span> <span class="n">vk</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SSR&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <spa [...]
+<span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">,</span> <span class="n">vk</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SSR&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <sp [...]
 </pre></div>
 </div>
 <p>which is equivalent to</p>
-<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">vi</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="n">range_of_i</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
-<span class="n">vj</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="n">range_of_j</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span>
-<span class="n">vk</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">reduce</span> <span class="p">(</span><span class="n">range_of_k</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span>
+<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">vi</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="n">range_of_i</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
+<span class="n">vj</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="n">range_of_j</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span>
+<span class="n">vk</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">reduce</span> <span class="p">(</span><span class="n">range_of_k</span><span class="p">,</span> <span class="n">k</span><span class="p">)</span>
 </pre></div>
 </div>
 <p>So we can also write the programs as follows.</p>
 <div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="nd">@tvm</span><span class="o">.</span><span class="n">script</span><span class="o">.</span><span class="n">ir_module</span>
 <span class="k">class</span><span class="w"> </span><span class="nc">MyModuleWithAxisRemapSugar</span><span class="p">:</span>
-    <span class="nd">@T</span><span class="o">.</span><span class="n">prim_func</span>
+    <span class="nd">@Ts</span><span class="o">.</span><span class="n">prim_func</span>
     <span class="k">def</span><span class="w"> </span><span class="nf">mm_relu</span><span class="p">(</span><span class="n">A</span><span class="p">:</span> <span class="n">T</span><span class="o">.</span><span class="n">Buffer</span><span class="p">((</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">),</span> <span class="s2">&quot;float32&quot;</span><span class="p">),</span>
                 <span class="n">B</span><span class="p">:</span> <span class="n">T</span><span class="o">.</span><span class="n">Buffer</span><span class="p">((</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">),</span> <span class="s2">&quot;float32&quot;</span><span class="p">),</span>
                 <span class="n">C</span><span class="p">:</span> <span class="n">T</span><span class="o">.</span><span class="n">Buffer</span><span class="p">((</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">),</span> <span class="s2">&quot;float32&quot;</span><span class="p">)):</span>
         <span class="n">Y</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">alloc_buffer</span><span class="p">((</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="s2">&quot;float32&quot;</span><span class="p">)</span>
         <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">T</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">):</span>
-            <span class="k">with</span> <span class="n">T</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;Y&quot;</span><span class="p">):</span>
-                <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">,</span> <span class="n">vk</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SSR&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class=" [...]
-                <span class="k">with</span> <span class="n">T</span><span class="o">.</span><span class="n">init</span><span class="p">():</span>
+            <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;Y&quot;</span><span class="p">):</span>
+                <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">,</span> <span class="n">vk</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SSR&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class= [...]
+                <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">init</span><span class="p">():</span>
                     <span class="n">Y</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">float32</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
                 <span class="n">Y</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <span class="n">Y</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">+</span> <span class="n">A</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vk</span><span c [...]
         <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">T</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">):</span>
-            <span class="k">with</span> <span class="n">T</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;C&quot;</span><span class="p">):</span>
-                <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SS&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">])</span>
+            <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;C&quot;</span><span class="p">):</span>
+                <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SS&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">])</span>
                 <span class="n">C</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">max</span><span class="p">(</span><span class="n">Y</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">],</span> <span class="n">T</span><span class="o">.</span><span cl [...]
 </pre></div>
 </div>
diff --git a/docs/deep_dive/tensor_ir/tutorials/dlight_gpu_scheduling.html b/docs/deep_dive/tensor_ir/tutorials/dlight_gpu_scheduling.html
index 92b17bbd4df..4f371176152 100644
--- a/docs/deep_dive/tensor_ir/tutorials/dlight_gpu_scheduling.html
+++ b/docs/deep_dive/tensor_ir/tutorials/dlight_gpu_scheduling.html
@@ -751,154 +751,155 @@ scheduled again by a later <code class="docutils literal notranslate"><span clas
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span># from tvm.script import ir as I
 # from tvm.script import tirx as T
 # from tvm.tirx.layout import Axis
+# from tvm.script import s_tir as Ts
 # from tvm.script import relax as R
 
 @I.ir_module
 class Module:
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def fused_matmul1_add1(layer_norm: T.Buffer((T.int64(1), T.int64(768)), &quot;float32&quot;), permute_dims1: T.Buffer((T.int64(768), T.int64(256)), &quot;float32&quot;), fc2_bias: T.Buffer((T.int64(256),), &quot;float32&quot;), T_add_intermediate: T.Buffer((T.int64(1), T.int64(256)), &quot;float32&quot;)):
         T.func_attr({&quot;tirx.is_scheduled&quot;: True, &quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
-        matmul_intermediate_local = T.sblock_alloc_buffer((T.int64(1), T.int64(256)), scope=&quot;local&quot;)
-        matmul_intermediate_rf_local = T.sblock_alloc_buffer((T.int64(16), T.int64(1), T.int64(256)), scope=&quot;local&quot;)
+        # with Ts.sblock(&quot;root&quot;):
+        matmul_intermediate_local = Ts.sblock_alloc_buffer((T.int64(1), T.int64(256)), scope=&quot;local&quot;)
+        matmul_intermediate_rf_local = Ts.sblock_alloc_buffer((T.int64(16), T.int64(1), T.int64(256)), scope=&quot;local&quot;)
         for ax0_fused_0 in T.thread_binding(T.int64(16), thread=&quot;blockIdx.x&quot;):
             for ax0_fused_1 in T.thread_binding(T.int64(16), thread=&quot;threadIdx.x&quot;):
                 for ax1_fused_1 in T.thread_binding(T.int64(16), thread=&quot;threadIdx.y&quot;):
-                    with T.sblock(&quot;matmul_rf_init&quot;):
-                        vax1_fused_1 = T.axis.spatial(T.int64(16), ax1_fused_1)
-                        v0 = T.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_1)
-                        T.reads()
-                        T.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                    with Ts.sblock(&quot;matmul_rf_init&quot;):
+                        vax1_fused_1 = Ts.axis.spatial(T.int64(16), ax1_fused_1)
+                        v0 = Ts.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_1)
+                        Ts.reads()
+                        Ts.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
                         matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] = T.float32(0.0)
                     for ax1_fused_0, u in T.grid(T.int64(48), 1):
-                        with T.sblock(&quot;matmul_rf_update&quot;):
-                            vax1_fused_1 = T.axis.spatial(T.int64(16), ax1_fused_1)
-                            v0 = T.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_1)
-                            vax1_fused_0 = T.axis.reduce(T.int64(48), ax1_fused_0)
-                            T.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0], layer_norm[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1], permute_dims1[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0])
-                            T.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                        with Ts.sblock(&quot;matmul_rf_update&quot;):
+                            vax1_fused_1 = Ts.axis.spatial(T.int64(16), ax1_fused_1)
+                            v0 = Ts.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_1)
+                            vax1_fused_0 = Ts.axis.reduce(T.int64(48), ax1_fused_0)
+                            Ts.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0], layer_norm[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1], permute_dims1[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0])
+                            Ts.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
                             matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] = matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] + layer_norm[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1] * permute_dims1[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0]
             for ax1_fused in T.thread_binding(T.int64(16), thread=&quot;threadIdx.x&quot;):
                 for ax0 in T.thread_binding(T.int64(16), thread=&quot;threadIdx.y&quot;):
-                    with T.sblock(&quot;matmul&quot;):
-                        vax1_fused_1 = T.axis.reduce(T.int64(16), ax0)
-                        v0 = T.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax1_fused)
-                        T.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
-                        T.writes(matmul_intermediate_local[T.int64(0), v0])
-                        with T.init():
+                    with Ts.sblock(&quot;matmul&quot;):
+                        vax1_fused_1 = Ts.axis.reduce(T.int64(16), ax0)
+                        v0 = Ts.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax1_fused)
+                        Ts.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                        Ts.writes(matmul_intermediate_local[T.int64(0), v0])
+                        with Ts.init():
                             matmul_intermediate_local[T.int64(0), v0] = T.float32(0.0)
                         matmul_intermediate_local[T.int64(0), v0] = matmul_intermediate_local[T.int64(0), v0] + matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0]
             for ax0_fused_0_1 in T.thread_binding(T.int64(16), thread=&quot;threadIdx.x&quot;):
                 for ax0_fused_1 in range(T.int64(1)):
-                    with T.sblock(&quot;T_add&quot;):
-                        v0 = T.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_0_1 + ax0_fused_1)
-                        T.reads(matmul_intermediate_local[T.int64(0), v0], fc2_bias[v0])
-                        T.writes(T_add_intermediate[T.int64(0), v0])
+                    with Ts.sblock(&quot;T_add&quot;):
+                        v0 = Ts.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_0_1 + ax0_fused_1)
+                        Ts.reads(matmul_intermediate_local[T.int64(0), v0], fc2_bias[v0])
+                        Ts.writes(T_add_intermediate[T.int64(0), v0])
                         T_add_intermediate[T.int64(0), v0] = matmul_intermediate_local[T.int64(0), v0] + fc2_bias[v0]
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def fused_matmul_add_relu(x: T.Buffer((T.int64(1), T.int64(768)), &quot;float32&quot;), permute_dims: T.Buffer((T.int64(768), T.int64(768)), &quot;float32&quot;), fc1_bias: T.Buffer((T.int64(768),), &quot;float32&quot;), compute_intermediate: T.Buffer((T.int64(1), T.int64(768)), &quot;float32&quot;)):
         T.func_attr({&quot;tirx.is_scheduled&quot;: True, &quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
-        matmul_intermediate_local = T.sblock_alloc_buffer((T.int64(1), T.int64(768)), scope=&quot;local&quot;)
-        matmul_intermediate_rf_local = T.sblock_alloc_buffer((T.int64(16), T.int64(1), T.int64(768)), scope=&quot;local&quot;)
+        # with Ts.sblock(&quot;root&quot;):
+        matmul_intermediate_local = Ts.sblock_alloc_buffer((T.int64(1), T.int64(768)), scope=&quot;local&quot;)
+        matmul_intermediate_rf_local = Ts.sblock_alloc_buffer((T.int64(16), T.int64(1), T.int64(768)), scope=&quot;local&quot;)
         for ax0_fused_0 in T.thread_binding(T.int64(48), thread=&quot;blockIdx.x&quot;):
             for ax0_fused_1 in T.thread_binding(T.int64(16), thread=&quot;threadIdx.x&quot;):
                 for ax1_fused_1 in T.thread_binding(T.int64(16), thread=&quot;threadIdx.y&quot;):
-                    with T.sblock(&quot;matmul_rf_init&quot;):
-                        vax1_fused_1 = T.axis.spatial(T.int64(16), ax1_fused_1)
-                        v0 = T.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_1)
-                        T.reads()
-                        T.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                    with Ts.sblock(&quot;matmul_rf_init&quot;):
+                        vax1_fused_1 = Ts.axis.spatial(T.int64(16), ax1_fused_1)
+                        v0 = Ts.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_1)
+                        Ts.reads()
+                        Ts.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
                         matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] = T.float32(0.0)
                     for ax1_fused_0, u in T.grid(T.int64(48), 1):
-                        with T.sblock(&quot;matmul_rf_update&quot;):
-                            vax1_fused_1 = T.axis.spatial(T.int64(16), ax1_fused_1)
-                            v0 = T.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_1)
-                            vax1_fused_0 = T.axis.reduce(T.int64(48), ax1_fused_0)
-                            T.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0], x[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1], permute_dims[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0])
-                            T.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                        with Ts.sblock(&quot;matmul_rf_update&quot;):
+                            vax1_fused_1 = Ts.axis.spatial(T.int64(16), ax1_fused_1)
+                            v0 = Ts.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_1)
+                            vax1_fused_0 = Ts.axis.reduce(T.int64(48), ax1_fused_0)
+                            Ts.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0], x[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1], permute_dims[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0])
+                            Ts.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
                             matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] = matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] + x[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1] * permute_dims[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0]
             for ax1_fused in T.thread_binding(T.int64(16), thread=&quot;threadIdx.x&quot;):
                 for ax0 in T.thread_binding(T.int64(16), thread=&quot;threadIdx.y&quot;):
-                    with T.sblock(&quot;matmul&quot;):
-                        vax1_fused_1 = T.axis.reduce(T.int64(16), ax0)
-                        v0 = T.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax1_fused)
-                        T.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
-                        T.writes(matmul_intermediate_local[T.int64(0), v0])
-                        with T.init():
+                    with Ts.sblock(&quot;matmul&quot;):
+                        vax1_fused_1 = Ts.axis.reduce(T.int64(16), ax0)
+                        v0 = Ts.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax1_fused)
+                        Ts.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                        Ts.writes(matmul_intermediate_local[T.int64(0), v0])
+                        with Ts.init():
                             matmul_intermediate_local[T.int64(0), v0] = T.float32(0.0)
                         matmul_intermediate_local[T.int64(0), v0] = matmul_intermediate_local[T.int64(0), v0] + matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0]
             for ax0_fused_0_1 in T.thread_binding(T.int64(16), thread=&quot;threadIdx.x&quot;):
                 for ax0_fused_1 in range(T.int64(1)):
-                    with T.sblock(&quot;compute&quot;):
-                        v0 = T.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_0_1 + ax0_fused_1)
-                        T.reads(matmul_intermediate_local[T.int64(0), v0], fc1_bias[v0])
-                        T.writes(compute_intermediate[T.int64(0), v0])
+                    with Ts.sblock(&quot;compute&quot;):
+                        v0 = Ts.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_0_1 + ax0_fused_1)
+                        Ts.reads(matmul_intermediate_local[T.int64(0), v0], fc1_bias[v0])
+                        Ts.writes(compute_intermediate[T.int64(0), v0])
                         compute_intermediate[T.int64(0), v0] = T.max(matmul_intermediate_local[T.int64(0), v0] + fc1_bias[v0], T.float32(0.0))
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def layer_norm(relu: T.Buffer((T.int64(1), T.int64(768)), &quot;float32&quot;), norm_weight: T.Buffer((T.int64(768),), &quot;float32&quot;), norm_bias: T.Buffer((T.int64(768),), &quot;float32&quot;), T_layer_norm: T.Buffer((T.int64(1), T.int64(768)), &quot;float32&quot;)):
         T.func_attr({&quot;op_pattern&quot;: 4, &quot;tirx.is_scheduled&quot;: True, &quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
-        relu_sum_shared = T.sblock_alloc_buffer((T.int64(1),), scope=&quot;shared&quot;)
-        relu_var_sum_shared = T.sblock_alloc_buffer((T.int64(1),), scope=&quot;shared&quot;)
+        # with Ts.sblock(&quot;root&quot;):
+        relu_sum_shared = Ts.sblock_alloc_buffer((T.int64(1),), scope=&quot;shared&quot;)
+        relu_var_sum_shared = Ts.sblock_alloc_buffer((T.int64(1),), scope=&quot;shared&quot;)
         for ax0_fused in T.thread_binding(T.int64(1), thread=&quot;blockIdx.x&quot;):
             for ax0 in range(T.int64(1)):
                 for ax1_fused_1 in T.thread_binding(T.int64(256), thread=&quot;threadIdx.x&quot;):
                     for ax1_fused_0 in T.serial(T.int64(3), annotations={&quot;pragma_auto_unroll_max_step&quot;: 256, &quot;pragma_unroll_explicit&quot;: 1}):
-                        with T.sblock(&quot;relu_sum&quot;):
-                            v0 = T.axis.spatial(T.int64(1), ax0)
-                            v1 = T.axis.reduce(T.int64(768), ax1_fused_0 * T.int64(256) + ax1_fused_1)
-                            T.reads(relu[T.int64(0), v1])
-                            T.writes(relu_sum_shared[T.int64(0)])
-                            with T.init():
+                        with Ts.sblock(&quot;relu_sum&quot;):
+                            v0 = Ts.axis.spatial(T.int64(1), ax0)
+                            v1 = Ts.axis.reduce(T.int64(768), ax1_fused_0 * T.int64(256) + ax1_fused_1)
+                            Ts.reads(relu[T.int64(0), v1])
+                            Ts.writes(relu_sum_shared[T.int64(0)])
+                            with Ts.init():
                                 relu_sum_shared[T.int64(0)] = T.float32(0.0)
                             relu_sum_shared[T.int64(0)] = relu_sum_shared[T.int64(0)] + relu[T.int64(0), v1]
             for ax0 in range(T.int64(1)):
                 for ax1_fused_1 in T.thread_binding(T.int64(256), thread=&quot;threadIdx.x&quot;):
                     for ax1_fused_0 in T.serial(T.int64(3), annotations={&quot;pragma_auto_unroll_max_step&quot;: 256, &quot;pragma_unroll_explicit&quot;: 1}):
-                        with T.sblock(&quot;relu_var_sum&quot;):
-                            v0 = T.axis.spatial(T.int64(1), ax0)
-                            v1 = T.axis.reduce(T.int64(768), ax1_fused_0 * T.int64(256) + ax1_fused_1)
-                            T.reads(relu[T.int64(0), v1], relu_sum_shared[T.int64(0)])
-                            T.writes(relu_var_sum_shared[T.int64(0)])
-                            with T.init():
+                        with Ts.sblock(&quot;relu_var_sum&quot;):
+                            v0 = Ts.axis.spatial(T.int64(1), ax0)
+                            v1 = Ts.axis.reduce(T.int64(768), ax1_fused_0 * T.int64(256) + ax1_fused_1)
+                            Ts.reads(relu[T.int64(0), v1], relu_sum_shared[T.int64(0)])
+                            Ts.writes(relu_var_sum_shared[T.int64(0)])
+                            with Ts.init():
                                 relu_var_sum_shared[T.int64(0)] = T.float32(0.0)
                             relu_var_sum_shared[T.int64(0)] = relu_var_sum_shared[T.int64(0)] + (relu[T.int64(0), v1] - relu_sum_shared[T.int64(0)] / T.float32(768.0)) * (relu[T.int64(0), v1] - relu_sum_shared[T.int64(0)] / T.float32(768.0))
             for ax1_1 in T.thread_binding(T.int64(256), thread=&quot;threadIdx.x&quot;):
                 for ax1_0 in T.serial(T.int64(3), annotations={&quot;pragma_auto_unroll_max_step&quot;: 256, &quot;pragma_unroll_explicit&quot;: 1}):
-                    with T.sblock(&quot;T_layer_norm&quot;):
-                        v0 = T.axis.spatial(T.int64(1), T.int64(0))
-                        v1 = T.axis.spatial(T.int64(768), ax1_0 * T.int64(256) + ax1_1)
-                        T.reads(relu[T.int64(0), v1], relu_sum_shared[T.int64(0)], relu_var_sum_shared[T.int64(0)], norm_weight[v1], norm_bias[v1])
-                        T.writes(T_layer_norm[T.int64(0), v1])
+                    with Ts.sblock(&quot;T_layer_norm&quot;):
+                        v0 = Ts.axis.spatial(T.int64(1), T.int64(0))
+                        v1 = Ts.axis.spatial(T.int64(768), ax1_0 * T.int64(256) + ax1_1)
+                        Ts.reads(relu[T.int64(0), v1], relu_sum_shared[T.int64(0)], relu_var_sum_shared[T.int64(0)], norm_weight[v1], norm_bias[v1])
+                        Ts.writes(T_layer_norm[T.int64(0), v1])
                         T_layer_norm[T.int64(0), v1] = (relu[T.int64(0), v1] - relu_sum_shared[T.int64(0)] / T.float32(768.0)) * T.rsqrt(relu_var_sum_shared[T.int64(0)] / T.float32(768.0) + T.float32(1.0000000000000001e-05)) * norm_weight[v1] + norm_bias[v1]
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def transpose(fc1_weight: T.Buffer((T.int64(768), T.int64(768)), &quot;float32&quot;), T_transpose: T.Buffer((T.int64(768), T.int64(768)), &quot;float32&quot;)):
         T.func_attr({&quot;op_pattern&quot;: 2, &quot;tirx.is_scheduled&quot;: True, &quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for ax0_ax1_fused_0 in T.thread_binding(T.int64(576), thread=&quot;blockIdx.x&quot;):
             for ax0_ax1_fused_1 in T.thread_binding(T.int64(1024), thread=&quot;threadIdx.x&quot;):
-                with T.sblock(&quot;T_transpose&quot;):
-                    v0 = T.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) // T.int64(768))
-                    v1 = T.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) % T.int64(768))
-                    T.reads(fc1_weight[v1, v0])
-                    T.writes(T_transpose[v0, v1])
+                with Ts.sblock(&quot;T_transpose&quot;):
+                    v0 = Ts.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) // T.int64(768))
+                    v1 = Ts.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) % T.int64(768))
+                    Ts.reads(fc1_weight[v1, v0])
+                    Ts.writes(T_transpose[v0, v1])
                     T_transpose[v0, v1] = fc1_weight[v1, v0]
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def transpose1(fc2_weight: T.Buffer((T.int64(256), T.int64(768)), &quot;float32&quot;), T_transpose: T.Buffer((T.int64(768), T.int64(256)), &quot;float32&quot;)):
         T.func_attr({&quot;op_pattern&quot;: 2, &quot;tirx.is_scheduled&quot;: True, &quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for ax0_ax1_fused_0 in T.thread_binding(T.int64(192), thread=&quot;blockIdx.x&quot;):
             for ax0_ax1_fused_1 in T.thread_binding(T.int64(1024), thread=&quot;threadIdx.x&quot;):
-                with T.sblock(&quot;T_transpose&quot;):
-                    v0 = T.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) // T.int64(256))
-                    v1 = T.axis.spatial(T.int64(256), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) % T.int64(256))
-                    T.reads(fc2_weight[v1, v0])
-                    T.writes(T_transpose[v0, v1])
+                with Ts.sblock(&quot;T_transpose&quot;):
+                    v0 = Ts.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) // T.int64(256))
+                    v1 = Ts.axis.spatial(T.int64(256), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) % T.int64(256))
+                    Ts.reads(fc2_weight[v1, v0])
+                    Ts.writes(T_transpose[v0, v1])
                     T_transpose[v0, v1] = fc2_weight[v1, v0]
 
     @R.function
@@ -1137,154 +1138,155 @@ with <code class="docutils literal notranslate"><span class="pre">op_names</span
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span># from tvm.script import ir as I
 # from tvm.script import tirx as T
 # from tvm.tirx.layout import Axis
+# from tvm.script import s_tir as Ts
 # from tvm.script import relax as R
 
 @I.ir_module
 class Module:
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def fused_matmul1_add1(layer_norm: T.Buffer((T.int64(1), T.int64(768)), &quot;float32&quot;), permute_dims1: T.Buffer((T.int64(768), T.int64(256)), &quot;float32&quot;), fc2_bias: T.Buffer((T.int64(256),), &quot;float32&quot;), T_add_intermediate: T.Buffer((T.int64(1), T.int64(256)), &quot;float32&quot;)):
         T.func_attr({&quot;tirx.is_scheduled&quot;: True, &quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
-        matmul_intermediate_local = T.sblock_alloc_buffer((T.int64(1), T.int64(256)), scope=&quot;local&quot;)
-        matmul_intermediate_rf_local = T.sblock_alloc_buffer((T.int64(16), T.int64(1), T.int64(256)), scope=&quot;local&quot;)
+        # with Ts.sblock(&quot;root&quot;):
+        matmul_intermediate_local = Ts.sblock_alloc_buffer((T.int64(1), T.int64(256)), scope=&quot;local&quot;)
+        matmul_intermediate_rf_local = Ts.sblock_alloc_buffer((T.int64(16), T.int64(1), T.int64(256)), scope=&quot;local&quot;)
         for ax0_fused_0 in T.thread_binding(T.int64(16), thread=&quot;blockIdx.x&quot;):
             for ax0_fused_1 in T.thread_binding(T.int64(16), thread=&quot;threadIdx.x&quot;):
                 for ax1_fused_1 in T.thread_binding(T.int64(16), thread=&quot;threadIdx.y&quot;):
-                    with T.sblock(&quot;matmul_rf_init&quot;):
-                        vax1_fused_1 = T.axis.spatial(T.int64(16), ax1_fused_1)
-                        v0 = T.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_1)
-                        T.reads()
-                        T.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                    with Ts.sblock(&quot;matmul_rf_init&quot;):
+                        vax1_fused_1 = Ts.axis.spatial(T.int64(16), ax1_fused_1)
+                        v0 = Ts.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_1)
+                        Ts.reads()
+                        Ts.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
                         matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] = T.float32(0.0)
                     for ax1_fused_0, u in T.grid(T.int64(48), 1):
-                        with T.sblock(&quot;matmul_rf_update&quot;):
-                            vax1_fused_1 = T.axis.spatial(T.int64(16), ax1_fused_1)
-                            v0 = T.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_1)
-                            vax1_fused_0 = T.axis.reduce(T.int64(48), ax1_fused_0)
-                            T.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0], layer_norm[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1], permute_dims1[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0])
-                            T.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                        with Ts.sblock(&quot;matmul_rf_update&quot;):
+                            vax1_fused_1 = Ts.axis.spatial(T.int64(16), ax1_fused_1)
+                            v0 = Ts.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_1)
+                            vax1_fused_0 = Ts.axis.reduce(T.int64(48), ax1_fused_0)
+                            Ts.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0], layer_norm[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1], permute_dims1[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0])
+                            Ts.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
                             matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] = matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] + layer_norm[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1] * permute_dims1[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0]
             for ax1_fused in T.thread_binding(T.int64(16), thread=&quot;threadIdx.x&quot;):
                 for ax0 in T.thread_binding(T.int64(16), thread=&quot;threadIdx.y&quot;):
-                    with T.sblock(&quot;matmul&quot;):
-                        vax1_fused_1 = T.axis.reduce(T.int64(16), ax0)
-                        v0 = T.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax1_fused)
-                        T.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
-                        T.writes(matmul_intermediate_local[T.int64(0), v0])
-                        with T.init():
+                    with Ts.sblock(&quot;matmul&quot;):
+                        vax1_fused_1 = Ts.axis.reduce(T.int64(16), ax0)
+                        v0 = Ts.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax1_fused)
+                        Ts.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                        Ts.writes(matmul_intermediate_local[T.int64(0), v0])
+                        with Ts.init():
                             matmul_intermediate_local[T.int64(0), v0] = T.float32(0.0)
                         matmul_intermediate_local[T.int64(0), v0] = matmul_intermediate_local[T.int64(0), v0] + matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0]
             for ax0_fused_0_1 in T.thread_binding(T.int64(16), thread=&quot;threadIdx.x&quot;):
                 for ax0_fused_1 in range(T.int64(1)):
-                    with T.sblock(&quot;T_add&quot;):
-                        v0 = T.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_0_1 + ax0_fused_1)
-                        T.reads(matmul_intermediate_local[T.int64(0), v0], fc2_bias[v0])
-                        T.writes(T_add_intermediate[T.int64(0), v0])
+                    with Ts.sblock(&quot;T_add&quot;):
+                        v0 = Ts.axis.spatial(T.int64(256), ax0_fused_0 * T.int64(16) + ax0_fused_0_1 + ax0_fused_1)
+                        Ts.reads(matmul_intermediate_local[T.int64(0), v0], fc2_bias[v0])
+                        Ts.writes(T_add_intermediate[T.int64(0), v0])
                         T_add_intermediate[T.int64(0), v0] = matmul_intermediate_local[T.int64(0), v0] + fc2_bias[v0]
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def fused_matmul_add_relu(x: T.Buffer((T.int64(1), T.int64(768)), &quot;float32&quot;), permute_dims: T.Buffer((T.int64(768), T.int64(768)), &quot;float32&quot;), fc1_bias: T.Buffer((T.int64(768),), &quot;float32&quot;), compute_intermediate: T.Buffer((T.int64(1), T.int64(768)), &quot;float32&quot;)):
         T.func_attr({&quot;tirx.is_scheduled&quot;: True, &quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
-        matmul_intermediate_local = T.sblock_alloc_buffer((T.int64(1), T.int64(768)), scope=&quot;local&quot;)
-        matmul_intermediate_rf_local = T.sblock_alloc_buffer((T.int64(16), T.int64(1), T.int64(768)), scope=&quot;local&quot;)
+        # with Ts.sblock(&quot;root&quot;):
+        matmul_intermediate_local = Ts.sblock_alloc_buffer((T.int64(1), T.int64(768)), scope=&quot;local&quot;)
+        matmul_intermediate_rf_local = Ts.sblock_alloc_buffer((T.int64(16), T.int64(1), T.int64(768)), scope=&quot;local&quot;)
         for ax0_fused_0 in T.thread_binding(T.int64(48), thread=&quot;blockIdx.x&quot;):
             for ax0_fused_1 in T.thread_binding(T.int64(16), thread=&quot;threadIdx.x&quot;):
                 for ax1_fused_1 in T.thread_binding(T.int64(16), thread=&quot;threadIdx.y&quot;):
-                    with T.sblock(&quot;matmul_rf_init&quot;):
-                        vax1_fused_1 = T.axis.spatial(T.int64(16), ax1_fused_1)
-                        v0 = T.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_1)
-                        T.reads()
-                        T.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                    with Ts.sblock(&quot;matmul_rf_init&quot;):
+                        vax1_fused_1 = Ts.axis.spatial(T.int64(16), ax1_fused_1)
+                        v0 = Ts.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_1)
+                        Ts.reads()
+                        Ts.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
                         matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] = T.float32(0.0)
                     for ax1_fused_0, u in T.grid(T.int64(48), 1):
-                        with T.sblock(&quot;matmul_rf_update&quot;):
-                            vax1_fused_1 = T.axis.spatial(T.int64(16), ax1_fused_1)
-                            v0 = T.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_1)
-                            vax1_fused_0 = T.axis.reduce(T.int64(48), ax1_fused_0)
-                            T.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0], x[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1], permute_dims[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0])
-                            T.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                        with Ts.sblock(&quot;matmul_rf_update&quot;):
+                            vax1_fused_1 = Ts.axis.spatial(T.int64(16), ax1_fused_1)
+                            v0 = Ts.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_1)
+                            vax1_fused_0 = Ts.axis.reduce(T.int64(48), ax1_fused_0)
+                            Ts.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0], x[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1], permute_dims[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0])
+                            Ts.writes(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
                             matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] = matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0] + x[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1] * permute_dims[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0]
             for ax1_fused in T.thread_binding(T.int64(16), thread=&quot;threadIdx.x&quot;):
                 for ax0 in T.thread_binding(T.int64(16), thread=&quot;threadIdx.y&quot;):
-                    with T.sblock(&quot;matmul&quot;):
-                        vax1_fused_1 = T.axis.reduce(T.int64(16), ax0)
-                        v0 = T.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax1_fused)
-                        T.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
-                        T.writes(matmul_intermediate_local[T.int64(0), v0])
-                        with T.init():
+                    with Ts.sblock(&quot;matmul&quot;):
+                        vax1_fused_1 = Ts.axis.reduce(T.int64(16), ax0)
+                        v0 = Ts.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax1_fused)
+                        Ts.reads(matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0])
+                        Ts.writes(matmul_intermediate_local[T.int64(0), v0])
+                        with Ts.init():
                             matmul_intermediate_local[T.int64(0), v0] = T.float32(0.0)
                         matmul_intermediate_local[T.int64(0), v0] = matmul_intermediate_local[T.int64(0), v0] + matmul_intermediate_rf_local[vax1_fused_1, T.int64(0), v0]
             for ax0_fused_0_1 in T.thread_binding(T.int64(16), thread=&quot;threadIdx.x&quot;):
                 for ax0_fused_1 in range(T.int64(1)):
-                    with T.sblock(&quot;compute&quot;):
-                        v0 = T.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_0_1 + ax0_fused_1)
-                        T.reads(matmul_intermediate_local[T.int64(0), v0], fc1_bias[v0])
-                        T.writes(compute_intermediate[T.int64(0), v0])
+                    with Ts.sblock(&quot;compute&quot;):
+                        v0 = Ts.axis.spatial(T.int64(768), ax0_fused_0 * T.int64(16) + ax0_fused_0_1 + ax0_fused_1)
+                        Ts.reads(matmul_intermediate_local[T.int64(0), v0], fc1_bias[v0])
+                        Ts.writes(compute_intermediate[T.int64(0), v0])
                         compute_intermediate[T.int64(0), v0] = T.max(matmul_intermediate_local[T.int64(0), v0] + fc1_bias[v0], T.float32(0.0))
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def layer_norm(relu: T.Buffer((T.int64(1), T.int64(768)), &quot;float32&quot;), norm_weight: T.Buffer((T.int64(768),), &quot;float32&quot;), norm_bias: T.Buffer((T.int64(768),), &quot;float32&quot;), T_layer_norm: T.Buffer((T.int64(1), T.int64(768)), &quot;float32&quot;)):
         T.func_attr({&quot;op_pattern&quot;: 4, &quot;tirx.is_scheduled&quot;: True, &quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
-        relu_sum_shared = T.sblock_alloc_buffer((T.int64(1),), scope=&quot;shared&quot;)
-        relu_var_sum_shared = T.sblock_alloc_buffer((T.int64(1),), scope=&quot;shared&quot;)
+        # with Ts.sblock(&quot;root&quot;):
+        relu_sum_shared = Ts.sblock_alloc_buffer((T.int64(1),), scope=&quot;shared&quot;)
+        relu_var_sum_shared = Ts.sblock_alloc_buffer((T.int64(1),), scope=&quot;shared&quot;)
         for ax0_fused in T.thread_binding(T.int64(1), thread=&quot;blockIdx.x&quot;):
             for ax0 in range(T.int64(1)):
                 for ax1_fused_1 in T.thread_binding(T.int64(256), thread=&quot;threadIdx.x&quot;):
                     for ax1_fused_0 in T.serial(T.int64(3), annotations={&quot;pragma_auto_unroll_max_step&quot;: 256, &quot;pragma_unroll_explicit&quot;: 1}):
-                        with T.sblock(&quot;relu_sum&quot;):
-                            v0 = T.axis.spatial(T.int64(1), ax0)
-                            v1 = T.axis.reduce(T.int64(768), ax1_fused_0 * T.int64(256) + ax1_fused_1)
-                            T.reads(relu[T.int64(0), v1])
-                            T.writes(relu_sum_shared[T.int64(0)])
-                            with T.init():
+                        with Ts.sblock(&quot;relu_sum&quot;):
+                            v0 = Ts.axis.spatial(T.int64(1), ax0)
+                            v1 = Ts.axis.reduce(T.int64(768), ax1_fused_0 * T.int64(256) + ax1_fused_1)
+                            Ts.reads(relu[T.int64(0), v1])
+                            Ts.writes(relu_sum_shared[T.int64(0)])
+                            with Ts.init():
                                 relu_sum_shared[T.int64(0)] = T.float32(0.0)
                             relu_sum_shared[T.int64(0)] = relu_sum_shared[T.int64(0)] + relu[T.int64(0), v1]
             for ax0 in range(T.int64(1)):
                 for ax1_fused_1 in T.thread_binding(T.int64(256), thread=&quot;threadIdx.x&quot;):
                     for ax1_fused_0 in T.serial(T.int64(3), annotations={&quot;pragma_auto_unroll_max_step&quot;: 256, &quot;pragma_unroll_explicit&quot;: 1}):
-                        with T.sblock(&quot;relu_var_sum&quot;):
-                            v0 = T.axis.spatial(T.int64(1), ax0)
-                            v1 = T.axis.reduce(T.int64(768), ax1_fused_0 * T.int64(256) + ax1_fused_1)
-                            T.reads(relu[T.int64(0), v1], relu_sum_shared[T.int64(0)])
-                            T.writes(relu_var_sum_shared[T.int64(0)])
-                            with T.init():
+                        with Ts.sblock(&quot;relu_var_sum&quot;):
+                            v0 = Ts.axis.spatial(T.int64(1), ax0)
+                            v1 = Ts.axis.reduce(T.int64(768), ax1_fused_0 * T.int64(256) + ax1_fused_1)
+                            Ts.reads(relu[T.int64(0), v1], relu_sum_shared[T.int64(0)])
+                            Ts.writes(relu_var_sum_shared[T.int64(0)])
+                            with Ts.init():
                                 relu_var_sum_shared[T.int64(0)] = T.float32(0.0)
                             relu_var_sum_shared[T.int64(0)] = relu_var_sum_shared[T.int64(0)] + (relu[T.int64(0), v1] - relu_sum_shared[T.int64(0)] / T.float32(768.0)) * (relu[T.int64(0), v1] - relu_sum_shared[T.int64(0)] / T.float32(768.0))
             for ax1_1 in T.thread_binding(T.int64(256), thread=&quot;threadIdx.x&quot;):
                 for ax1_0 in T.serial(T.int64(3), annotations={&quot;pragma_auto_unroll_max_step&quot;: 256, &quot;pragma_unroll_explicit&quot;: 1}):
-                    with T.sblock(&quot;T_layer_norm&quot;):
-                        v0 = T.axis.spatial(T.int64(1), T.int64(0))
-                        v1 = T.axis.spatial(T.int64(768), ax1_0 * T.int64(256) + ax1_1)
-                        T.reads(relu[T.int64(0), v1], relu_sum_shared[T.int64(0)], relu_var_sum_shared[T.int64(0)], norm_weight[v1], norm_bias[v1])
-                        T.writes(T_layer_norm[T.int64(0), v1])
+                    with Ts.sblock(&quot;T_layer_norm&quot;):
+                        v0 = Ts.axis.spatial(T.int64(1), T.int64(0))
+                        v1 = Ts.axis.spatial(T.int64(768), ax1_0 * T.int64(256) + ax1_1)
+                        Ts.reads(relu[T.int64(0), v1], relu_sum_shared[T.int64(0)], relu_var_sum_shared[T.int64(0)], norm_weight[v1], norm_bias[v1])
+                        Ts.writes(T_layer_norm[T.int64(0), v1])
                         T_layer_norm[T.int64(0), v1] = (relu[T.int64(0), v1] - relu_sum_shared[T.int64(0)] / T.float32(768.0)) * T.rsqrt(relu_var_sum_shared[T.int64(0)] / T.float32(768.0) + T.float32(1.0000000000000001e-05)) * norm_weight[v1] + norm_bias[v1]
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def transpose(fc1_weight: T.Buffer((T.int64(768), T.int64(768)), &quot;float32&quot;), T_transpose: T.Buffer((T.int64(768), T.int64(768)), &quot;float32&quot;)):
         T.func_attr({&quot;op_pattern&quot;: 2, &quot;tirx.is_scheduled&quot;: True, &quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for ax0_ax1_fused_0 in T.thread_binding(T.int64(576), thread=&quot;blockIdx.x&quot;):
             for ax0_ax1_fused_1 in T.thread_binding(T.int64(1024), thread=&quot;threadIdx.x&quot;):
-                with T.sblock(&quot;T_transpose&quot;):
-                    v0 = T.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) // T.int64(768))
-                    v1 = T.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) % T.int64(768))
-                    T.reads(fc1_weight[v1, v0])
-                    T.writes(T_transpose[v0, v1])
+                with Ts.sblock(&quot;T_transpose&quot;):
+                    v0 = Ts.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) // T.int64(768))
+                    v1 = Ts.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) % T.int64(768))
+                    Ts.reads(fc1_weight[v1, v0])
+                    Ts.writes(T_transpose[v0, v1])
                     T_transpose[v0, v1] = fc1_weight[v1, v0]
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def transpose1(fc2_weight: T.Buffer((T.int64(256), T.int64(768)), &quot;float32&quot;), T_transpose: T.Buffer((T.int64(768), T.int64(256)), &quot;float32&quot;)):
         T.func_attr({&quot;op_pattern&quot;: 2, &quot;tirx.is_scheduled&quot;: True, &quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for ax0_ax1_fused_0 in T.thread_binding(T.int64(192), thread=&quot;blockIdx.x&quot;):
             for ax0_ax1_fused_1 in T.thread_binding(T.int64(1024), thread=&quot;threadIdx.x&quot;):
-                with T.sblock(&quot;T_transpose&quot;):
-                    v0 = T.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) // T.int64(256))
-                    v1 = T.axis.spatial(T.int64(256), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) % T.int64(256))
-                    T.reads(fc2_weight[v1, v0])
-                    T.writes(T_transpose[v0, v1])
+                with Ts.sblock(&quot;T_transpose&quot;):
+                    v0 = Ts.axis.spatial(T.int64(768), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) // T.int64(256))
+                    v1 = Ts.axis.spatial(T.int64(256), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) % T.int64(256))
+                    Ts.reads(fc2_weight[v1, v0])
+                    Ts.writes(T_transpose[v0, v1])
                     T_transpose[v0, v1] = fc2_weight[v1, v0]
 
     @R.function
diff --git a/docs/deep_dive/tensor_ir/tutorials/sg_execution_times.html b/docs/deep_dive/tensor_ir/tutorials/sg_execution_times.html
index fd97211ffe7..0a8a45201ee 100644
--- a/docs/deep_dive/tensor_ir/tutorials/sg_execution_times.html
+++ b/docs/deep_dive/tensor_ir/tutorials/sg_execution_times.html
@@ -634,7 +634,7 @@ document.write(`
                   
   <section id="computation-times">
 <span id="sphx-glr-deep-dive-tensor-ir-tutorials-sg-execution-times"></span><h1>Computation times<a class="headerlink" href="#computation-times" title="Link to this heading">#</a></h1>
-<p><strong>00:00.524</strong> total execution time for 4 files <strong>from deep_dive/tensor_ir/tutorials</strong>:</p>
+<p><strong>00:00.520</strong> total execution time for 4 files <strong>from deep_dive/tensor_ir/tutorials</strong>:</p>
 <div class="docutils container">
 <style scoped>
 <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet" />
@@ -656,15 +656,15 @@ $(document).ready( function () {
 </thead>
 <tbody>
 <tr class="row-even"><td><p><a class="reference internal" href="tir_transformation.html#sphx-glr-deep-dive-tensor-ir-tutorials-tir-transformation-py"><span class="std std-ref">Transformation</span></a> (<code class="docutils literal notranslate"><span class="pre">tir_transformation.py</span></code>)</p></td>
-<td><p>00:00.262</p></td>
+<td><p>00:00.259</p></td>
 <td><p>0.0</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="tir_creation.html#sphx-glr-deep-dive-tensor-ir-tutorials-tir-creation-py"><span class="std std-ref">TensorIR Creation</span></a> (<code class="docutils literal notranslate"><span class="pre">tir_creation.py</span></code>)</p></td>
-<td><p>00:00.130</p></td>
+<td><p>00:00.128</p></td>
 <td><p>0.0</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="dlight_gpu_scheduling.html#sphx-glr-deep-dive-tensor-ir-tutorials-dlight-gpu-scheduling-py"><span class="std std-ref">DLight: Rule-Based GPU Scheduling</span></a> (<code class="docutils literal notranslate"><span class="pre">dlight_gpu_scheduling.py</span></code>)</p></td>
-<td><p>00:00.124</p></td>
+<td><p>00:00.125</p></td>
 <td><p>0.0</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="meta_schedule.html#sphx-glr-deep-dive-tensor-ir-tutorials-meta-schedule-py"><span class="std std-ref">MetaSchedule: Search-Based Auto-Tuning</span></a> (<code class="docutils literal notranslate"><span class="pre">meta_schedule.py</span></code>)</p></td>
diff --git a/docs/deep_dive/tensor_ir/tutorials/tir_creation.html b/docs/deep_dive/tensor_ir/tutorials/tir_creation.html
index 02aa67e5902..31297fd6795 100644
--- a/docs/deep_dive/tensor_ir/tutorials/tir_creation.html
+++ b/docs/deep_dive/tensor_ir/tutorials/tir_creation.html
@@ -689,12 +689,13 @@ format of the ir_module and in TVMScript:</p>
 
 <span class="kn">import</span><span class="w"> </span><span class="nn">tvm</span>
 <span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">ir</span> <span class="k">as</span> <span class="n">I</span>
+<span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">s_tir</span> <span class="k">as</span> <span class="n">Ts</span>
 <span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">tirx</span> <span class="k">as</span> <span class="n">T</span>
 
 
 <span class="nd">@I</span><span class="o">.</span><span class="n">ir_module</span>
 <span class="k">class</span><span class="w"> </span><span class="nc">MyModule</span><span class="p">:</span>
-    <span class="nd">@T</span><span class="o">.</span><span class="n">prim_func</span><span class="p">(</span><span class="n">s_tir</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="nd">@Ts</span><span class="o">.</span><span class="n">prim_func</span>
     <span class="k">def</span><span class="w"> </span><span class="nf">mm_relu</span><span class="p">(</span>
         <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">A</span></a><span class="p">:</span> <a href="../../../tirx/api/tirx.html#tvm.tirx.Buffer" title="tvm.tirx.Buffer" class="sphx-glr-backref-module-tvm-tirx sphx-glr-backref-type-py-attribute"><span class="n">T</span><span class="o">.</span><span class="n">Buffer</span></a><span class="p"> [...]
         <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">B</span></a><span class="p">:</span> <a href="../../../tirx/api/tirx.html#tvm.tirx.Buffer" title="tvm.tirx.Buffer" class="sphx-glr-backref-module-tvm-tirx sphx-glr-backref-type-py-attribute"><span class="n">T</span><span class="o">.</span><span class="n">Buffer</span></a><span class="p"> [...]
@@ -704,22 +705,22 @@ format of the ir_module and in TVMScript:</p>
         <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">128</span><span class="p">):</span>
             <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">128</span><span class="p">):</span>
                 <span class="k">for</span> <a href="../../../tirx/api/tirx.html#tvm.tirx.IterVar" title="tvm.tirx.IterVar" class="sphx-glr-backref-module-tvm-tirx sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">k</span></a> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">128</span><span class="p">):</span>
-                    <span class="k">with</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.sblock" title="tvm.script.tirx.sblock" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">sblock</span></a><span class="p">(</span><span class="s2">&quot;Y&quot;</span><span class="p">):</span>
-                        <span class="n">vi</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.axis.spatial" title="tvm.script.tirx.axis.spatial" class="sphx-glr-backref-module-tvm-script-tirx-axis sphx-glr-backref-type-py-method"><span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span></a><span class="p">(</span><span class="mi">128</span><span class="p">,</span [...]
-                        <span class="n">vj</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.axis.spatial" title="tvm.script.tirx.axis.spatial" class="sphx-glr-backref-module-tvm-script-tirx-axis sphx-glr-backref-type-py-method"><span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span></a><span class="p">(</span><span class="mi">128</span><span class="p">,</span [...]
-                        <span class="n">vk</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.axis.reduce" title="tvm.script.tirx.axis.reduce" class="sphx-glr-backref-module-tvm-script-tirx-axis sphx-glr-backref-type-py-method"><span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">reduce</span></a><span class="p">(</span><span class="mi">128</span><span class="p">,</span> < [...]
-                        <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.reads" title="tvm.script.tirx.reads" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">reads</span></a><span class="p">(</span><a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-i [...]
-                        <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.writes" title="tvm.script.tirx.writes" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">writes</span></a><span class="p">(</span><a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backre [...]
-                        <span class="k">with</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.init" title="tvm.script.tirx.init" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">init</span></a><span class="p">():</span>
+                    <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;Y&quot;</span><span class="p">):</span>
+                        <span class="n">vi</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
+                        <span class="n">vj</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span>
+                        <span class="n">vk</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">reduce</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <a href="../../../tirx/api/tirx.html#tvm.tirx.IterVar" title="tvm.tirx.IterVar" class="sphx-glr-backref-module-tvm-tirx sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">k</span></a><span  [...]
+                        <span class="n">Ts</span><span class="o">.</span><span class="n">reads</span><span class="p">(</span><a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">A</span></a><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vk</span><span class="p">],</span> <a href="../../../reference/api/py [...]
+                        <span class="n">Ts</span><span class="o">.</span><span class="n">writes</span><span class="p">(</span><a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">Y</span></a><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">])</span>
+                        <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">init</span><span class="p">():</span>
                             <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">Y</span></a><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">float32</span><span class="p">(</span><span [...]
                         <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">Y</span></a><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-mod [...]
         <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">128</span><span class="p">):</span>
             <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">128</span><span class="p">):</span>
-                <span class="k">with</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.sblock" title="tvm.script.tirx.sblock" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">sblock</span></a><span class="p">(</span><span class="s2">&quot;C&quot;</span><span class="p">):</span>
-                    <span class="n">vi</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.axis.spatial" title="tvm.script.tirx.axis.spatial" class="sphx-glr-backref-module-tvm-script-tirx-axis sphx-glr-backref-type-py-method"><span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span></a><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <s [...]
-                    <span class="n">vj</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.axis.spatial" title="tvm.script.tirx.axis.spatial" class="sphx-glr-backref-module-tvm-script-tirx-axis sphx-glr-backref-type-py-method"><span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span></a><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <s [...]
-                    <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.reads" title="tvm.script.tirx.reads" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">reads</span></a><span class="p">(</span><a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-insta [...]
-                    <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.writes" title="tvm.script.tirx.writes" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">writes</span></a><span class="p">(</span><a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-in [...]
+                <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;C&quot;</span><span class="p">):</span>
+                    <span class="n">vi</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span>
+                    <span class="n">vj</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">spatial</span><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span class="n">j</span><span class="p">)</span>
+                    <span class="n">Ts</span><span class="o">.</span><span class="n">reads</span><span class="p">(</span><a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">Y</span></a><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">])</span>
+                    <span class="n">Ts</span><span class="o">.</span><span class="n">writes</span><span class="p">(</span><a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">C</span></a><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">])</span>
                     <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">C</span></a><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.max" title="tvm.script.tirx.max" class="s [...]
 </pre></div>
 </div>
@@ -730,13 +731,13 @@ format of the ir_module and in TVMScript:</p>
 streamline the code:</p>
 <ul class="simple">
 <li><p>Utilize <code class="docutils literal notranslate"><span class="pre">T.grid</span></code> to condense nested loops;</p></li>
-<li><p>Employ <code class="docutils literal notranslate"><span class="pre">T.axis.remap</span></code> to abbreviate block iterator annotations;</p></li>
-<li><p>Exclude <code class="docutils literal notranslate"><span class="pre">T.reads</span></code> and <code class="docutils literal notranslate"><span class="pre">T.writes</span></code> for blocks whose content can
+<li><p>Employ <code class="docutils literal notranslate"><span class="pre">Ts.axis.remap</span></code> to abbreviate block iterator annotations;</p></li>
+<li><p>Exclude <code class="docutils literal notranslate"><span class="pre">Ts.reads</span></code> and <code class="docutils literal notranslate"><span class="pre">Ts.writes</span></code> for blocks whose content can
 be inferred from the block body;</p></li>
 </ul>
 <div class="highlight-Python notranslate"><div class="highlight"><pre><span></span><span class="nd">@I</span><span class="o">.</span><span class="n">ir_module</span>
 <span class="k">class</span><span class="w"> </span><span class="nc">ConciseModule</span><span class="p">:</span>
-    <span class="nd">@T</span><span class="o">.</span><span class="n">prim_func</span><span class="p">(</span><span class="n">s_tir</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="nd">@Ts</span><span class="o">.</span><span class="n">prim_func</span>
     <span class="k">def</span><span class="w"> </span><span class="nf">mm_relu</span><span class="p">(</span>
         <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">A</span></a><span class="p">:</span> <a href="../../../tirx/api/tirx.html#tvm.tirx.Buffer" title="tvm.tirx.Buffer" class="sphx-glr-backref-module-tvm-tirx sphx-glr-backref-type-py-attribute"><span class="n">T</span><span class="o">.</span><span class="n">Buffer</span></a><span class="p"> [...]
         <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">B</span></a><span class="p">:</span> <a href="../../../tirx/api/tirx.html#tvm.tirx.Buffer" title="tvm.tirx.Buffer" class="sphx-glr-backref-module-tvm-tirx sphx-glr-backref-type-py-attribute"><span class="n">T</span><span class="o">.</span><span class="n">Buffer</span></a><span class="p"> [...]
@@ -744,14 +745,14 @@ be inferred from the block body;</p></li>
     <span class="p">):</span>
         <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">Y</span></a> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.alloc_buffer" title="tvm.script.tirx.alloc_buffer" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</ [...]
         <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <a href="../../../tirx/api/tirx.html#tvm.tirx.IterVar" title="tvm.tirx.IterVar" class="sphx-glr-backref-module-tvm-tirx sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">k</span></a> <span class="ow">in</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.grid" title="tvm.script.tirx.grid" class="sphx-glr- [...]
-            <span class="k">with</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.sblock" title="tvm.script.tirx.sblock" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">sblock</span></a><span class="p">(</span><span class="s2">&quot;Y&quot;</span><span class="p">):</span>
-                <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">,</span> <span class="n">vk</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.axis.remap" title="tvm.script.tirx.axis.remap" class="sphx-glr-backref-module-tvm-script-tirx-axis sphx-glr-backref-type-py-method"><span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">rema [...]
-                <span class="k">with</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.init" title="tvm.script.tirx.init" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">init</span></a><span class="p">():</span>
+            <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;Y&quot;</span><span class="p">):</span>
+                <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">,</span> <span class="n">vk</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SSR&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class= [...]
+                <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">init</span><span class="p">():</span>
                     <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">Y</span></a><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">float32</span><span class="p">(</span><span class=" [...]
                 <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">Y</span></a><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm- [...]
         <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.grid" title="tvm.script.tirx.grid" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">grid</span></a><span class="p">(</span><span class="mi">128</span><span class="p">,</span> <span clas [...]
-            <span class="k">with</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.sblock" title="tvm.script.tirx.sblock" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">sblock</span></a><span class="p">(</span><span class="s2">&quot;C&quot;</span><span class="p">):</span>
-                <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.axis.remap" title="tvm.script.tirx.axis.remap" class="sphx-glr-backref-module-tvm-script-tirx-axis sphx-glr-backref-type-py-method"><span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span></a><span class="p">(</span><span class="s [...]
+            <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;C&quot;</span><span class="p">):</span>
+                <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SS&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">])</span>
                 <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">C</span></a><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.max" title="tvm.script.tirx.max" class="sphx- [...]
 </pre></div>
 </div>
@@ -776,7 +777,7 @@ be used to ascertain the shape and data type of a TensorIR.</p>
 <span class="c1"># IRModule in TVMScript</span>
 <span class="nd">@I</span><span class="o">.</span><span class="n">ir_module</span>
 <span class="k">class</span><span class="w"> </span><span class="nc">ConciseModuleFromPython</span><span class="p">:</span>
-    <span class="nd">@T</span><span class="o">.</span><span class="n">prim_func</span><span class="p">(</span><span class="n">s_tir</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="nd">@Ts</span><span class="o">.</span><span class="n">prim_func</span>
     <span class="k">def</span><span class="w"> </span><span class="nf">mm_relu</span><span class="p">(</span>
         <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">A</span></a><span class="p">:</span> <a href="../../../tirx/api/tirx.html#tvm.tirx.Buffer" title="tvm.tirx.Buffer" class="sphx-glr-backref-module-tvm-tirx sphx-glr-backref-type-py-attribute"><span class="n">T</span><span class="o">.</span><span class="n">Buffer</span></a><span class="p"> [...]
         <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">B</span></a><span class="p">:</span> <a href="../../../tirx/api/tirx.html#tvm.tirx.Buffer" title="tvm.tirx.Buffer" class="sphx-glr-backref-module-tvm-tirx sphx-glr-backref-type-py-attribute"><span class="n">T</span><span class="o">.</span><span class="n">Buffer</span></a><span class="p"> [...]
@@ -784,14 +785,14 @@ be used to ascertain the shape and data type of a TensorIR.</p>
     <span class="p">):</span>
         <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">Y</span></a> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.alloc_buffer" title="tvm.script.tirx.alloc_buffer" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</ [...]
         <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <a href="../../../tirx/api/tirx.html#tvm.tirx.IterVar" title="tvm.tirx.IterVar" class="sphx-glr-backref-module-tvm-tirx sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">k</span></a> <span class="ow">in</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.grid" title="tvm.script.tirx.grid" class="sphx-glr- [...]
-            <span class="k">with</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.sblock" title="tvm.script.tirx.sblock" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">sblock</span></a><span class="p">(</span><span class="s2">&quot;Y&quot;</span><span class="p">):</span>
-                <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">,</span> <span class="n">vk</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.axis.remap" title="tvm.script.tirx.axis.remap" class="sphx-glr-backref-module-tvm-script-tirx-axis sphx-glr-backref-type-py-method"><span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">rema [...]
-                <span class="k">with</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.init" title="tvm.script.tirx.init" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">init</span></a><span class="p">():</span>
+            <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;Y&quot;</span><span class="p">):</span>
+                <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">,</span> <span class="n">vk</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SSR&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class= [...]
+                <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">init</span><span class="p">():</span>
                     <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">Y</span></a><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.cast" title="tvm.script.tirx.cast" class= [...]
                 <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">Y</span></a><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm- [...]
         <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.grid" title="tvm.script.tirx.grid" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">grid</span></a><span class="p">(</span><a href="../../../reference/api/python/ir.html#tvm.ir.Var" tit [...]
-            <span class="k">with</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.sblock" title="tvm.script.tirx.sblock" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">sblock</span></a><span class="p">(</span><span class="s2">&quot;C&quot;</span><span class="p">):</span>
-                <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.axis.remap" title="tvm.script.tirx.axis.remap" class="sphx-glr-backref-module-tvm-script-tirx-axis sphx-glr-backref-type-py-method"><span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span></a><span class="p">(</span><span class="s [...]
+            <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;C&quot;</span><span class="p">):</span>
+                <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SS&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">])</span>
                 <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">C</span></a><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.max" title="tvm.script.tirx.max" class="sphx- [...]
 </pre></div>
 </div>
@@ -810,7 +811,7 @@ interaction with Python is feasible. For instance, Python variables can
 be used to ascertain the shape and data type of a TensorIR.</p>
 <div class="highlight-Python notranslate"><div class="highlight"><pre><span></span><span class="nd">@I</span><span class="o">.</span><span class="n">ir_module</span>
 <span class="k">class</span><span class="w"> </span><span class="nc">DynamicShapeModule</span><span class="p">:</span>
-    <span class="nd">@T</span><span class="o">.</span><span class="n">prim_func</span><span class="p">(</span><span class="n">s_tir</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="nd">@Ts</span><span class="o">.</span><span class="n">prim_func</span>
     <span class="k">def</span><span class="w"> </span><span class="nf">mm_relu</span><span class="p">(</span><span class="n">a</span><span class="p">:</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.handle" title="tvm.script.tirx.handle" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">handle</span></a><span class="p">,</span> <span class="n">b</span><span cla [...]
         <span class="c1"># Dynamic shape definition</span>
         <a href="../../../reference/api/python/ir.html#tvm.ir.Var" title="tvm.ir.Var" class="sphx-glr-backref-module-tvm-ir sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">M</span></a> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">int32</span><span class="p">()</span>
@@ -823,14 +824,14 @@ be used to ascertain the shape and data type of a TensorIR.</p>
         <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">C</span></a> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.match_buffer" title="tvm.script.tirx.match_buffer" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</ [...]
         <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">Y</span></a> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.alloc_buffer" title="tvm.script.tirx.alloc_buffer" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</ [...]
         <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <a href="../../../tirx/api/tirx.html#tvm.tirx.IterVar" title="tvm.tirx.IterVar" class="sphx-glr-backref-module-tvm-tirx sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">k</span></a> <span class="ow">in</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.grid" title="tvm.script.tirx.grid" class="sphx-glr- [...]
-            <span class="k">with</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.sblock" title="tvm.script.tirx.sblock" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">sblock</span></a><span class="p">(</span><span class="s2">&quot;Y&quot;</span><span class="p">):</span>
-                <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">,</span> <span class="n">vk</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.axis.remap" title="tvm.script.tirx.axis.remap" class="sphx-glr-backref-module-tvm-script-tirx-axis sphx-glr-backref-type-py-method"><span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">rema [...]
-                <span class="k">with</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.init" title="tvm.script.tirx.init" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">init</span></a><span class="p">():</span>
+            <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;Y&quot;</span><span class="p">):</span>
+                <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">,</span> <span class="n">vk</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SSR&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class= [...]
+                <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">init</span><span class="p">():</span>
                     <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">Y</span></a><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.cast" title="tvm.script.tirx.cast" class= [...]
                 <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">Y</span></a><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm- [...]
         <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span> <span class="ow">in</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.grid" title="tvm.script.tirx.grid" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">grid</span></a><span class="p">(</span><a href="../../../reference/api/python/ir.html#tvm.ir.Var" tit [...]
-            <span class="k">with</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.sblock" title="tvm.script.tirx.sblock" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">sblock</span></a><span class="p">(</span><span class="s2">&quot;C&quot;</span><span class="p">):</span>
-                <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.axis.remap" title="tvm.script.tirx.axis.remap" class="sphx-glr-backref-module-tvm-script-tirx-axis sphx-glr-backref-type-py-method"><span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span></a><span class="p">(</span><span class="s [...]
+            <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;C&quot;</span><span class="p">):</span>
+                <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SS&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">])</span>
                 <a href="../../../reference/api/python/te.html#tvm.te.Tensor" title="tvm.te.Tensor" class="sphx-glr-backref-module-tvm-te sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">C</span></a><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.max" title="tvm.script.tirx.max" class="sphx- [...]
 </pre></div>
 </div>
@@ -911,27 +912,28 @@ and one output parameter <strong>C</strong>.</p>
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span># from tvm.script import ir as I
 # from tvm.script import tirx as T
 # from tvm.tirx.layout import Axis
+# from tvm.script import s_tir as Ts
 
 @I.ir_module
 class Module:
-    @T.prim_func(s_tir=True)
+    @Ts.prim_func
     def mm_relu(A: T.Buffer((128, 128), &quot;float32&quot;), B: T.Buffer((128, 128), &quot;float32&quot;), C: T.Buffer((128, 128), &quot;float32&quot;)):
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
-        Y = T.sblock_alloc_buffer((128, 128))
+        # with Ts.sblock(&quot;root&quot;):
+        Y = Ts.sblock_alloc_buffer((128, 128))
         for i, j, k in T.grid(128, 128, 128):
-            with T.sblock(&quot;Y&quot;):
-                v_i, v_j, v_k = T.axis.remap(&quot;SSR&quot;, [i, j, k])
-                T.reads(A[v_i, v_k], B[v_k, v_j])
-                T.writes(Y[v_i, v_j])
-                with T.init():
+            with Ts.sblock(&quot;Y&quot;):
+                v_i, v_j, v_k = Ts.axis.remap(&quot;SSR&quot;, [i, j, k])
+                Ts.reads(A[v_i, v_k], B[v_k, v_j])
+                Ts.writes(Y[v_i, v_j])
+                with Ts.init():
                     Y[v_i, v_j] = T.float32(0.0)
                 Y[v_i, v_j] = Y[v_i, v_j] + A[v_i, v_k] * B[v_k, v_j]
         for i, j in T.grid(128, 128):
-            with T.sblock(&quot;C&quot;):
-                v_i, v_j = T.axis.remap(&quot;SS&quot;, [i, j])
-                T.reads(Y[v_i, v_j])
-                T.writes(C[v_i, v_j])
+            with Ts.sblock(&quot;C&quot;):
+                v_i, v_j = Ts.axis.remap(&quot;SS&quot;, [i, j])
+                Ts.reads(Y[v_i, v_j])
+                Ts.writes(C[v_i, v_j])
                 C[v_i, v_j] = T.max(Y[v_i, v_j], T.float32(0.0))
 </pre></div>
 </div>
@@ -956,29 +958,30 @@ is that we need to specify the shape of the input tensors as symbolic variables.
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span># from tvm.script import ir as I
 # from tvm.script import tirx as T
 # from tvm.tirx.layout import Axis
+# from tvm.script import s_tir as Ts
 
 @I.ir_module
 class Module:
-    @T.prim_func(s_tir=True)
+    @Ts.prim_func
     def mm_relu(A: T.Buffer((&quot;m&quot;, &quot;n&quot;), &quot;float32&quot;), B: T.Buffer((&quot;k&quot;, &quot;n&quot;), &quot;float32&quot;), C: T.Buffer((&quot;m&quot;, &quot;n&quot;), &quot;float32&quot;)):
         m, n = T.int32(), T.int32()
         k = T.int32()
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
-        Y = T.sblock_alloc_buffer((m, n))
+        # with Ts.sblock(&quot;root&quot;):
+        Y = Ts.sblock_alloc_buffer((m, n))
         for i, j, k_1 in T.grid(m, n, k):
-            with T.sblock(&quot;Y&quot;):
-                v_i, v_j, v_k = T.axis.remap(&quot;SSR&quot;, [i, j, k_1])
-                T.reads(A[v_i, v_k], B[v_k, v_j])
-                T.writes(Y[v_i, v_j])
-                with T.init():
+            with Ts.sblock(&quot;Y&quot;):
+                v_i, v_j, v_k = Ts.axis.remap(&quot;SSR&quot;, [i, j, k_1])
+                Ts.reads(A[v_i, v_k], B[v_k, v_j])
+                Ts.writes(Y[v_i, v_j])
+                with Ts.init():
                     Y[v_i, v_j] = T.float32(0.0)
                 Y[v_i, v_j] = Y[v_i, v_j] + A[v_i, v_k] * B[v_k, v_j]
         for i, j in T.grid(m, n):
-            with T.sblock(&quot;C&quot;):
-                v_i, v_j = T.axis.remap(&quot;SS&quot;, [i, j])
-                T.reads(Y[v_i, v_j])
-                T.writes(C[v_i, v_j])
+            with Ts.sblock(&quot;C&quot;):
+                v_i, v_j = Ts.axis.remap(&quot;SS&quot;, [i, j])
+                Ts.reads(Y[v_i, v_j])
+                Ts.writes(C[v_i, v_j])
                 C[v_i, v_j] = T.max(Y[v_i, v_j], T.float32(0.0))
 </pre></div>
 </div>
diff --git a/docs/deep_dive/tensor_ir/tutorials/tir_transformation.html b/docs/deep_dive/tensor_ir/tutorials/tir_transformation.html
index 5dd56bf3c82..c7f8cffd762 100644
--- a/docs/deep_dive/tensor_ir/tutorials/tir_transformation.html
+++ b/docs/deep_dive/tensor_ir/tutorials/tir_transformation.html
@@ -665,31 +665,32 @@ rather than delving into optimization techniques.</p>
 <p>First, let’s take a look at the implementation of <code class="docutils literal notranslate"><span class="pre">mm_relu</span></code> in the previous section:</p>
 <div class="highlight-Python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">tvm</span>
 <span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">ir</span> <span class="k">as</span> <span class="n">I</span>
+<span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">s_tir</span> <span class="k">as</span> <span class="n">Ts</span>
 <span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">tirx</span> <span class="k">as</span> <span class="n">T</span>
 
 
 <span class="nd">@I</span><span class="o">.</span><span class="n">ir_module</span>
 <span class="k">class</span><span class="w"> </span><span class="nc">MyModule</span><span class="p">:</span>
-    <span class="nd">@T</span><span class="o">.</span><span class="n">prim_func</span><span class="p">(</span><span class="n">s_tir</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="nd">@Ts</span><span class="o">.</span><span class="n">prim_func</span>
     <span class="k">def</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span>
         <span class="n">A</span><span class="p">:</span> <a href="../../../tirx/api/tirx.html#tvm.tirx.Buffer" title="tvm.tirx.Buffer" class="sphx-glr-backref-module-tvm-tirx sphx-glr-backref-type-py-attribute"><span class="n">T</span><span class="o">.</span><span class="n">Buffer</span></a><span class="p">((</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">),</span> <span class="s2">&quot;float32&quot;</span><span class="p">),</span>
         <span class="n">B</span><span class="p">:</span> <a href="../../../tirx/api/tirx.html#tvm.tirx.Buffer" title="tvm.tirx.Buffer" class="sphx-glr-backref-module-tvm-tirx sphx-glr-backref-type-py-attribute"><span class="n">T</span><span class="o">.</span><span class="n">Buffer</span></a><span class="p">((</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">),</span> <span class="s2">&quot;float32&quot;</span><span class="p">),</span>
         <span class="n">C</span><span class="p">:</span> <a href="../../../tirx/api/tirx.html#tvm.tirx.Buffer" title="tvm.tirx.Buffer" class="sphx-glr-backref-module-tvm-tirx sphx-glr-backref-type-py-attribute"><span class="n">T</span><span class="o">.</span><span class="n">Buffer</span></a><span class="p">((</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">),</span> <span class="s2">&quot;float32&quot;</span><span class="p">),</span>
     <span class="p">):</span>
         <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.func_attr" title="tvm.script.tirx.func_attr" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">func_attr</span></a><span class="p">({</span><span class="s2">&quot;tirx.noalias&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">})</span>
-        <span class="k">with</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.sblock" title="tvm.script.tirx.sblock" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">sblock</span></a><span class="p">(</span><span class="s2">&quot;root&quot;</span><span class="p">):</span>
-            <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.reads" title="tvm.script.tirx.reads" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">reads</span></a><span class="p">()</span>
-            <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.writes" title="tvm.script.tirx.writes" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">writes</span></a><span class="p">()</span>
-            <span class="n">Y</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.sblock_alloc_buffer" title="tvm.script.tirx.sblock_alloc_buffer" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">sblock_alloc_buffer</span></a><span class="p">((</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class [...]
+        <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;root&quot;</span><span class="p">):</span>
+            <span class="n">Ts</span><span class="o">.</span><span class="n">reads</span><span class="p">()</span>
+            <span class="n">Ts</span><span class="o">.</span><span class="n">writes</span><span class="p">()</span>
+            <span class="n">Y</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock_alloc_buffer</span><span class="p">((</span><span class="mi">128</span><span class="p">,</span> <span class="mi">128</span><span class="p">))</span>
             <span class="k">for</span> <a href="../../../reference/api/python/s_tir/schedule.html#tvm.s_tir.schedule.LoopRV" title="tvm.s_tir.schedule.LoopRV" class="sphx-glr-backref-module-tvm-s_tir-schedule sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">i</span></a><span class="p">,</span> <a href="../../../reference/api/python/s_tir/schedule.html#tvm.s_tir.schedule.LoopRV" title="tvm.s_tir.schedule.LoopRV" class="sphx-glr-backref-module-tvm-s_tir-schedule sp [...]
-                <span class="k">with</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.sblock" title="tvm.script.tirx.sblock" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">sblock</span></a><span class="p">(</span><span class="s2">&quot;Y&quot;</span><span class="p">):</span>
-                    <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">,</span> <span class="n">vk</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.axis.remap" title="tvm.script.tirx.axis.remap" class="sphx-glr-backref-module-tvm-script-tirx-axis sphx-glr-backref-type-py-method"><span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n"> [...]
-                    <span class="k">with</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.init" title="tvm.script.tirx.init" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">init</span></a><span class="p">():</span>
+                <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;Y&quot;</span><span class="p">):</span>
+                    <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">,</span> <span class="n">vk</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SSR&quot;</span><span class="p">,</span> <span class="p">[</span><a href="../../../reference/api/python/s_tir/schedule.html#tvm.s_tir.schedule.Loo [...]
+                    <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">init</span><span class="p">():</span>
                         <span class="n">Y</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">float32</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
                     <span class="n">Y</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <span class="n">Y</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">+</span> <span class="n">A</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vk</span><sp [...]
             <span class="k">for</span> <a href="../../../reference/api/python/s_tir/schedule.html#tvm.s_tir.schedule.LoopRV" title="tvm.s_tir.schedule.LoopRV" class="sphx-glr-backref-module-tvm-s_tir-schedule sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">i</span></a><span class="p">,</span> <a href="../../../reference/api/python/s_tir/schedule.html#tvm.s_tir.schedule.LoopRV" title="tvm.s_tir.schedule.LoopRV" class="sphx-glr-backref-module-tvm-s_tir-schedule sp [...]
-                <span class="k">with</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.sblock" title="tvm.script.tirx.sblock" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">sblock</span></a><span class="p">(</span><span class="s2">&quot;C&quot;</span><span class="p">):</span>
-                    <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.axis.remap" title="tvm.script.tirx.axis.remap" class="sphx-glr-backref-module-tvm-script-tirx-axis sphx-glr-backref-type-py-method"><span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span></a><span class="p">(</span><span clas [...]
+                <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;C&quot;</span><span class="p">):</span>
+                    <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SS&quot;</span><span class="p">,</span> <span class="p">[</span><a href="../../../reference/api/python/s_tir/schedule.html#tvm.s_tir.schedule.LoopRV" title="tvm.s_tir.schedule.LoopRV" class="sphx- [...]
                     <span class="n">C</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <a href="../../../reference/api/python/script/script.html#tvm.script.tirx.max" title="tvm.script.tirx.max" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">max</span></a><span class="p">(</span><span cl [...]
 </pre></div>
 </div>
@@ -721,7 +722,7 @@ original implementation.</p>
 </div>
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Execution time summary:
  mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)
-   2.5953       2.5953       2.5953       2.5953       0.0000
+   2.5850       2.5850       2.5850       2.5850       0.0000
 </pre></div>
 </div>
 <section id="initialization-schedule">
@@ -755,29 +756,30 @@ non-existence of variable <code class="docutils literal notranslate"><span class
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span># from tvm.script import ir as I
 # from tvm.script import tirx as T
 # from tvm.tirx.layout import Axis
+# from tvm.script import s_tir as Ts
 
 @I.ir_module
 class Module:
-    @T.prim_func(s_tir=True)
+    @Ts.prim_func
     def main(A: T.Buffer((128, 128), &quot;float32&quot;), B: T.Buffer((128, 128), &quot;float32&quot;), C: T.Buffer((128, 128), &quot;float32&quot;)):
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
-        buffer = T.sblock_alloc_buffer((128, 128))
+        # with Ts.sblock(&quot;root&quot;):
+        buffer = Ts.sblock_alloc_buffer((128, 128))
         for i, j_0, j_1, k in T.grid(128, 16, 8, 128):
-            with T.sblock(&quot;Y&quot;):
-                v = T.axis.spatial(128, i)
-                v_1 = T.axis.spatial(128, j_0 * 8 + j_1)
-                v_2 = T.axis.reduce(128, k)
-                T.reads(A[v, v_2], B[v_2, v_1])
-                T.writes(buffer[v, v_1])
-                with T.init():
+            with Ts.sblock(&quot;Y&quot;):
+                v = Ts.axis.spatial(128, i)
+                v_1 = Ts.axis.spatial(128, j_0 * 8 + j_1)
+                v_2 = Ts.axis.reduce(128, k)
+                Ts.reads(A[v, v_2], B[v_2, v_1])
+                Ts.writes(buffer[v, v_1])
+                with Ts.init():
                     buffer[v, v_1] = T.float32(0.0)
                 buffer[v, v_1] = buffer[v, v_1] + A[v, v_2] * B[v_2, v_1]
         for i, j in T.grid(128, 128):
-            with T.sblock(&quot;C&quot;):
-                v, v_1 = T.axis.remap(&quot;SS&quot;, [i, j])
-                T.reads(buffer[v, v_1])
-                T.writes(C[v, v_1])
+            with Ts.sblock(&quot;C&quot;):
+                v, v_1 = Ts.axis.remap(&quot;SS&quot;, [i, j])
+                Ts.reads(buffer[v, v_1])
+                Ts.writes(C[v, v_1])
                 C[v, v_1] = T.max(buffer[v, v_1], T.float32(0.0))
 </pre></div>
 </div>
@@ -792,34 +794,35 @@ action involves reordering these two loops.</p>
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span># from tvm.script import ir as I
 # from tvm.script import tirx as T
 # from tvm.tirx.layout import Axis
+# from tvm.script import s_tir as Ts
 
 @I.ir_module
 class Module:
-    @T.prim_func(s_tir=True)
+    @Ts.prim_func
     def main(A: T.Buffer((128, 128), &quot;float32&quot;), B: T.Buffer((128, 128), &quot;float32&quot;), C: T.Buffer((128, 128), &quot;float32&quot;)):
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
-        buffer = T.sblock_alloc_buffer((128, 128))
+        # with Ts.sblock(&quot;root&quot;):
+        buffer = Ts.sblock_alloc_buffer((128, 128))
         for i, j_0, k, j_1 in T.grid(128, 16, 128, 8):
-            with T.sblock(&quot;Y&quot;):
-                v = T.axis.spatial(128, i)
-                v_1 = T.axis.spatial(128, j_0 * 8 + j_1)
-                v_2 = T.axis.reduce(128, k)
-                T.reads(A[v, v_2], B[v_2, v_1])
-                T.writes(buffer[v, v_1])
-                with T.init():
+            with Ts.sblock(&quot;Y&quot;):
+                v = Ts.axis.spatial(128, i)
+                v_1 = Ts.axis.spatial(128, j_0 * 8 + j_1)
+                v_2 = Ts.axis.reduce(128, k)
+                Ts.reads(A[v, v_2], B[v_2, v_1])
+                Ts.writes(buffer[v, v_1])
+                with Ts.init():
                     buffer[v, v_1] = T.float32(0.0)
                 buffer[v, v_1] = buffer[v, v_1] + A[v, v_2] * B[v_2, v_1]
         for i, j in T.grid(128, 128):
-            with T.sblock(&quot;C&quot;):
-                v, v_1 = T.axis.remap(&quot;SS&quot;, [i, j])
-                T.reads(buffer[v, v_1])
-                T.writes(C[v, v_1])
+            with Ts.sblock(&quot;C&quot;):
+                v, v_1 = Ts.axis.remap(&quot;SS&quot;, [i, j])
+                Ts.reads(buffer[v, v_1])
+                Ts.writes(C[v, v_1])
                 C[v, v_1] = T.max(buffer[v, v_1], T.float32(0.0))
 
 Execution time summary:
  mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)
-   0.8639       0.8639       0.8639       0.8639       0.0000
+   0.8708       0.8708       0.8708       0.8708       0.0000
 </pre></div>
 </div>
 </section>
@@ -836,31 +839,32 @@ variant. First, we employ a primitive known as <strong>reverse_compute_at</stron
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span># from tvm.script import ir as I
 # from tvm.script import tirx as T
 # from tvm.tirx.layout import Axis
+# from tvm.script import s_tir as Ts
 
 @I.ir_module
 class Module:
-    @T.prim_func(s_tir=True)
+    @Ts.prim_func
     def main(A: T.Buffer((128, 128), &quot;float32&quot;), B: T.Buffer((128, 128), &quot;float32&quot;), C: T.Buffer((128, 128), &quot;float32&quot;)):
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
-        buffer = T.sblock_alloc_buffer((128, 128))
+        # with Ts.sblock(&quot;root&quot;):
+        buffer = Ts.sblock_alloc_buffer((128, 128))
         for i, j_0 in T.grid(128, 16):
             for k, j_1 in T.grid(128, 8):
-                with T.sblock(&quot;Y&quot;):
-                    v = T.axis.spatial(128, i)
-                    v_1 = T.axis.spatial(128, j_0 * 8 + j_1)
-                    v_2 = T.axis.reduce(128, k)
-                    T.reads(A[v, v_2], B[v_2, v_1])
-                    T.writes(buffer[v, v_1])
-                    with T.init():
+                with Ts.sblock(&quot;Y&quot;):
+                    v = Ts.axis.spatial(128, i)
+                    v_1 = Ts.axis.spatial(128, j_0 * 8 + j_1)
+                    v_2 = Ts.axis.reduce(128, k)
+                    Ts.reads(A[v, v_2], B[v_2, v_1])
+                    Ts.writes(buffer[v, v_1])
+                    with Ts.init():
                         buffer[v, v_1] = T.float32(0.0)
                     buffer[v, v_1] = buffer[v, v_1] + A[v, v_2] * B[v_2, v_1]
             for ax0 in range(8):
-                with T.sblock(&quot;C&quot;):
-                    v = T.axis.spatial(128, i)
-                    v_1 = T.axis.spatial(128, j_0 * 8 + ax0)
-                    T.reads(buffer[v, v_1])
-                    T.writes(C[v, v_1])
+                with Ts.sblock(&quot;C&quot;):
+                    v = Ts.axis.spatial(128, i)
+                    v_1 = Ts.axis.spatial(128, j_0 * 8 + ax0)
+                    Ts.reads(buffer[v, v_1])
+                    Ts.writes(C[v, v_1])
                     C[v, v_1] = T.max(buffer[v, v_1], T.float32(0.0))
 </pre></div>
 </div>
@@ -881,41 +885,42 @@ from the reduction update via the <strong>decompose_reduction</strong> primitive
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span># from tvm.script import ir as I
 # from tvm.script import tirx as T
 # from tvm.tirx.layout import Axis
+# from tvm.script import s_tir as Ts
 
 @I.ir_module
 class Module:
-    @T.prim_func(s_tir=True)
+    @Ts.prim_func
     def main(A: T.Buffer((128, 128), &quot;float32&quot;), B: T.Buffer((128, 128), &quot;float32&quot;), C: T.Buffer((128, 128), &quot;float32&quot;)):
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
-        buffer = T.sblock_alloc_buffer((128, 128))
+        # with Ts.sblock(&quot;root&quot;):
+        buffer = Ts.sblock_alloc_buffer((128, 128))
         for i, j_0 in T.grid(128, 16):
             for j_1_init in range(8):
-                with T.sblock(&quot;Y_init&quot;):
-                    v = T.axis.spatial(128, i)
-                    v_1 = T.axis.spatial(128, j_0 * 8 + j_1_init)
-                    T.reads()
-                    T.writes(buffer[v, v_1])
+                with Ts.sblock(&quot;Y_init&quot;):
+                    v = Ts.axis.spatial(128, i)
+                    v_1 = Ts.axis.spatial(128, j_0 * 8 + j_1_init)
+                    Ts.reads()
+                    Ts.writes(buffer[v, v_1])
                     buffer[v, v_1] = T.float32(0.0)
             for k, j_1 in T.grid(128, 8):
-                with T.sblock(&quot;Y_update&quot;):
-                    v = T.axis.spatial(128, i)
-                    v_1 = T.axis.spatial(128, j_0 * 8 + j_1)
-                    v_2 = T.axis.reduce(128, k)
-                    T.reads(buffer[v, v_1], A[v, v_2], B[v_2, v_1])
-                    T.writes(buffer[v, v_1])
+                with Ts.sblock(&quot;Y_update&quot;):
+                    v = Ts.axis.spatial(128, i)
+                    v_1 = Ts.axis.spatial(128, j_0 * 8 + j_1)
+                    v_2 = Ts.axis.reduce(128, k)
+                    Ts.reads(buffer[v, v_1], A[v, v_2], B[v_2, v_1])
+                    Ts.writes(buffer[v, v_1])
                     buffer[v, v_1] = buffer[v, v_1] + A[v, v_2] * B[v_2, v_1]
             for ax0 in range(8):
-                with T.sblock(&quot;C&quot;):
-                    v = T.axis.spatial(128, i)
-                    v_1 = T.axis.spatial(128, j_0 * 8 + ax0)
-                    T.reads(buffer[v, v_1])
-                    T.writes(C[v, v_1])
+                with Ts.sblock(&quot;C&quot;):
+                    v = Ts.axis.spatial(128, i)
+                    v_1 = Ts.axis.spatial(128, j_0 * 8 + ax0)
+                    Ts.reads(buffer[v, v_1])
+                    Ts.writes(C[v, v_1])
                     C[v, v_1] = T.max(buffer[v, v_1], T.float32(0.0))
 
 Execution time summary:
  mean (ms)   median (ms)    max (ms)     min (ms)     std (ms)
-   0.3396       0.3396       0.3396       0.3396       0.0000
+   0.3477       0.3477       0.3477       0.3477       0.0000
 </pre></div>
 </div>
 </section>
@@ -947,36 +952,37 @@ def apply_trace(sch: s_tir.Schedule) -&gt; None:
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span># from tvm.script import ir as I
 # from tvm.script import tirx as T
 # from tvm.tirx.layout import Axis
+# from tvm.script import s_tir as Ts
 
 @I.ir_module
 class Module:
-    @T.prim_func(s_tir=True)
+    @Ts.prim_func
     def main(A: T.Buffer((128, 128), &quot;float32&quot;), B: T.Buffer((128, 128), &quot;float32&quot;), C: T.Buffer((128, 128), &quot;float32&quot;)):
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
-        buffer = T.sblock_alloc_buffer((128, 128))
+        # with Ts.sblock(&quot;root&quot;):
+        buffer = Ts.sblock_alloc_buffer((128, 128))
         for i, j_0 in T.grid(128, 16):
             for j_1_init in range(8):
-                with T.sblock(&quot;Y_init&quot;):
-                    v = T.axis.spatial(128, i)
-                    v_1 = T.axis.spatial(128, j_0 * 8 + j_1_init)
-                    T.reads()
-                    T.writes(buffer[v, v_1])
+                with Ts.sblock(&quot;Y_init&quot;):
+                    v = Ts.axis.spatial(128, i)
+                    v_1 = Ts.axis.spatial(128, j_0 * 8 + j_1_init)
+                    Ts.reads()
+                    Ts.writes(buffer[v, v_1])
                     buffer[v, v_1] = T.float32(0.0)
             for k, j_1 in T.grid(128, 8):
-                with T.sblock(&quot;Y_update&quot;):
-                    v = T.axis.spatial(128, i)
-                    v_1 = T.axis.spatial(128, j_0 * 8 + j_1)
-                    v_2 = T.axis.reduce(128, k)
-                    T.reads(buffer[v, v_1], A[v, v_2], B[v_2, v_1])
-                    T.writes(buffer[v, v_1])
+                with Ts.sblock(&quot;Y_update&quot;):
+                    v = Ts.axis.spatial(128, i)
+                    v_1 = Ts.axis.spatial(128, j_0 * 8 + j_1)
+                    v_2 = Ts.axis.reduce(128, k)
+                    Ts.reads(buffer[v, v_1], A[v, v_2], B[v_2, v_1])
+                    Ts.writes(buffer[v, v_1])
                     buffer[v, v_1] = buffer[v, v_1] + A[v, v_2] * B[v_2, v_1]
             for ax0 in range(8):
-                with T.sblock(&quot;C&quot;):
-                    v = T.axis.spatial(128, i)
-                    v_1 = T.axis.spatial(128, j_0 * 8 + ax0)
-                    T.reads(buffer[v, v_1])
-                    T.writes(C[v, v_1])
+                with Ts.sblock(&quot;C&quot;):
+                    v = Ts.axis.spatial(128, i)
+                    v_1 = Ts.axis.spatial(128, j_0 * 8 + ax0)
+                    Ts.reads(buffer[v, v_1])
+                    Ts.writes(C[v, v_1])
                     C[v, v_1] = T.max(buffer[v, v_1], T.float32(0.0))
 
 # from tvm import s_tir
diff --git a/docs/genindex.html b/docs/genindex.html
index d59cbaefa91..2a3bf78ee22 100644
--- a/docs/genindex.html
+++ b/docs/genindex.html
@@ -881,11 +881,11 @@ document.write(`
       <li><a href="reference/api/python/s_tir/schedule.html#tvm.s_tir.schedule.Trace.apply_json_to_schedule">apply_json_to_schedule() (tvm.s_tir.schedule.Trace static method)</a>
 </li>
       <li><a href="reference/api/python/relax/op.html#tvm.relax.op.op_attrs.MultiboxTransformLocAttrs.apply_softmax">apply_softmax (tvm.relax.op.op_attrs.MultiboxTransformLocAttrs property)</a>
-</li>
-      <li><a href="reference/api/python/s_tir/schedule.html#tvm.s_tir.schedule.Trace.apply_to_schedule">apply_to_schedule() (tvm.s_tir.schedule.Trace method)</a>
 </li>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="reference/api/python/s_tir/schedule.html#tvm.s_tir.schedule.Trace.apply_to_schedule">apply_to_schedule() (tvm.s_tir.schedule.Trace method)</a>
+</li>
       <li><a href="reference/api/python/script/script.html#tvm.script.tirx.Layout.apply_to_shape">apply_to_shape() (tvm.script.tirx.Layout method)</a>
 </li>
       <li><a href="reference/api/python/s_tir/dlight.html#tvm.s_tir.dlight.ApplyDefaultSchedule">ApplyDefaultSchedule (class in tvm.s_tir.dlight)</a>
@@ -1126,11 +1126,9 @@ document.write(`
         <li><a href="reference/api/python/relax/op.html#tvm.relax.op.op_attrs.RMSNormAttrs.axes">(tvm.relax.op.op_attrs.RMSNormAttrs property)</a>
 </li>
       </ul></li>
-      <li><a href="reference/api/python/script/script.html#tvm.script.tirx.axis">axis (class in tvm.script.tirx)</a>
+      <li><a href="reference/api/python/relax/op.html#tvm.relax.op.op_attrs.ArgmaxArgminAttrs.axis">axis (tvm.relax.op.op_attrs.ArgmaxArgminAttrs property)</a>
 
       <ul>
-        <li><a href="reference/api/python/relax/op.html#tvm.relax.op.op_attrs.ArgmaxArgminAttrs.axis">(tvm.relax.op.op_attrs.ArgmaxArgminAttrs property)</a>
-</li>
         <li><a href="reference/api/python/relax/op.html#tvm.relax.op.op_attrs.ArgsortAttrs.axis">(tvm.relax.op.op_attrs.ArgsortAttrs property)</a>
 </li>
         <li><a href="reference/api/python/relax/op.html#tvm.relax.op.op_attrs.BatchNormAttrs.axis">(tvm.relax.op.op_attrs.BatchNormAttrs property)</a>
@@ -1341,8 +1339,6 @@ document.write(`
       <li><a href="tirx/api/tirx.html#tvm.tirx.BitwiseOr">BitwiseOr (class in tvm.tirx)</a>
 </li>
       <li><a href="tirx/api/tirx.html#tvm.tirx.BitwiseXor">BitwiseXor (class in tvm.tirx)</a>
-</li>
-      <li><a href="reference/api/python/script/script.html#tvm.script.tirx.block_name_suffix_context">block_name_suffix_context() (in module tvm.script.tirx)</a>
 </li>
       <li><a href="reference/api/python/relax/block_builder.html#tvm.relax.block_builder.BlockBuilder">BlockBuilder (class in tvm.relax.block_builder)</a>
 </li>
@@ -3842,12 +3838,8 @@ document.write(`
       </ul></li>
       <li><a href="reference/api/python/transform.html#tvm.ir.transform.Pass.info">info (tvm.ir.transform.Pass property)</a>
 </li>
-      <li><a href="reference/api/python/script/script.html#tvm.script.tirx.init">init() (in module tvm.script.tirx)</a>
-
-      <ul>
-        <li><a href="tirx/api/cuda.html#tvm.backend.cuda.lang.FlashAttentionLPTScheduler.init">(tvm.backend.cuda.lang.FlashAttentionLPTScheduler method)</a>
+      <li><a href="tirx/api/cuda.html#tvm.backend.cuda.lang.FlashAttentionLPTScheduler.init">init() (tvm.backend.cuda.lang.FlashAttentionLPTScheduler method)</a>
 </li>
-      </ul></li>
       <li><a href="reference/api/python/runtime/disco.html#tvm.runtime.disco.Session.init_ccl">init_ccl() (tvm.runtime.disco.Session method)</a>
 </li>
       <li><a href="reference/api/python/relax/op.html#tvm.relax.op.op_attrs.InitAttrs">InitAttrs (class in tvm.relax.op.op_attrs)</a>
@@ -3920,14 +3912,14 @@ document.write(`
         <li><a href="reference/api/python/script/script.html#tvm.script.relax.invoke_pure_closure">(in module tvm.script.relax)</a>
 </li>
       </ul></li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="reference/api/python/relax/relax.html#tvm.relax.VirtualMachine.invoke_stateful">invoke_stateful() (tvm.relax.VirtualMachine method)</a>
 
       <ul>
         <li><a href="reference/api/python/runtime/vm.html#tvm.runtime.vm.VirtualMachine.invoke_stateful">(tvm.runtime.vm.VirtualMachine method)</a>
 </li>
       </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="reference/api/python/relax/op.html#tvm.relax.op.op_attrs.NonMaximumSuppressionAttrs.iou_threshold">iou_threshold (tvm.relax.op.op_attrs.NonMaximumSuppressionAttrs property)</a>
 </li>
       <li><a href="reference/api/python/relax/transform.html#tvm.relax.transform.IPCAllReduceRewrite">IPCAllReduceRewrite (class in tvm.relax.transform)</a>
@@ -4025,6 +4017,8 @@ document.write(`
       <li><a href="reference/api/python/script/script.html#tvm.script.tirx.Layout.is_tile_inner">is_tile_inner() (tvm.script.tirx.Layout method)</a>
 </li>
       <li><a href="reference/api/python/script/script.html#tvm.script.tirx.Layout.is_tile_outer">is_tile_outer() (tvm.script.tirx.Layout method)</a>
+</li>
+      <li><a href="tirx/api/tirx.html#tvm.tirx.PrimFunc.is_tirx">is_tirx (tvm.tirx.PrimFunc property)</a>
 </li>
       <li><a href="reference/api/python/script/script.html#tvm.script.tirx.Layout.is_trainium">is_trainium() (tvm.script.tirx.Layout method)</a>
 </li>
@@ -4533,6 +4527,8 @@ document.write(`
       <li><a href="tirx/api/transform.html#tvm.tirx.transform.LowerIntrin">LowerIntrin() (in module tvm.tirx.transform)</a>
 </li>
       <li><a href="reference/api/python/relax/transform.html#tvm.relax.transform.LowerRuntimeBuiltin">LowerRuntimeBuiltin() (in module tvm.relax.transform)</a>
+</li>
+      <li><a href="tirx/api/transform.html#tvm.tirx.transform.LowerThreadAllreduce">LowerThreadAllreduce() (in module tvm.tirx.transform)</a>
 </li>
       <li><a href="tirx/api/transform.html#tvm.tirx.transform.LowerTIRx">LowerTIRx() (in module tvm.tirx.transform)</a>
 </li>
@@ -5316,8 +5312,6 @@ document.write(`
       <li><a href="reference/api/python/relax/op.html#tvm.relax.op.op_attrs.AllReduceAttrs.op_type">op_type (tvm.relax.op.op_attrs.AllReduceAttrs property)</a>
 </li>
       <li><a href="reference/api/python/s_tir/schedule.html#tvm.s_tir.schedule.DepKind.OPAQUE">OPAQUE (tvm.s_tir.schedule.DepKind attribute)</a>
-</li>
-      <li><a href="reference/api/python/script/script.html#tvm.script.tirx.axis.opaque">opaque() (tvm.script.tirx.axis static method)</a>
 </li>
       <li><a href="reference/api/python/ir.html#tvm.ir.OpaqueExpr">OpaqueExpr (class in tvm.ir)</a>
 </li>
@@ -5804,8 +5798,6 @@ document.write(`
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="reference/api/python/relax/relax.html#tvm.relax.ExecBuilder.r">r() (tvm.relax.ExecBuilder method)</a>
-</li>
-      <li><a href="reference/api/python/script/script.html#tvm.script.tirx.axis.R">R() (tvm.script.tirx.axis static method)</a>
 </li>
       <li><a href="tirx/api/tirx.html#tvm.tirx.Ramp">Ramp (class in tvm.tirx)</a>
 </li>
@@ -5834,8 +5826,6 @@ document.write(`
       <li><a href="reference/api/python/testing.html#tvm.testing.Path.read_text">read_text() (tvm.testing.Path method)</a>
 </li>
       <li><a href="reference/api/python/testing.html#tvm.testing.Path.readlink">readlink() (tvm.testing.Path method)</a>
-</li>
-      <li><a href="reference/api/python/script/script.html#tvm.script.tirx.reads">reads() (in module tvm.script.tirx)</a>
 </li>
       <li><a href="reference/api/python/relax/transform.html#tvm.relax.transform.RealizeVDevice">RealizeVDevice() (in module tvm.relax.transform)</a>
 </li>
@@ -5850,11 +5840,7 @@ document.write(`
       <li><a href="reference/api/python/te.html#tvm.te.Reduce">Reduce (class in tvm.te)</a>
 </li>
       <li><a href="reference/api/python/topi.html#tvm.topi.nn.reduce">reduce() (in module tvm.topi.nn)</a>
-
-      <ul>
-        <li><a href="reference/api/python/script/script.html#tvm.script.tirx.axis.reduce">(tvm.script.tirx.axis static method)</a>
 </li>
-      </ul></li>
       <li><a href="reference/api/python/te.html#tvm.te.reduce_axis">reduce_axis() (in module tvm.te)</a>
 </li>
       <li><a href="reference/api/python/relax/op.html#tvm.relax.op.op_attrs.NLLLossAttrs.reduction">reduction (tvm.relax.op.op_attrs.NLLLossAttrs property)</a>
@@ -5928,8 +5914,6 @@ document.write(`
 </li>
       </ul></li>
       <li><a href="reference/api/python/relax/op.html#tvm.relax.op.nn.relu6">relu6() (in module tvm.relax.op.nn)</a>
-</li>
-      <li><a href="reference/api/python/script/script.html#tvm.script.tirx.axis.remap">remap() (tvm.script.tirx.axis static method)</a>
 </li>
       <li><a href="tirx/api/cuda.html#tvm.backend.cuda.lang.MBarrier.remote_view">remote_view() (tvm.backend.cuda.lang.MBarrier method)</a>
 </li>
@@ -6013,12 +5997,12 @@ document.write(`
 </li>
       <li><a href="reference/api/python/script/ir_builder.html#tvm.script.ir_builder.require_defined">require_defined() (in module tvm.script.ir_builder)</a>
 </li>
-  </ul></td>
-  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="tirx/api/transform.html#tvm.tirx.transform.HoistedLetBindings.RequiredByConditional">RequiredByConditional (tvm.tirx.transform.HoistedLetBindings attribute)</a>
 </li>
       <li><a href="reference/api/python/ir.html#tvm.ir.Op.reset_attr">reset_attr() (tvm.ir.Op method)</a>
 </li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="reference/api/python/relax/op.html#tvm.relax.op.reshape">reshape() (in module tvm.relax.op)</a>
 
       <ul>
@@ -6239,8 +6223,6 @@ document.write(`
 <h2 id="S">S</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="reference/api/python/script/script.html#tvm.script.tirx.axis.S">S() (tvm.script.tirx.axis static method)</a>
-</li>
       <li><a href="reference/api/python/ir.html#tvm.ir.GlobalInfo.same_as">same_as() (tvm.ir.GlobalInfo method)</a>
 
       <ul>
@@ -6268,12 +6250,6 @@ document.write(`
 </li>
       </ul></li>
       <li><a href="reference/api/python/ir.html#tvm.ir.save_json">save_json() (in module tvm.ir)</a>
-</li>
-      <li><a href="reference/api/python/script/script.html#tvm.script.tirx.sblock">sblock() (in module tvm.script.tirx)</a>
-</li>
-      <li><a href="reference/api/python/script/script.html#tvm.script.tirx.sblock_alloc_buffer">sblock_alloc_buffer() (in module tvm.script.tirx)</a>
-</li>
-      <li><a href="reference/api/python/script/script.html#tvm.script.tirx.sblock_attr">sblock_attr() (in module tvm.script.tirx)</a>
 </li>
       <li><a href="reference/api/python/s_tir/dlight.html#tvm.s_tir.dlight.SBlockInfo">SBlockInfo (class in tvm.s_tir.dlight)</a>
 </li>
@@ -6302,11 +6278,7 @@ document.write(`
       <li><a href="reference/api/python/topi.html#tvm.topi.nn.scale_shift_nhwc">scale_shift_nhwc() (in module tvm.topi.nn)</a>
 </li>
       <li><a href="reference/api/python/te.html#tvm.te.scan">scan() (in module tvm.te)</a>
-
-      <ul>
-        <li><a href="reference/api/python/script/script.html#tvm.script.tirx.axis.scan">(tvm.script.tirx.axis static method)</a>
 </li>
-      </ul></li>
       <li><a href="reference/api/python/te.html#tvm.te.ScanOp">ScanOp (class in tvm.te)</a>
 </li>
       <li><a href="reference/api/python/relax/op.html#tvm.relax.op.op_attrs.ScanopAttrs">ScanopAttrs (class in tvm.relax.op.op_attrs)</a>
@@ -6716,8 +6688,6 @@ document.write(`
       <li><a href="reference/api/python/ir.html#tvm.ir.Span">Span (class in tvm.ir)</a>
 </li>
       <li><a href="reference/api/python/script/script.html#tvm.script.tirx.Layout.span">span() (tvm.script.tirx.Layout method)</a>
-</li>
-      <li><a href="reference/api/python/script/script.html#tvm.script.tirx.axis.spatial">spatial() (tvm.script.tirx.axis static method)</a>
 </li>
       <li><a href="reference/api/python/relax/op.html#tvm.relax.op.op_attrs.ROIAlignAttrs.spatial_scale">spatial_scale (tvm.relax.op.op_attrs.ROIAlignAttrs property)</a>
 
@@ -8146,6 +8116,8 @@ document.write(`
       <li><a href="tirx/api/analysis.html#tvm.tirx.analysis.analysis.undefined_vars">undefined_vars() (in module tvm.tirx.analysis.analysis)</a>
 </li>
       <li><a href="reference/api/python/contrib.html#tvm.contrib.random.uniform">uniform() (in module tvm.contrib.random)</a>
+</li>
+      <li><a href="tirx/api/transform.html#tvm.tirx.transform.UnifyThreadBinding">UnifyThreadBinding() (in module tvm.tirx.transform)</a>
 </li>
       <li><a href="reference/api/python/relax/op.html#tvm.relax.op.unique">unique() (in module tvm.relax.op)</a>
 
@@ -8569,8 +8541,6 @@ document.write(`
         <li><a href="reference/api/python/script/ir_builder.html#tvm.relax.script.ir_builder.where">(in module tvm.relax.script.ir_builder)</a>
 </li>
         <li><a href="reference/api/python/script/script.html#tvm.script.relax.where">(in module tvm.script.relax)</a>
-</li>
-        <li><a href="reference/api/python/script/script.html#tvm.script.tirx.where">(in module tvm.script.tirx)</a>
 </li>
       </ul></li>
       <li><a href="reference/api/python/support.html#tvm.support.utils.which">which() (in module tvm.support.utils)</a>
@@ -8650,8 +8620,6 @@ document.write(`
       <li><a href="reference/api/python/testing.html#tvm.testing.Path.write_bytes">write_bytes() (tvm.testing.Path method)</a>
 </li>
       <li><a href="reference/api/python/testing.html#tvm.testing.Path.write_text">write_text() (tvm.testing.Path method)</a>
-</li>
-      <li><a href="reference/api/python/script/script.html#tvm.script.tirx.writes">writes() (in module tvm.script.tirx)</a>
 </li>
   </ul></td>
 </tr></table>
diff --git a/docs/get_started/tutorials/ir_module.html b/docs/get_started/tutorials/ir_module.html
index 6155d4ecce7..a87e71199b0 100644
--- a/docs/get_started/tutorials/ir_module.html
+++ b/docs/get_started/tutorials/ir_module.html
@@ -916,89 +916,90 @@ within the same module. Meanwhile, the Relax operators will be converted into <c
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span># from tvm.script import ir as I
 # from tvm.script import tirx as T
 # from tvm.tirx.layout import Axis
+# from tvm.script import s_tir as Ts
 # from tvm.script import relax as R
 
 @I.ir_module
 class Module:
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def add(p_fc1_bias: T.Buffer((T.int64(256),), &quot;float32&quot;), lv1: T.Buffer((T.int64(1), T.int64(256)), &quot;float32&quot;), T_add: T.Buffer((T.int64(1), T.int64(256)), &quot;float32&quot;)):
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for ax0, ax1 in T.grid(T.int64(1), T.int64(256)):
-            with T.sblock(&quot;T_add&quot;):
-                v_ax0, v_ax1 = T.axis.remap(&quot;SS&quot;, [ax0, ax1])
-                T.reads(p_fc1_bias[v_ax1], lv1[v_ax0, v_ax1])
-                T.writes(T_add[v_ax0, v_ax1])
+            with Ts.sblock(&quot;T_add&quot;):
+                v_ax0, v_ax1 = Ts.axis.remap(&quot;SS&quot;, [ax0, ax1])
+                Ts.reads(p_fc1_bias[v_ax1], lv1[v_ax0, v_ax1])
+                Ts.writes(T_add[v_ax0, v_ax1])
                 T_add[v_ax0, v_ax1] = p_fc1_bias[v_ax1] + lv1[v_ax0, v_ax1]
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def add1(p_fc2_bias: T.Buffer((T.int64(10),), &quot;float32&quot;), lv5: T.Buffer((T.int64(1), T.int64(10)), &quot;float32&quot;), T_add: T.Buffer((T.int64(1), T.int64(10)), &quot;float32&quot;)):
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for ax0, ax1 in T.grid(T.int64(1), T.int64(10)):
-            with T.sblock(&quot;T_add&quot;):
-                v_ax0, v_ax1 = T.axis.remap(&quot;SS&quot;, [ax0, ax1])
-                T.reads(p_fc2_bias[v_ax1], lv5[v_ax0, v_ax1])
-                T.writes(T_add[v_ax0, v_ax1])
+            with Ts.sblock(&quot;T_add&quot;):
+                v_ax0, v_ax1 = Ts.axis.remap(&quot;SS&quot;, [ax0, ax1])
+                Ts.reads(p_fc2_bias[v_ax1], lv5[v_ax0, v_ax1])
+                Ts.writes(T_add[v_ax0, v_ax1])
                 T_add[v_ax0, v_ax1] = p_fc2_bias[v_ax1] + lv5[v_ax0, v_ax1]
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def matmul(x: T.Buffer((T.int64(1), T.int64(784)), &quot;float32&quot;), lv: T.Buffer((T.int64(784), T.int64(256)), &quot;float32&quot;), matmul: T.Buffer((T.int64(1), T.int64(256)), &quot;float32&quot;)):
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for i0, i1, k in T.grid(T.int64(1), T.int64(256), T.int64(784)):
-            with T.sblock(&quot;matmul&quot;):
-                v_i0, v_i1, v_k = T.axis.remap(&quot;SSR&quot;, [i0, i1, k])
-                T.reads(x[v_i0, v_k], lv[v_k, v_i1])
-                T.writes(matmul[v_i0, v_i1])
-                with T.init():
+            with Ts.sblock(&quot;matmul&quot;):
+                v_i0, v_i1, v_k = Ts.axis.remap(&quot;SSR&quot;, [i0, i1, k])
+                Ts.reads(x[v_i0, v_k], lv[v_k, v_i1])
+                Ts.writes(matmul[v_i0, v_i1])
+                with Ts.init():
                     matmul[v_i0, v_i1] = T.float32(0.0)
                 matmul[v_i0, v_i1] = matmul[v_i0, v_i1] + x[v_i0, v_k] * lv[v_k, v_i1]
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def matmul1(lv3: T.Buffer((T.int64(1), T.int64(256)), &quot;float32&quot;), lv4: T.Buffer((T.int64(256), T.int64(10)), &quot;float32&quot;), matmul: T.Buffer((T.int64(1), T.int64(10)), &quot;float32&quot;)):
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for i0, i1, k in T.grid(T.int64(1), T.int64(10), T.int64(256)):
-            with T.sblock(&quot;matmul&quot;):
-                v_i0, v_i1, v_k = T.axis.remap(&quot;SSR&quot;, [i0, i1, k])
-                T.reads(lv3[v_i0, v_k], lv4[v_k, v_i1])
-                T.writes(matmul[v_i0, v_i1])
-                with T.init():
+            with Ts.sblock(&quot;matmul&quot;):
+                v_i0, v_i1, v_k = Ts.axis.remap(&quot;SSR&quot;, [i0, i1, k])
+                Ts.reads(lv3[v_i0, v_k], lv4[v_k, v_i1])
+                Ts.writes(matmul[v_i0, v_i1])
+                with Ts.init():
                     matmul[v_i0, v_i1] = T.float32(0.0)
                 matmul[v_i0, v_i1] = matmul[v_i0, v_i1] + lv3[v_i0, v_k] * lv4[v_k, v_i1]
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def relu(lv2: T.Buffer((T.int64(1), T.int64(256)), &quot;float32&quot;), compute: T.Buffer((T.int64(1), T.int64(256)), &quot;float32&quot;)):
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for i0, i1 in T.grid(T.int64(1), T.int64(256)):
-            with T.sblock(&quot;compute&quot;):
-                v_i0, v_i1 = T.axis.remap(&quot;SS&quot;, [i0, i1])
-                T.reads(lv2[v_i0, v_i1])
-                T.writes(compute[v_i0, v_i1])
+            with Ts.sblock(&quot;compute&quot;):
+                v_i0, v_i1 = Ts.axis.remap(&quot;SS&quot;, [i0, i1])
+                Ts.reads(lv2[v_i0, v_i1])
+                Ts.writes(compute[v_i0, v_i1])
                 compute[v_i0, v_i1] = T.max(lv2[v_i0, v_i1], T.float32(0.0))
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def transpose(p_fc1_weight: T.Buffer((T.int64(256), T.int64(784)), &quot;float32&quot;), T_transpose: T.Buffer((T.int64(784), T.int64(256)), &quot;float32&quot;)):
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for ax0, ax1 in T.grid(T.int64(784), T.int64(256)):
-            with T.sblock(&quot;T_transpose&quot;):
-                v_ax0, v_ax1 = T.axis.remap(&quot;SS&quot;, [ax0, ax1])
-                T.reads(p_fc1_weight[v_ax1, v_ax0])
-                T.writes(T_transpose[v_ax0, v_ax1])
+            with Ts.sblock(&quot;T_transpose&quot;):
+                v_ax0, v_ax1 = Ts.axis.remap(&quot;SS&quot;, [ax0, ax1])
+                Ts.reads(p_fc1_weight[v_ax1, v_ax0])
+                Ts.writes(T_transpose[v_ax0, v_ax1])
                 T_transpose[v_ax0, v_ax1] = p_fc1_weight[v_ax1, v_ax0]
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def transpose1(p_fc2_weight: T.Buffer((T.int64(10), T.int64(256)), &quot;float32&quot;), T_transpose: T.Buffer((T.int64(256), T.int64(10)), &quot;float32&quot;)):
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for ax0, ax1 in T.grid(T.int64(256), T.int64(10)):
-            with T.sblock(&quot;T_transpose&quot;):
-                v_ax0, v_ax1 = T.axis.remap(&quot;SS&quot;, [ax0, ax1])
-                T.reads(p_fc2_weight[v_ax1, v_ax0])
-                T.writes(T_transpose[v_ax0, v_ax1])
+            with Ts.sblock(&quot;T_transpose&quot;):
+                v_ax0, v_ax1 = Ts.axis.remap(&quot;SS&quot;, [ax0, ax1])
+                Ts.reads(p_fc2_weight[v_ax1, v_ax0])
+                Ts.writes(T_transpose[v_ax0, v_ax1])
                 T_transpose[v_ax0, v_ax1] = p_fc2_weight[v_ax1, v_ax0]
 
     @R.function
@@ -1055,77 +1056,78 @@ IRModule inputs. This design can help users to construct their own pipeline.</p>
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span># from tvm.script import ir as I
 # from tvm.script import tirx as T
 # from tvm.tirx.layout import Axis
+# from tvm.script import s_tir as Ts
 # from tvm.script import relax as R
 
 @I.ir_module
 class Module:
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def fused_matmul1_add1(lv3: T.Buffer((T.int64(1), T.int64(256)), &quot;float32&quot;), lv4: T.Buffer((T.int64(256), T.int64(10)), &quot;float32&quot;), p_fc2_bias: T.Buffer((T.int64(10),), &quot;float32&quot;), T_add_intermediate: T.Buffer((T.int64(1), T.int64(10)), &quot;float32&quot;)):
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
-        matmul_intermediate = T.sblock_alloc_buffer((T.int64(1), T.int64(10)))
+        # with Ts.sblock(&quot;root&quot;):
+        matmul_intermediate = Ts.sblock_alloc_buffer((T.int64(1), T.int64(10)))
         for i0, i1, k in T.grid(T.int64(1), T.int64(10), T.int64(256)):
-            with T.sblock(&quot;matmul&quot;):
-                v_i0, v_i1, v_k = T.axis.remap(&quot;SSR&quot;, [i0, i1, k])
-                T.reads(lv3[v_i0, v_k], lv4[v_k, v_i1])
-                T.writes(matmul_intermediate[v_i0, v_i1])
-                with T.init():
+            with Ts.sblock(&quot;matmul&quot;):
+                v_i0, v_i1, v_k = Ts.axis.remap(&quot;SSR&quot;, [i0, i1, k])
+                Ts.reads(lv3[v_i0, v_k], lv4[v_k, v_i1])
+                Ts.writes(matmul_intermediate[v_i0, v_i1])
+                with Ts.init():
                     matmul_intermediate[v_i0, v_i1] = T.float32(0.0)
                 matmul_intermediate[v_i0, v_i1] = matmul_intermediate[v_i0, v_i1] + lv3[v_i0, v_k] * lv4[v_k, v_i1]
         for ax0, ax1 in T.grid(T.int64(1), T.int64(10)):
-            with T.sblock(&quot;T_add&quot;):
-                v_ax0, v_ax1 = T.axis.remap(&quot;SS&quot;, [ax0, ax1])
-                T.reads(p_fc2_bias[v_ax1], matmul_intermediate[v_ax0, v_ax1])
-                T.writes(T_add_intermediate[v_ax0, v_ax1])
+            with Ts.sblock(&quot;T_add&quot;):
+                v_ax0, v_ax1 = Ts.axis.remap(&quot;SS&quot;, [ax0, ax1])
+                Ts.reads(p_fc2_bias[v_ax1], matmul_intermediate[v_ax0, v_ax1])
+                Ts.writes(T_add_intermediate[v_ax0, v_ax1])
                 T_add_intermediate[v_ax0, v_ax1] = p_fc2_bias[v_ax1] + matmul_intermediate[v_ax0, v_ax1]
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def fused_matmul_add_relu(x: T.Buffer((T.int64(1), T.int64(784)), &quot;float32&quot;), lv: T.Buffer((T.int64(784), T.int64(256)), &quot;float32&quot;), p_fc1_bias: T.Buffer((T.int64(256),), &quot;float32&quot;), compute_intermediate: T.Buffer((T.int64(1), T.int64(256)), &quot;float32&quot;)):
         T.func_attr({&quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
-        matmul_intermediate = T.sblock_alloc_buffer((T.int64(1), T.int64(256)))
-        T_add_intermediate = T.sblock_alloc_buffer((T.int64(1), T.int64(256)))
+        # with Ts.sblock(&quot;root&quot;):
+        matmul_intermediate = Ts.sblock_alloc_buffer((T.int64(1), T.int64(256)))
+        T_add_intermediate = Ts.sblock_alloc_buffer((T.int64(1), T.int64(256)))
         for i0, i1, k in T.grid(T.int64(1), T.int64(256), T.int64(784)):
-            with T.sblock(&quot;matmul&quot;):
-                v_i0, v_i1, v_k = T.axis.remap(&quot;SSR&quot;, [i0, i1, k])
-                T.reads(x[v_i0, v_k], lv[v_k, v_i1])
-                T.writes(matmul_intermediate[v_i0, v_i1])
-                with T.init():
+            with Ts.sblock(&quot;matmul&quot;):
+                v_i0, v_i1, v_k = Ts.axis.remap(&quot;SSR&quot;, [i0, i1, k])
+                Ts.reads(x[v_i0, v_k], lv[v_k, v_i1])
+                Ts.writes(matmul_intermediate[v_i0, v_i1])
+                with Ts.init():
                     matmul_intermediate[v_i0, v_i1] = T.float32(0.0)
                 matmul_intermediate[v_i0, v_i1] = matmul_intermediate[v_i0, v_i1] + x[v_i0, v_k] * lv[v_k, v_i1]
         for ax0, ax1 in T.grid(T.int64(1), T.int64(256)):
-            with T.sblock(&quot;T_add&quot;):
-                v_ax0, v_ax1 = T.axis.remap(&quot;SS&quot;, [ax0, ax1])
-                T.reads(p_fc1_bias[v_ax1], matmul_intermediate[v_ax0, v_ax1])
-                T.writes(T_add_intermediate[v_ax0, v_ax1])
+            with Ts.sblock(&quot;T_add&quot;):
+                v_ax0, v_ax1 = Ts.axis.remap(&quot;SS&quot;, [ax0, ax1])
+                Ts.reads(p_fc1_bias[v_ax1], matmul_intermediate[v_ax0, v_ax1])
+                Ts.writes(T_add_intermediate[v_ax0, v_ax1])
                 T_add_intermediate[v_ax0, v_ax1] = p_fc1_bias[v_ax1] + matmul_intermediate[v_ax0, v_ax1]
         for i0, i1 in T.grid(T.int64(1), T.int64(256)):
-            with T.sblock(&quot;compute&quot;):
-                v_i0, v_i1 = T.axis.remap(&quot;SS&quot;, [i0, i1])
-                T.reads(T_add_intermediate[v_i0, v_i1])
-                T.writes(compute_intermediate[v_i0, v_i1])
+            with Ts.sblock(&quot;compute&quot;):
+                v_i0, v_i1 = Ts.axis.remap(&quot;SS&quot;, [i0, i1])
+                Ts.reads(T_add_intermediate[v_i0, v_i1])
+                Ts.writes(compute_intermediate[v_i0, v_i1])
                 compute_intermediate[v_i0, v_i1] = T.max(T_add_intermediate[v_i0, v_i1], T.float32(0.0))
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def transpose(p_fc1_weight: T.Buffer((T.int64(256), T.int64(784)), &quot;float32&quot;), T_transpose: T.Buffer((T.int64(784), T.int64(256)), &quot;float32&quot;)):
         T.func_attr({&quot;op_pattern&quot;: 2, &quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for ax0, ax1 in T.grid(T.int64(784), T.int64(256)):
-            with T.sblock(&quot;T_transpose&quot;):
-                v_ax0, v_ax1 = T.axis.remap(&quot;SS&quot;, [ax0, ax1])
-                T.reads(p_fc1_weight[v_ax1, v_ax0])
-                T.writes(T_transpose[v_ax0, v_ax1])
+            with Ts.sblock(&quot;T_transpose&quot;):
+                v_ax0, v_ax1 = Ts.axis.remap(&quot;SS&quot;, [ax0, ax1])
+                Ts.reads(p_fc1_weight[v_ax1, v_ax0])
+                Ts.writes(T_transpose[v_ax0, v_ax1])
                 T_transpose[v_ax0, v_ax1] = p_fc1_weight[v_ax1, v_ax0]
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def transpose1(p_fc2_weight: T.Buffer((T.int64(10), T.int64(256)), &quot;float32&quot;), T_transpose: T.Buffer((T.int64(256), T.int64(10)), &quot;float32&quot;)):
         T.func_attr({&quot;op_pattern&quot;: 2, &quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for ax0, ax1 in T.grid(T.int64(256), T.int64(10)):
-            with T.sblock(&quot;T_transpose&quot;):
-                v_ax0, v_ax1 = T.axis.remap(&quot;SS&quot;, [ax0, ax1])
-                T.reads(p_fc2_weight[v_ax1, v_ax0])
-                T.writes(T_transpose[v_ax0, v_ax1])
+            with Ts.sblock(&quot;T_transpose&quot;):
+                v_ax0, v_ax1 = Ts.axis.remap(&quot;SS&quot;, [ax0, ax1])
+                Ts.reads(p_fc2_weight[v_ax1, v_ax0])
+                Ts.writes(T_transpose[v_ax0, v_ax1])
                 T_transpose[v_ax0, v_ax1] = p_fc2_weight[v_ax1, v_ax0]
 
     @R.function
@@ -1161,8 +1163,8 @@ backends.</p>
 <span class="nb">print</span><span class="p">(</span><span class="n">cpu_out</span><span class="p">)</span>
 </pre></div>
 </div>
-<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>[[-0.23562552  0.05371134 -0.13055453  0.2650053  -0.13116169 -0.00900859
-   0.16538218  0.12908211 -0.00368892  0.22429338]]
+<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>[[ 0.03041493 -0.12236952 -0.11497392  0.08369536 -0.09267335  0.00781134
+  -0.00412857  0.09738255 -0.15437272 -0.11997806]]
 </pre></div>
 </div>
 </section>
@@ -1196,8 +1198,8 @@ the details of <code class="docutils literal notranslate"><span class="pre">DLig
 <span class="k">assert</span> <span class="n">np</span><span class="o">.</span><span class="n">allclose</span><span class="p">(</span><span class="n">cpu_out</span><span class="p">,</span> <span class="n">gpu_out</span><span class="p">,</span> <span class="n">atol</span><span class="o">=</span><span class="mf">1e-3</span><span class="p">)</span>
 </pre></div>
 </div>
-<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>[[-0.23562557  0.05371135 -0.13055448  0.2650053  -0.13116166 -0.00900865
-   0.16538215  0.12908214 -0.00368889  0.22429338]]
+<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>[[ 0.03041491 -0.12236952 -0.11497388  0.08369543 -0.09267339  0.00781127
+  -0.00412863  0.09738256 -0.15437265 -0.11997804]]
 </pre></div>
 </div>
 </section>
diff --git a/docs/get_started/tutorials/quick_start.html b/docs/get_started/tutorials/quick_start.html
index dd699c44f08..feff2c39994 100644
--- a/docs/get_started/tutorials/quick_start.html
+++ b/docs/get_started/tutorials/quick_start.html
@@ -802,8 +802,8 @@ different devices.</p>
 <span class="nb">print</span><span class="p">(</span><span class="n">vm</span><span class="p">[</span><span class="s2">&quot;forward&quot;</span><span class="p">](</span><span class="n">tvm_data</span><span class="p">,</span> <span class="o">*</span><a href="https://docs.python.org/3/builtins/stdtypes.html#list" title="builtins.list" class="sphx-glr-backref-module-builtins sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">params</span></a><span class="p">)</span>< [...]
 </pre></div>
 </div>
-<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>[[23455.39  24751.37  25286.8   24762.7   25011.197 25126.11  24433.854
-  22964.387 24770.965 26254.316]]
+<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>[[23292.582 25088.281 23512.379 23857.27  23783.04  26079.24  23850.568
+  23491.396 24608.787 23830.986]]
 </pre></div>
 </div>
 <p>Our goal is to bring machine learning to the application with any language of interest,
diff --git a/docs/get_started/tutorials/sg_execution_times.html b/docs/get_started/tutorials/sg_execution_times.html
index 39e70c7d3b0..e81dc24dbb7 100644
--- a/docs/get_started/tutorials/sg_execution_times.html
+++ b/docs/get_started/tutorials/sg_execution_times.html
@@ -634,7 +634,7 @@ document.write(`
                   
   <section id="computation-times">
 <span id="sphx-glr-get-started-tutorials-sg-execution-times"></span><h1>Computation times<a class="headerlink" href="#computation-times" title="Link to this heading">#</a></h1>
-<p><strong>00:05.499</strong> total execution time for 2 files <strong>from get_started/tutorials</strong>:</p>
+<p><strong>00:05.494</strong> total execution time for 2 files <strong>from get_started/tutorials</strong>:</p>
 <div class="docutils container">
 <style scoped>
 <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet" />
@@ -656,11 +656,11 @@ $(document).ready( function () {
 </thead>
 <tbody>
 <tr class="row-even"><td><p><a class="reference internal" href="ir_module.html#sphx-glr-get-started-tutorials-ir-module-py"><span class="std std-ref">IRModule</span></a> (<code class="docutils literal notranslate"><span class="pre">ir_module.py</span></code>)</p></td>
-<td><p>00:05.339</p></td>
+<td><p>00:05.336</p></td>
 <td><p>0.0</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="quick_start.html#sphx-glr-get-started-tutorials-quick-start-py"><span class="std std-ref">Quick Start</span></a> (<code class="docutils literal notranslate"><span class="pre">quick_start.py</span></code>)</p></td>
-<td><p>00:00.160</p></td>
+<td><p>00:00.158</p></td>
 <td><p>0.0</p></td>
 </tr>
 </tbody>
diff --git a/docs/how_to/tutorials/cross_compilation_and_rpc.html b/docs/how_to/tutorials/cross_compilation_and_rpc.html
index e335ad396d0..8c5ed3e8761 100644
--- a/docs/how_to/tutorials/cross_compilation_and_rpc.html
+++ b/docs/how_to/tutorials/cross_compilation_and_rpc.html
@@ -833,7 +833,7 @@ device and returns the measured cost. Network overhead is excluded.</p>
 <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">cost</span><span class="si">:</span><span class="s2">g</span><span class="si">}</span><span class="s2"> secs/op&quot;</span><span class="p">)</span>
 </pre></div>
 </div>
-<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>9e-08 secs/op
+<div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>9.4e-08 secs/op
 </pre></div>
 </div>
 </section>
@@ -1362,8 +1362,8 @@ for ONNX models. Simply replace <code class="docutils literal notranslate"><span
 Converted PyTorch model to Relax:
   - Number of parameters: 4
 Using local target for demonstration
-Exported library to: /tmp/tmp407p4qwk/model_deployed.so
-Saved parameters to: /tmp/tmp407p4qwk/model_params.npz
+Exported library to: /tmp/tmp67reiatr/model_deployed.so
+Saved parameters to: /tmp/tmp67reiatr/model_params.npz
 
 RPC workflow (works for any remote device):
 ==================================================
diff --git a/docs/how_to/tutorials/customize_opt.html b/docs/how_to/tutorials/customize_opt.html
index 9620c289a78..7b2f877ca22 100644
--- a/docs/how_to/tutorials/customize_opt.html
+++ b/docs/how_to/tutorials/customize_opt.html
@@ -878,55 +878,56 @@ it achieves a balance between performance and compilation time.</p>
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span># from tvm.script import ir as I
 # from tvm.script import tirx as T
 # from tvm.tirx.layout import Axis
+# from tvm.script import s_tir as Ts
 # from tvm.script import relax as R
 
 @I.ir_module
 class Module:
     I.module_attrs({&quot;external_mods&quot;: [metadata[&quot;ffi.Module&quot;][0]]})
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def matmul(lv: T.Buffer((T.int64(1), T.int64(256)), &quot;float32&quot;), permute_dims1: T.Buffer((T.int64(256), T.int64(10)), &quot;float32&quot;), matmul: T.Buffer((T.int64(1), T.int64(10)), &quot;float32&quot;)):
         T.func_attr({&quot;op_pattern&quot;: 4, &quot;tirx.is_scheduled&quot;: True, &quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
-        matmul_rf_local = T.sblock_alloc_buffer((T.int64(16), T.int64(1), T.int64(10)), scope=&quot;local&quot;)
+        # with Ts.sblock(&quot;root&quot;):
+        matmul_rf_local = Ts.sblock_alloc_buffer((T.int64(16), T.int64(1), T.int64(10)), scope=&quot;local&quot;)
         for ax0_fused_0 in T.thread_binding(T.int64(1), thread=&quot;blockIdx.x&quot;):
             for ax0_fused_1 in T.thread_binding(T.int64(10), thread=&quot;threadIdx.x&quot;):
                 for ax1_fused_1 in T.thread_binding(T.int64(16), thread=&quot;threadIdx.y&quot;):
-                    with T.sblock(&quot;matmul_rf_init&quot;):
-                        vax1_fused_1 = T.axis.spatial(T.int64(16), ax1_fused_1)
-                        v0 = T.axis.spatial(T.int64(10), ax0_fused_0 * T.int64(10) + ax0_fused_1)
-                        T.reads()
-                        T.writes(matmul_rf_local[vax1_fused_1, T.int64(0), v0])
+                    with Ts.sblock(&quot;matmul_rf_init&quot;):
+                        vax1_fused_1 = Ts.axis.spatial(T.int64(16), ax1_fused_1)
+                        v0 = Ts.axis.spatial(T.int64(10), ax0_fused_0 * T.int64(10) + ax0_fused_1)
+                        Ts.reads()
+                        Ts.writes(matmul_rf_local[vax1_fused_1, T.int64(0), v0])
                         matmul_rf_local[vax1_fused_1, T.int64(0), v0] = T.float32(0.0)
                     for ax1_fused_0, u in T.grid(T.int64(16), 1):
-                        with T.sblock(&quot;matmul_rf_update&quot;):
-                            vax1_fused_1 = T.axis.spatial(T.int64(16), ax1_fused_1)
-                            v0 = T.axis.spatial(T.int64(10), ax0_fused_0 * T.int64(10) + ax0_fused_1)
-                            vax1_fused_0 = T.axis.reduce(T.int64(16), ax1_fused_0)
-                            T.reads(matmul_rf_local[vax1_fused_1, T.int64(0), v0], lv[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1], permute_dims1[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0])
-                            T.writes(matmul_rf_local[vax1_fused_1, T.int64(0), v0])
+                        with Ts.sblock(&quot;matmul_rf_update&quot;):
+                            vax1_fused_1 = Ts.axis.spatial(T.int64(16), ax1_fused_1)
+                            v0 = Ts.axis.spatial(T.int64(10), ax0_fused_0 * T.int64(10) + ax0_fused_1)
+                            vax1_fused_0 = Ts.axis.reduce(T.int64(16), ax1_fused_0)
+                            Ts.reads(matmul_rf_local[vax1_fused_1, T.int64(0), v0], lv[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1], permute_dims1[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0])
+                            Ts.writes(matmul_rf_local[vax1_fused_1, T.int64(0), v0])
                             matmul_rf_local[vax1_fused_1, T.int64(0), v0] = matmul_rf_local[vax1_fused_1, T.int64(0), v0] + lv[T.int64(0), vax1_fused_0 * T.int64(16) + vax1_fused_1] * permute_dims1[vax1_fused_0 * T.int64(16) + vax1_fused_1, v0]
             for ax1_fused in T.thread_binding(T.int64(10), thread=&quot;threadIdx.x&quot;):
                 for ax0 in T.thread_binding(T.int64(16), thread=&quot;threadIdx.y&quot;):
-                    with T.sblock(&quot;matmul&quot;):
-                        vax1_fused_1, v0 = T.axis.remap(&quot;RS&quot;, [ax0, ax1_fused])
-                        T.reads(matmul_rf_local[vax1_fused_1, T.int64(0), v0])
-                        T.writes(matmul[T.int64(0), v0])
-                        with T.init():
+                    with Ts.sblock(&quot;matmul&quot;):
+                        vax1_fused_1, v0 = Ts.axis.remap(&quot;RS&quot;, [ax0, ax1_fused])
+                        Ts.reads(matmul_rf_local[vax1_fused_1, T.int64(0), v0])
+                        Ts.writes(matmul[T.int64(0), v0])
+                        with Ts.init():
                             matmul[T.int64(0), v0] = T.float32(0.0)
                         matmul[T.int64(0), v0] = matmul[T.int64(0), v0] + matmul_rf_local[vax1_fused_1, T.int64(0), v0]
 
-    @T.prim_func(private=True, s_tir=True)
+    @Ts.prim_func(private=True)
     def transpose(fc2_weight: T.Buffer((T.int64(10), T.int64(256)), &quot;float32&quot;), T_transpose: T.Buffer((T.int64(256), T.int64(10)), &quot;float32&quot;)):
         T.func_attr({&quot;op_pattern&quot;: 2, &quot;tirx.is_scheduled&quot;: True, &quot;tirx.noalias&quot;: True})
-        # with T.sblock(&quot;root&quot;):
+        # with Ts.sblock(&quot;root&quot;):
         for ax0_ax1_fused_0 in T.thread_binding(T.int64(3), thread=&quot;blockIdx.x&quot;):
             for ax0_ax1_fused_1 in T.thread_binding(T.int64(1024), thread=&quot;threadIdx.x&quot;):
-                with T.sblock(&quot;T_transpose&quot;):
-                    v0 = T.axis.spatial(T.int64(256), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) // T.int64(10))
-                    v1 = T.axis.spatial(T.int64(10), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) % T.int64(10))
-                    T.where(ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1 &lt; T.int64(2560))
-                    T.reads(fc2_weight[v1, v0])
-                    T.writes(T_transpose[v0, v1])
+                with Ts.sblock(&quot;T_transpose&quot;):
+                    v0 = Ts.axis.spatial(T.int64(256), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) // T.int64(10))
+                    v1 = Ts.axis.spatial(T.int64(10), (ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1) % T.int64(10))
+                    Ts.where(ax0_ax1_fused_0 * T.int64(1024) + ax0_ax1_fused_1 &lt; T.int64(2560))
+                    Ts.reads(fc2_weight[v1, v0])
+                    Ts.writes(T_transpose[v0, v1])
                     T_transpose[v0, v1] = fc2_weight[v1, v0]
 
     @R.function
diff --git a/docs/how_to/tutorials/e2e_opt_model.html b/docs/how_to/tutorials/e2e_opt_model.html
index 914e5467729..21030e2e26f 100644
--- a/docs/how_to/tutorials/e2e_opt_model.html
+++ b/docs/how_to/tutorials/e2e_opt_model.html
@@ -674,8 +674,9 @@ PyTorch.</p>
 <div class="sphx-glr-script-out highlight-none notranslate"><div class="highlight"><pre><span></span>Downloading: &quot;https://download.pytorch.org/models/resnet18-f37072fd.pth&quot; to /workspace/.cache/torch/hub/checkpoints/resnet18-f37072fd.pth
 
   0%|          | 0.00/44.7M [00:00&lt;?, ?B/s]
- 64%|██████▍   | 28.6M/44.7M [00:00&lt;00:00, 300MB/s]
-100%|██████████| 44.7M/44.7M [00:00&lt;00:00, 322MB/s]
+ 18%|█▊        | 8.00M/44.7M [00:00&lt;00:00, 83.7MB/s]
+ 85%|████████▌ | 38.0M/44.7M [00:00&lt;00:00, 210MB/s]
+100%|██████████| 44.7M/44.7M [00:00&lt;00:00, 196MB/s]
 </pre></div>
 </div>
 </section>
diff --git a/docs/how_to/tutorials/mix_python_and_tvm_with_pymodule.html b/docs/how_to/tutorials/mix_python_and_tvm_with_pymodule.html
index 9c7862572a4..e4b7d95d235 100644
--- a/docs/how_to/tutorials/mix_python_and_tvm_with_pymodule.html
+++ b/docs/how_to/tutorials/mix_python_and_tvm_with_pymodule.html
@@ -700,6 +700,7 @@ express in TIR or Relax.</p></li>
 <span class="kn">from</span><span class="w"> </span><span class="nn">tvm.relax.base_py_module</span><span class="w"> </span><span class="kn">import</span> <a href="../../reference/api/python/relax/relax.html#tvm.relax.BasePyModule" title="tvm.relax.BasePyModule" class="sphx-glr-backref-module-tvm-relax sphx-glr-backref-type-py-class"><span class="n">BasePyModule</span></a>
 <span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">ir</span> <span class="k">as</span> <span class="n">I</span>
 <span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">relax</span> <span class="k">as</span> <span class="n">R</span>
+<span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">s_tir</span> <span class="k">as</span> <span class="n">Ts</span>
 <span class="kn">from</span><span class="w"> </span><span class="nn">tvm.script</span><span class="w"> </span><span class="kn">import</span> <span class="n">tirx</span> <span class="k">as</span> <span class="n">T</span>
 
 <a href="https://docs.python.org/3/builtins/functions.html#bool" title="builtins.bool" class="sphx-glr-backref-module-builtins sphx-glr-backref-type-py-class sphx-glr-backref-instance"><span class="n">IS_IN_CI</span></a> <span class="o">=</span> <a href="https://docs.python.org/3/library/os.html#os.getenv" title="os.getenv" class="sphx-glr-backref-module-os sphx-glr-backref-type-py-function"><span class="n">os</span><span class="o">.</span><span class="n">getenv</span></a><span class="p" [...]
@@ -723,7 +724,7 @@ three decorators for three kinds of functions:</p>
 
     <span class="nd">@R</span><span class="o">.</span><span class="n">py_module</span>
     <span class="k">class</span><span class="w"> </span><span class="nc">MyFirstModule</span><span class="p">(</span><a href="../../reference/api/python/relax/relax.html#tvm.relax.BasePyModule" title="tvm.relax.BasePyModule" class="sphx-glr-backref-module-tvm-relax sphx-glr-backref-type-py-class"><span class="n">BasePyModule</span></a><span class="p">):</span>
-        <span class="nd">@T</span><span class="o">.</span><span class="n">prim_func</span><span class="p">(</span><span class="n">s_tir</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+        <span class="nd">@Ts</span><span class="o">.</span><span class="n">prim_func</span>
         <span class="k">def</span><span class="w"> </span><span class="nf">add_tir</span><span class="p">(</span>
             <span class="n">A</span><span class="p">:</span> <a href="../../tirx/api/tirx.html#tvm.tirx.Buffer" title="tvm.tirx.Buffer" class="sphx-glr-backref-module-tvm-tirx sphx-glr-backref-type-py-attribute"><span class="n">T</span><span class="o">.</span><span class="n">Buffer</span></a><span class="p">((</span><span class="mi">4</span><span class="p">,),</span> <span class="s2">&quot;float32&quot;</span><span class="p">),</span>
             <span class="n">B</span><span class="p">:</span> <a href="../../tirx/api/tirx.html#tvm.tirx.Buffer" title="tvm.tirx.Buffer" class="sphx-glr-backref-module-tvm-tirx sphx-glr-backref-type-py-attribute"><span class="n">T</span><span class="o">.</span><span class="n">Buffer</span></a><span class="p">((</span><span class="mi">4</span><span class="p">,),</span> <span class="s2">&quot;float32&quot;</span><span class="p">),</span>
@@ -768,16 +769,16 @@ immediately — no recompilation needed.</p>
 
     <span class="nd">@R</span><span class="o">.</span><span class="n">py_module</span>
     <span class="k">class</span><span class="w"> </span><span class="nc">DebugModule</span><span class="p">(</span><a href="../../reference/api/python/relax/relax.html#tvm.relax.BasePyModule" title="tvm.relax.BasePyModule" class="sphx-glr-backref-module-tvm-relax sphx-glr-backref-type-py-class"><span class="n">BasePyModule</span></a><span class="p">):</span>
-        <span class="nd">@T</span><span class="o">.</span><span class="n">prim_func</span><span class="p">(</span><span class="n">s_tir</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+        <span class="nd">@Ts</span><span class="o">.</span><span class="n">prim_func</span>
         <span class="k">def</span><span class="w"> </span><span class="nf">matmul_tir</span><span class="p">(</span><span class="n">var_A</span><span class="p">:</span> <a href="../../reference/api/python/script/script.html#tvm.script.tirx.handle" title="tvm.script.tirx.handle" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">handle</span></a><span class="p">,</span> <span class="n">var_B</sp [...]
             <span class="n">n</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">int32</span><span class="p">()</span>
             <span class="n">A</span> <span class="o">=</span> <a href="../../reference/api/python/script/script.html#tvm.script.tirx.match_buffer" title="tvm.script.tirx.match_buffer" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">match_buffer</span></a><span class="p">(</span><span class="n">var_A</span><span class="p">,</span> <span class="p">(</span><span class="n">n</span><span class="p [...]
             <span class="n">B</span> <span class="o">=</span> <a href="../../reference/api/python/script/script.html#tvm.script.tirx.match_buffer" title="tvm.script.tirx.match_buffer" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">match_buffer</span></a><span class="p">(</span><span class="n">var_B</span><span class="p">,</span> <span class="p">(</span><span class="mi">4</span><span class=" [...]
             <span class="n">C</span> <span class="o">=</span> <a href="../../reference/api/python/script/script.html#tvm.script.tirx.match_buffer" title="tvm.script.tirx.match_buffer" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">match_buffer</span></a><span class="p">(</span><span class="n">var_C</span><span class="p">,</span> <span class="p">(</span><span class="n">n</span><span class="p [...]
             <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">k</span> <span class="ow">in</span> <a href="../../reference/api/python/script/script.html#tvm.script.tirx.grid" title="tvm.script.tirx.grid" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">grid</span></a><span class="p">(</span><span class= [...]
-                <span class="k">with</span> <a href="../../reference/api/python/script/script.html#tvm.script.tirx.sblock" title="tvm.script.tirx.sblock" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">sblock</span></a><span class="p">(</span><span class="s2">&quot;matmul&quot;</span><span class="p">):</span>
-                    <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">,</span> <span class="n">vk</span> <span class="o">=</span> <a href="../../reference/api/python/script/script.html#tvm.script.tirx.axis.remap" title="tvm.script.tirx.axis.remap" class="sphx-glr-backref-module-tvm-script-tirx-axis sphx-glr-backref-type-py-method"><span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">rem [...]
-                    <span class="k">with</span> <a href="../../reference/api/python/script/script.html#tvm.script.tirx.init" title="tvm.script.tirx.init" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">init</span></a><span class="p">():</span>
+                <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;matmul&quot;</span><span class="p">):</span>
+                    <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">,</span> <span class="n">vk</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SSR&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span cl [...]
+                    <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">init</span><span class="p">():</span>
                         <span class="n">C</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">float32</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
                     <span class="n">C</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <span class="n">C</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">+</span> <span class="n">A</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vk</span><sp [...]
 
@@ -843,15 +844,15 @@ three different calling conventions:</p>
 
     <span class="nd">@R</span><span class="o">.</span><span class="n">py_module</span>
     <span class="k">class</span><span class="w"> </span><span class="nc">PipelineModule</span><span class="p">(</span><a href="../../reference/api/python/relax/relax.html#tvm.relax.BasePyModule" title="tvm.relax.BasePyModule" class="sphx-glr-backref-module-tvm-relax sphx-glr-backref-type-py-class"><span class="n">BasePyModule</span></a><span class="p">):</span>
-        <span class="nd">@T</span><span class="o">.</span><span class="n">prim_func</span><span class="p">(</span><span class="n">s_tir</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+        <span class="nd">@Ts</span><span class="o">.</span><span class="n">prim_func</span>
         <span class="k">def</span><span class="w"> </span><span class="nf">matmul_tir</span><span class="p">(</span><span class="n">var_A</span><span class="p">:</span> <a href="../../reference/api/python/script/script.html#tvm.script.tirx.handle" title="tvm.script.tirx.handle" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">handle</span></a><span class="p">,</span> <span class="n">var_B</sp [...]
             <span class="n">A</span> <span class="o">=</span> <a href="../../reference/api/python/script/script.html#tvm.script.tirx.match_buffer" title="tvm.script.tirx.match_buffer" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">match_buffer</span></a><span class="p">(</span><span class="n">var_A</span><span class="p">,</span> <span class="p">(</span><span class="mi">2</span><span class=" [...]
             <span class="n">B</span> <span class="o">=</span> <a href="../../reference/api/python/script/script.html#tvm.script.tirx.match_buffer" title="tvm.script.tirx.match_buffer" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">match_buffer</span></a><span class="p">(</span><span class="n">var_B</span><span class="p">,</span> <span class="p">(</span><span class="mi">4</span><span class=" [...]
             <span class="n">C</span> <span class="o">=</span> <a href="../../reference/api/python/script/script.html#tvm.script.tirx.match_buffer" title="tvm.script.tirx.match_buffer" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">match_buffer</span></a><span class="p">(</span><span class="n">var_C</span><span class="p">,</span> <span class="p">(</span><span class="mi">2</span><span class=" [...]
             <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">j</span><span class="p">,</span> <span class="n">k</span> <span class="ow">in</span> <a href="../../reference/api/python/script/script.html#tvm.script.tirx.grid" title="tvm.script.tirx.grid" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">grid</span></a><span class="p">(</span><span class= [...]
-                <span class="k">with</span> <a href="../../reference/api/python/script/script.html#tvm.script.tirx.sblock" title="tvm.script.tirx.sblock" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">sblock</span></a><span class="p">(</span><span class="s2">&quot;matmul&quot;</span><span class="p">):</span>
-                    <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">,</span> <span class="n">vk</span> <span class="o">=</span> <a href="../../reference/api/python/script/script.html#tvm.script.tirx.axis.remap" title="tvm.script.tirx.axis.remap" class="sphx-glr-backref-module-tvm-script-tirx-axis sphx-glr-backref-type-py-method"><span class="n">T</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">rem [...]
-                    <span class="k">with</span> <a href="../../reference/api/python/script/script.html#tvm.script.tirx.init" title="tvm.script.tirx.init" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">init</span></a><span class="p">():</span>
+                <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">sblock</span><span class="p">(</span><span class="s2">&quot;matmul&quot;</span><span class="p">):</span>
+                    <span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">,</span> <span class="n">vk</span> <span class="o">=</span> <span class="n">Ts</span><span class="o">.</span><span class="n">axis</span><span class="o">.</span><span class="n">remap</span><span class="p">(</span><span class="s2">&quot;SSR&quot;</span><span class="p">,</span> <span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="n">j</span><span cl [...]
+                    <span class="k">with</span> <span class="n">Ts</span><span class="o">.</span><span class="n">init</span><span class="p">():</span>
                         <span class="n">C</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">float32</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
                     <span class="n">C</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">=</span> <span class="n">C</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vj</span><span class="p">]</span> <span class="o">+</span> <span class="n">A</span><span class="p">[</span><span class="n">vi</span><span class="p">,</span> <span class="n">vk</span><sp [...]
 
@@ -905,7 +906,7 @@ transformed the IR), and compare the output against a PyTorch reference to catch
     <span class="c1"># A simple Relax module: matmul + bias + relu (a dense layer)</span>
     <span class="nd">@I</span><span class="o">.</span><span class="n">ir_module</span>
     <span class="k">class</span><span class="w"> </span><span class="nc">DenseLayer</span><span class="p">:</span>
-        <span class="nd">@T</span><span class="o">.</span><span class="n">prim_func</span><span class="p">(</span><span class="n">s_tir</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+        <span class="nd">@Ts</span><span class="o">.</span><span class="n">prim_func</span>
         <span class="k">def</span><span class="w"> </span><span class="nf">bias_add_tir</span><span class="p">(</span><span class="n">var_x</span><span class="p">:</span> <a href="../../reference/api/python/script/script.html#tvm.script.tirx.handle" title="tvm.script.tirx.handle" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">handle</span></a><span class="p">,</span> <span class="n">var_b</ [...]
             <span class="n">x</span> <span class="o">=</span> <a href="../../reference/api/python/script/script.html#tvm.script.tirx.match_buffer" title="tvm.script.tirx.match_buffer" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">match_buffer</span></a><span class="p">(</span><span class="n">var_x</span><span class="p">,</span> <span class="p">(</span><span class="mi">2</span><span class=" [...]
             <span class="n">b</span> <span class="o">=</span> <a href="../../reference/api/python/script/script.html#tvm.script.tirx.match_buffer" title="tvm.script.tirx.match_buffer" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">match_buffer</span></a><span class="p">(</span><span class="n">var_b</span><span class="p">,</span> <span class="p">(</span><span class="mi">4</span><span class=" [...]
@@ -1028,7 +1029,7 @@ tensors at call time, so the same module handles different sizes without recompi
 
     <span class="nd">@R</span><span class="o">.</span><span class="n">py_module</span>
     <span class="k">class</span><span class="w"> </span><span class="nc">DynamicModule</span><span class="p">(</span><a href="../../reference/api/python/relax/relax.html#tvm.relax.BasePyModule" title="tvm.relax.BasePyModule" class="sphx-glr-backref-module-tvm-relax sphx-glr-backref-type-py-class"><span class="n">BasePyModule</span></a><span class="p">):</span>
-        <span class="nd">@T</span><span class="o">.</span><span class="n">prim_func</span><span class="p">(</span><span class="n">s_tir</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+        <span class="nd">@Ts</span><span class="o">.</span><span class="n">prim_func</span>
         <span class="k">def</span><span class="w"> </span><span class="nf">scale_tir</span><span class="p">(</span><span class="n">var_x</span><span class="p">:</span> <a href="../../reference/api/python/script/script.html#tvm.script.tirx.handle" title="tvm.script.tirx.handle" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">handle</span></a><span class="p">,</span> <span class="n">var_out</s [...]
             <span class="n">n</span> <span class="o">=</span> <span class="n">T</span><span class="o">.</span><span class="n">int64</span><span class="p">()</span>
             <span class="n">x</span> <span class="o">=</span> <a href="../../reference/api/python/script/script.html#tvm.script.tirx.match_buffer" title="tvm.script.tirx.match_buffer" class="sphx-glr-backref-module-tvm-script-tirx sphx-glr-backref-type-py-function"><span class="n">T</span><span class="o">.</span><span class="n">match_buffer</span></a><span class="p">(</span><span class="n">var_x</span><span class="p">,</span> <span class="p">(</span><span class="n">n</span><span class="p [...]
diff --git a/docs/how_to/tutorials/sg_execution_times.html b/docs/how_to/tutorials/sg_execution_times.html
index f29166a9360..83de5d3dfc6 100644
--- a/docs/how_to/tutorials/sg_execution_times.html
+++ b/docs/how_to/tutorials/sg_execution_times.html
@@ -634,7 +634,7 @@ document.write(`
                   
   <section id="computation-times">
 <span id="sphx-glr-how-to-tutorials-sg-execution-times"></span><h1>Computation times<a class="headerlink" href="#computation-times" title="Link to this heading">#</a></h1>
-<p><strong>00:13.039</strong> total execution time for 8 files <strong>from how_to/tutorials</strong>:</p>
+<p><strong>00:13.306</strong> total execution time for 8 files <strong>from how_to/tutorials</strong>:</p>
 <div class="docutils container">
 <style scoped>
 <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.3.0/css/bootstrap.min.css" rel="stylesheet" />
@@ -656,31 +656,31 @@ $(document).ready( function () {
 </thead>
 <tbody>
 <tr class="row-even"><td><p><a class="reference internal" href="optimize_llm.html#sphx-glr-how-to-tutorials-optimize-llm-py"><span class="std std-ref">Optimize Large Language Model</span></a> (<code class="docutils literal notranslate"><span class="pre">optimize_llm.py</span></code>)</p></td>
-<td><p>00:08.332</p></td>
+<td><p>00:08.304</p></td>
 <td><p>0.0</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="import_model.html#sphx-glr-how-to-tutorials-import-model-py"><span class="std std-ref">Importing Models from ML Frameworks</span></a> (<code class="docutils literal notranslate"><span class="pre">import_model.py</span></code>)</p></td>
-<td><p>00:03.304</p></td>
+<td><p>00:03.325</p></td>
 <td><p>0.0</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="e2e_opt_model.html#sphx-glr-how-to-tutorials-e2e-opt-model-py"><span class="std std-ref">End-to-End Optimize Model</span></a> (<code class="docutils literal notranslate"><span class="pre">e2e_opt_model.py</span></code>)</p></td>
-<td><p>00:00.597</p></td>
+<td><p>00:00.876</p></td>
 <td><p>0.0</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="cross_compilation_and_rpc.html#sphx-glr-how-to-tutorials-cross-compilation-and-rpc-py"><span class="std std-ref">Cross Compilation and RPC</span></a> (<code class="docutils literal notranslate"><span class="pre">cross_compilation_and_rpc.py</span></code>)</p></td>
-<td><p>00:00.482</p></td>
+<td><p>00:00.475</p></td>
 <td><p>0.0</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="customize_opt.html#sphx-glr-how-to-tutorials-customize-opt-py"><span class="std std-ref">Customize Optimization</span></a> (<code class="docutils literal notranslate"><span class="pre">customize_opt.py</span></code>)</p></td>
-<td><p>00:00.294</p></td>
+<td><p>00:00.297</p></td>
 <td><p>0.0</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="bring_your_own_codegen.html#sphx-glr-how-to-tutorials-bring-your-own-codegen-py"><span class="std std-ref">Bring Your Own Codegen</span></a> (<code class="docutils literal notranslate"><span class="pre">bring_your_own_codegen.py</span></code>)</p></td>
-<td><p>00:00.023</p></td>
+<td><p>00:00.024</p></td>
 <td><p>0.0</p></td>
 </tr>
 <tr class="row-even"><td><p><a class="reference internal" href="mix_python_and_tvm_with_pymodule.html#sphx-glr-how-to-tutorials-mix-python-and-tvm-with-pymodule-py"><span class="std std-ref">Mix Python/PyTorch with TVM Using BasePyModule</span></a> (<code class="docutils literal notranslate"><span class="pre">mix_python_and_tvm_with_pymodule.py</span></code>)</p></td>
-<td><p>00:00.005</p></td>
+<td><p>00:00.004</p></td>
 <td><p>0.0</p></td>
 </tr>
 <tr class="row-odd"><td><p><a class="reference internal" href="export_and_load_executable.html#sphx-glr-how-to-tutorials-export-and-load-executable-py"><span class="std std-ref">Export and Load Relax Executables</span></a> (<code class="docutils literal notranslate"><span class="pre">export_and_load_executable.py</span></code>)</p></td>
diff --git a/docs/objects.inv b/docs/objects.inv
index 0c79b3bb66d..b556dd2d14a 100644
Binary files a/docs/objects.inv and b/docs/objects.inv differ
diff --git a/docs/reference/api/doxygen/annotated.html b/docs/reference/api/doxygen/annotated.html
index 06fb8c14504..23b8763fccf 100644
--- a/docs/reference/api/doxygen/annotated.html
+++ b/docs/reference/api/doxygen/annotated.html
@@ -530,39 +530,42 @@ $(function() {
 <tr id="row_0_7_0_2_11_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1relax_1_1SeqExprFrameNode.html" target="_self">SeqExprFrameNode</a></td><td class="desc">The base <a class="el" href="namespacetvm_1_1script_1_1ir__builder.html">ir_builder</a> frame for frames with SeqExpr i.e. Functions, If branches </td></tr>
 <tr id="row_0_7_0_2_12_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1relax_1_1ThenFrame.html" target="_self">ThenFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1relax_1_1ThenFrameNode.html" title="A frame that represents then.">ThenFrameNode</a> </td></tr>
 <tr id="row_0_7_0_2_13_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1relax_1_1ThenFrameNode.html" target="_self">ThenFrameNode</a></td><td class="desc">A frame that represents then </td></tr>
-<tr id="row_0_7_0_3_" class="odd" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_0_7_0_3_" class="arrow" onclick="toggleFolder('0_7_0_3_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacetvm_1_1script_1_1ir__builder_1_1tirx.html" target="_self">tirx</a></td><td class="desc"></td></tr>
-<tr id="row_0_7_0_3_0_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1AssertFrame.html" target="_self">AssertFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1AssertFrameNode.html" title="A frame that represents the assert statement. Procee [...]
-<tr id="row_0_7_0_3_1_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1AssertFrameNode.html" target="_self">AssertFrameNode</a></td><td class="desc">A frame that represents the assert statement. Proceeds if the condition is true, otherwise aborts with the message </td></tr>
-<tr id="row_0_7_0_3_2_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1AttrFrame.html" target="_self">AttrFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1AttrFrameNode.html" title="A frame that represents attribute node.">AttrFrameNode</a> [...]
-<tr id="row_0_7_0_3_3_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1AttrFrameNode.html" target="_self">AttrFrameNode</a></td><td class="desc">A frame that represents attribute node </td></tr>
-<tr id="row_0_7_0_3_4_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1BlockInitFrame.html" target="_self">BlockInitFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1BlockInitFrameNode.html" title="A frame that represents the block initializ [...]
-<tr id="row_0_7_0_3_5_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1BlockInitFrameNode.html" target="_self">BlockInitFrameNode</a></td><td class="desc">A frame that represents the block initialization statment </td></tr>
-<tr id="row_0_7_0_3_6_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1DeclBufferFrame.html" target="_self">DeclBufferFrame</a></td><td class="desc"></td></tr>
-<tr id="row_0_7_0_3_7_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1DeclBufferFrameNode.html" target="_self">DeclBufferFrameNode</a></td><td class="desc"></td></tr>
-<tr id="row_0_7_0_3_8_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1ElseFrame.html" target="_self">ElseFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1ElseFrameNode.html" title="A frame that represents else.">ElseFrameNode</a> </td></tr>
-<tr id="row_0_7_0_3_9_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1ElseFrameNode.html" target="_self">ElseFrameNode</a></td><td class="desc">A frame that represents else </td></tr>
-<tr id="row_0_7_0_3_10_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1ForFrame.html" target="_self">ForFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1ForFrameNode.html" title="A frame that represents the for loop.">ForFrameNode</a> </td></tr>
-<tr id="row_0_7_0_3_11_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1ForFrameNode.html" target="_self">ForFrameNode</a></td><td class="desc">A frame that represents the for loop </td></tr>
-<tr id="row_0_7_0_3_12_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1HintFrame.html" target="_self">HintFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1HintFrameNode.html" title="A frame that represents a hint directive for the sketch l [...]
-<tr id="row_0_7_0_3_13_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1HintFrameNode.html" target="_self">HintFrameNode</a></td><td class="desc">A frame that represents a hint directive for the sketch language </td></tr>
-<tr id="row_0_7_0_3_14_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1IfFrame.html" target="_self">IfFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1IfFrameNode.html" title="A frame that represents if statement.">IfFrameNode</a> </td></tr>
-<tr id="row_0_7_0_3_15_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1IfFrameNode.html" target="_self">IfFrameNode</a></td><td class="desc">A frame that represents if statement </td></tr>
-<tr id="row_0_7_0_3_16_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1LaunchThreadFrame.html" target="_self">LaunchThreadFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1LaunchThreadFrameNode.html" title="The LaunchThreadFrameNode.">Launc [...]
-<tr id="row_0_7_0_3_17_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1LaunchThreadFrameNode.html" target="_self">LaunchThreadFrameNode</a></td><td class="desc">The <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1LaunchThreadFrameNode.html" title="The LaunchThreadFrameNode.">LaunchThreadFr [...]
-<tr id="row_0_7_0_3_18_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1PrimFuncFrame.html" target="_self">PrimFuncFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1PrimFuncFrameNode.html" title="A frame that represents the PrimFunc containi [...]
-<tr id="row_0_7_0_3_19_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1PrimFuncFrameNode.html" target="_self">PrimFuncFrameNode</a></td><td class="desc">A frame that represents the PrimFunc containing TIR statements </td></tr>
-<tr id="row_0_7_0_3_20_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1SBlockFrame.html" target="_self">SBlockFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1SBlockFrameNode.html" title="A frame that represents the block.">SBlockFrameNode [...]
-<tr id="row_0_7_0_3_21_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1SBlockFrameNode.html" target="_self">SBlockFrameNode</a></td><td class="desc">A frame that represents the block </td></tr>
-<tr id="row_0_7_0_3_22_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1ThenFrame.html" target="_self">ThenFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1ThenFrameNode.html" title="A frame that represents then.">ThenFrameNode</a> </td></tr>
-<tr id="row_0_7_0_3_23_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1ThenFrameNode.html" target="_self">ThenFrameNode</a></td><td class="desc">A frame that represents then </td></tr>
-<tr id="row_0_7_0_3_24_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1TIRFrame.html" target="_self">TIRFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1TIRFrameNode.html" title="A base frame that represents the TIR fame with body of state [...]
-<tr id="row_0_7_0_3_25_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1TIRFrameNode.html" target="_self">TIRFrameNode</a></td><td class="desc">A base frame that represents the TIR fame with body of statements </td></tr>
-<tr id="row_0_7_0_3_26_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1WhileFrame.html" target="_self">WhileFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1WhileFrameNode.html" title="A frame that represents while loop.">WhileFrameNode</a [...]
-<tr id="row_0_7_0_3_27_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1WhileFrameNode.html" target="_self">WhileFrameNode</a></td><td class="desc">A frame that represents while loop </td></tr>
-<tr id="row_0_7_0_4_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1IRBuilder.html" target="_self">IRBuilder</a></td><td class="desc">Managed reference to an <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1IRBuilderNode.html" title="A language variant agnostic IRBuilder that constructs any IR of TVM. An i [...]
-<tr id="row_0_7_0_5_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1IRBuilderFrame.html" target="_self">IRBuilderFrame</a></td><td class="desc">Managed reference to an <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1IRBuilderFrameNode.html" title="A stack frame of the IRBuilder used to keep track of the c [...]
-<tr id="row_0_7_0_6_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1IRBuilderFrameNode.html" target="_self">IRBuilderFrameNode</a></td><td class="desc">A stack frame of the <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1IRBuilder.html" title="Managed reference to an IRBuilderNode.">IRBuilder</a> used to  [...]
-<tr id="row_0_7_0_7_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1IRBuilderNode.html" target="_self">IRBuilderNode</a></td><td class="desc">A language variant agnostic <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1IRBuilder.html" title="Managed reference to an IRBuilderNode.">IRBuilder</a> that constr [...]
+<tr id="row_0_7_0_3_" class="odd" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_0_7_0_3_" class="arrow" onclick="toggleFolder('0_7_0_3_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacetvm_1_1script_1_1ir__builder_1_1s__tir.html" target="_self">s_tir</a></td><td class="desc"></td></tr>
+<tr id="row_0_7_0_3_0_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1s__tir_1_1BlockInitFrame.html" target="_self">BlockInitFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1s__tir_1_1BlockInitFrameNode.html" title="A frame that represents the block initi [...]
+<tr id="row_0_7_0_3_1_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1s__tir_1_1BlockInitFrameNode.html" target="_self">BlockInitFrameNode</a></td><td class="desc">A frame that represents the block initialization statment </td></tr>
+<tr id="row_0_7_0_3_2_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1s__tir_1_1PrimFuncFrame.html" target="_self">PrimFuncFrame</a></td><td class="desc"></td></tr>
+<tr id="row_0_7_0_3_3_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1s__tir_1_1PrimFuncFrameNode.html" target="_self">PrimFuncFrameNode</a></td><td class="desc">Function frame owning schedulable TIR construction </td></tr>
+<tr id="row_0_7_0_3_4_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1s__tir_1_1SBlockFrame.html" target="_self">SBlockFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1s__tir_1_1SBlockFrameNode.html" title="A frame that represents the block.">SBlockFrameN [...]
+<tr id="row_0_7_0_3_5_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1s__tir_1_1SBlockFrameNode.html" target="_self">SBlockFrameNode</a></td><td class="desc">A frame that represents the block </td></tr>
+<tr id="row_0_7_0_4_" class="odd" style="display:none;"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span id="arr_0_7_0_4_" class="arrow" onclick="toggleFolder('0_7_0_4_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacetvm_1_1script_1_1ir__builder_1_1tirx.html" target="_self">tirx</a></td><td class="desc"></td></tr>
+<tr id="row_0_7_0_4_0_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1AssertFrame.html" target="_self">AssertFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1AssertFrameNode.html" title="A frame that represents the assert statement. Procee [...]
+<tr id="row_0_7_0_4_1_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1AssertFrameNode.html" target="_self">AssertFrameNode</a></td><td class="desc">A frame that represents the assert statement. Proceeds if the condition is true, otherwise aborts with the message </td></tr>
+<tr id="row_0_7_0_4_2_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1AttrFrame.html" target="_self">AttrFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1AttrFrameNode.html" title="A frame that represents attribute node.">AttrFrameNode</a> [...]
+<tr id="row_0_7_0_4_3_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1AttrFrameNode.html" target="_self">AttrFrameNode</a></td><td class="desc">A frame that represents attribute node </td></tr>
+<tr id="row_0_7_0_4_4_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1DeclBufferFrame.html" target="_self">DeclBufferFrame</a></td><td class="desc"></td></tr>
+<tr id="row_0_7_0_4_5_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1DeclBufferFrameNode.html" target="_self">DeclBufferFrameNode</a></td><td class="desc"></td></tr>
+<tr id="row_0_7_0_4_6_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1ElseFrame.html" target="_self">ElseFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1ElseFrameNode.html" title="A frame that represents else.">ElseFrameNode</a> </td></tr>
+<tr id="row_0_7_0_4_7_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1ElseFrameNode.html" target="_self">ElseFrameNode</a></td><td class="desc">A frame that represents else </td></tr>
+<tr id="row_0_7_0_4_8_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1ForFrame.html" target="_self">ForFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1ForFrameNode.html" title="A frame that represents the for loop.">ForFrameNode</a> </td></tr>
+<tr id="row_0_7_0_4_9_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1ForFrameNode.html" target="_self">ForFrameNode</a></td><td class="desc">A frame that represents the for loop </td></tr>
+<tr id="row_0_7_0_4_10_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1HintFrame.html" target="_self">HintFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1HintFrameNode.html" title="A frame that represents a hint directive for the sketch l [...]
+<tr id="row_0_7_0_4_11_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1HintFrameNode.html" target="_self">HintFrameNode</a></td><td class="desc">A frame that represents a hint directive for the sketch language </td></tr>
+<tr id="row_0_7_0_4_12_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1IfFrame.html" target="_self">IfFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1IfFrameNode.html" title="A frame that represents if statement.">IfFrameNode</a> </td></tr>
+<tr id="row_0_7_0_4_13_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1IfFrameNode.html" target="_self">IfFrameNode</a></td><td class="desc">A frame that represents if statement </td></tr>
+<tr id="row_0_7_0_4_14_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1LaunchThreadFrame.html" target="_self">LaunchThreadFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1LaunchThreadFrameNode.html" title="The LaunchThreadFrameNode.">Launc [...]
+<tr id="row_0_7_0_4_15_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1LaunchThreadFrameNode.html" target="_self">LaunchThreadFrameNode</a></td><td class="desc">The <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1LaunchThreadFrameNode.html" title="The LaunchThreadFrameNode.">LaunchThreadFr [...]
+<tr id="row_0_7_0_4_16_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1PrimFuncFrame.html" target="_self">PrimFuncFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1PrimFuncFrameNode.html" title="A frame that represents the PrimFunc containi [...]
+<tr id="row_0_7_0_4_17_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1PrimFuncFrameNode.html" target="_self">PrimFuncFrameNode</a></td><td class="desc">A frame that represents the PrimFunc containing TIR statements </td></tr>
+<tr id="row_0_7_0_4_18_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1ThenFrame.html" target="_self">ThenFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1ThenFrameNode.html" title="A frame that represents then.">ThenFrameNode</a> </td></tr>
+<tr id="row_0_7_0_4_19_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1ThenFrameNode.html" target="_self">ThenFrameNode</a></td><td class="desc">A frame that represents then </td></tr>
+<tr id="row_0_7_0_4_20_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1TIRFrame.html" target="_self">TIRFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1TIRFrameNode.html" title="A base frame that represents the TIR fame with body of state [...]
+<tr id="row_0_7_0_4_21_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1TIRFrameNode.html" target="_self">TIRFrameNode</a></td><td class="desc">A base frame that represents the TIR fame with body of statements </td></tr>
+<tr id="row_0_7_0_4_22_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1WhileFrame.html" target="_self">WhileFrame</a></td><td class="desc">Managed reference to <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1WhileFrameNode.html" title="A frame that represents while loop.">WhileFrameNode</a [...]
+<tr id="row_0_7_0_4_23_" class="odd" style="display:none;"><td class="entry"><span style="width:80px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1tirx_1_1WhileFrameNode.html" target="_self">WhileFrameNode</a></td><td class="desc">A frame that represents while loop </td></tr>
+<tr id="row_0_7_0_5_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1IRBuilder.html" target="_self">IRBuilder</a></td><td class="desc">Managed reference to an <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1IRBuilderNode.html" title="A language variant agnostic IRBuilder that constructs any IR of TVM. An i [...]
+<tr id="row_0_7_0_6_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1IRBuilderFrame.html" target="_self">IRBuilderFrame</a></td><td class="desc">Managed reference to an <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1IRBuilderFrameNode.html" title="A stack frame of the IRBuilder used to keep track of the c [...]
+<tr id="row_0_7_0_7_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1IRBuilderFrameNode.html" target="_self">IRBuilderFrameNode</a></td><td class="desc">A stack frame of the <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1IRBuilder.html" title="Managed reference to an IRBuilderNode.">IRBuilder</a> used to  [...]
+<tr id="row_0_7_0_8_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1ir__builder_1_1IRBuilderNode.html" target="_self">IRBuilderNode</a></td><td class="desc">A language variant agnostic <a class="el" href="classtvm_1_1script_1_1ir__builder_1_1IRBuilder.html" title="Managed reference to an IRBuilderNode.">IRBuilder</a> that constr [...]
 <tr id="row_0_7_1_" class="odd" style="display:none;"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span id="arr_0_7_1_" class="arrow" onclick="toggleFolder('0_7_1_')">&#9658;</span><span class="icona"><span class="icon">N</span></span><a class="el" href="namespacetvm_1_1script_1_1printer.html" target="_self">printer</a></td><td class="desc"></td></tr>
 <tr id="row_0_7_1_0_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1printer_1_1AssertDoc.html" target="_self">AssertDoc</a></td><td class="desc">Reference type of <a class="el" href="classtvm_1_1script_1_1printer_1_1AssertDocNode.html" title="Doc that represents assert statement.">AssertDocNode</a> </td></tr>
 <tr id="row_0_7_1_1_" class="odd" style="display:none;"><td class="entry"><span style="width:64px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="classtvm_1_1script_1_1printer_1_1AssertDocNode.html" target="_self">AssertDocNode</a></td><td class="desc"><a class="el" href="classtvm_1_1script_1_1printer_1_1Doc.html" title="Reference type of DocNode.">Doc</a> that represents assert statement </td></tr>
diff --git a/docs/reference/api/doxygen/attr__registry__map_8h.html b/docs/reference/api/doxygen/attr__registry__map_8h.html
index e64061ce5e0..09c2962bd2c 100644
--- a/docs/reference/api/doxygen/attr__registry__map_8h.html
+++ b/docs/reference/api/doxygen/attr__registry__map_8h.html
@@ -93,7 +93,7 @@ Include dependency graph for attr_registry_map.h:</div>
 </div><div class="textblock"><div class="dynheader">
 This graph shows which files directly or indirectly include this file:</div>
 <div class="dyncontent">
-<div class="center"><iframe scrolling="no" frameborder="0" src="attr__registry__map_8h__dep__incl.svg" width="11602" height="1650"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
+<div class="center"><iframe scrolling="no" frameborder="0" src="attr__registry__map_8h__dep__incl.svg" width="10935" height="1650"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
 </div>
 </div>
 <p><a href="attr__registry__map_8h_source.html">Go to the source code of this file.</a></p>
diff --git a/docs/reference/api/doxygen/attr__registry__map_8h__dep__incl.svg b/docs/reference/api/doxygen/attr__registry__map_8h__dep__incl.svg
index f0b4e89725b..64d374219b2 100644
--- a/docs/reference/api/doxygen/attr__registry__map_8h__dep__incl.svg
+++ b/docs/reference/api/doxygen/attr__registry__map_8h__dep__incl.svg
@@ -4,17 +4,17 @@
 <!-- Generated by graphviz version 2.43.0 (0)
  -->
 <!-- Title: include/tvm/ir/attr_registry_map.h Pages: 1 -->
-<svg width="8701pt" height="1237pt"
- viewBox="0.00 0.00 8701.00 1237.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<svg width="8201pt" height="1237pt"
+ viewBox="0.00 0.00 8200.50 1237.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1233)">
 <title>include/tvm/ir/attr_registry_map.h</title>
 <!-- Node1 -->
 <g id="Node000001" class="node">
 <title>Node1</title>
 <g id="a_Node000001"><a xlink:title="Attribute map used in registry.">
-<polygon fill="#999999" stroke="#666666" points="6426,-1229 6322,-1229 6322,-1199 6426,-1199 6426,-1229"/>
-<text text-anchor="start" x="6330" y="-1217" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/ir/attr</text>
-<text text-anchor="middle" x="6374" y="-1206" font-family="Helvetica,sans-Serif" font-size="10.00">_registry_map.h</text>
+<polygon fill="#999999" stroke="#666666" points="6325,-1229 6221,-1229 6221,-1199 6325,-1199 6325,-1229"/>
+<text text-anchor="start" x="6229" y="-1217" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/ir/attr</text>
+<text text-anchor="middle" x="6273" y="-1206" font-family="Helvetica,sans-Serif" font-size="10.00">_registry_map.h</text>
 </a>
 </g>
 </g>
@@ -22,8 +22,8 @@
 <g id="Node000002" class="node">
 <title>Node2</title>
 <g id="a_Node000002"><a xlink:href="ir_2op_8h.html" target="_top" xlink:title="Primitive operators(builtin intrinsics) and registry for them.">
-<polygon fill="white" stroke="#666666" points="2108,-959.5 2000,-959.5 2000,-940.5 2108,-940.5 2108,-959.5"/>
-<text text-anchor="middle" x="2054" y="-947.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/ir/op.h</text>
+<polygon fill="white" stroke="#666666" points="2509,-959.5 2401,-959.5 2401,-940.5 2509,-940.5 2509,-959.5"/>
+<text text-anchor="middle" x="2455" y="-947.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/ir/op.h</text>
 </a>
 </g>
 </g>
@@ -31,37 +31,18 @@
 <g id="edge1_Node000001_Node000002" class="edge">
 <title>Node1&#45;&gt;Node2</title>
 <g id="a_edge1_Node000001_Node000002"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M6311.6,-1209.22C5819.36,-1179.36 2569.09,-982.24 2108.29,-954.29"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="6311.52,-1212.72 6321.71,-1209.83 6311.94,-1205.73 6311.52,-1212.72"/>
-</a>
-</g>
-</g>
-<!-- Node99 -->
-<g id="Node000099" class="node">
-<title>Node99</title>
-<g id="a_Node000099"><a xlink:href="tag_8h.html" target="_top" xlink:title="Target tag registry.">
-<polygon fill="white" stroke="#666666" points="6028.5,-1031 5921.5,-1031 5921.5,-1001 6028.5,-1001 6028.5,-1031"/>
-<text text-anchor="start" x="5929.5" y="-1019" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/target</text>
-<text text-anchor="middle" x="5975" y="-1008" font-family="Helvetica,sans-Serif" font-size="10.00">/tag.h</text>
-</a>
-</g>
-</g>
-<!-- Node1&#45;&gt;Node99 -->
-<g id="edge171_Node000001_Node000099" class="edge">
-<title>Node1&#45;&gt;Node99</title>
-<g id="a_edge171_Node000001_Node000099"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M6336.15,-1194.41C6256.76,-1155.41 6074.37,-1065.81 6003.7,-1031.1"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="6334.79,-1197.64 6345.3,-1198.9 6337.87,-1191.35 6334.79,-1197.64"/>
+<path fill="none" stroke="#63b8ff" d="M6210.83,-1208.73C5755.11,-1177.46 2936.23,-984.02 2509.19,-954.72"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="6210.62,-1212.23 6220.84,-1209.42 6211.1,-1205.24 6210.62,-1212.23"/>
 </a>
 </g>
 </g>
 <!-- Node100 -->
 <g id="Node000100" class="node">
 <title>Node100</title>
-<g id="a_Node000100"><a xlink:href="target__kind_8h.html" target="_top" xlink:title="Target kind registry.">
-<polygon fill="white" stroke="#666666" points="6494.5,-1163 6387.5,-1163 6387.5,-1133 6494.5,-1133 6494.5,-1163"/>
-<text text-anchor="start" x="6395.5" y="-1151" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/target</text>
-<text text-anchor="middle" x="6441" y="-1140" font-family="Helvetica,sans-Serif" font-size="10.00">/target_kind.h</text>
+<g id="a_Node000100"><a xlink:href="tag_8h.html" target="_top" xlink:title="Target tag registry.">
+<polygon fill="white" stroke="#666666" points="5819.5,-1031 5712.5,-1031 5712.5,-1001 5819.5,-1001 5819.5,-1031"/>
+<text text-anchor="start" x="5720.5" y="-1019" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/target</text>
+<text text-anchor="middle" x="5766" y="-1008" font-family="Helvetica,sans-Serif" font-size="10.00">/tag.h</text>
 </a>
 </g>
 </g>
@@ -69,26 +50,45 @@
 <g id="edge172_Node000001_Node000100" class="edge">
 <title>Node1&#45;&gt;Node100</title>
 <g id="a_edge172_Node000001_Node000100"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M6396.35,-1191.65C6406.17,-1182.27 6417.42,-1171.53 6426.17,-1163.16"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="6393.68,-1189.36 6388.87,-1198.8 6398.52,-1194.42 6393.68,-1189.36"/>
+<path fill="none" stroke="#63b8ff" d="M6227.04,-1195.23C6127.33,-1156.69 5892.9,-1066.06 5802.47,-1031.1"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="6225.95,-1198.56 6236.54,-1198.9 6228.47,-1192.03 6225.95,-1198.56"/>
 </a>
 </g>
 </g>
-<!-- Node114 -->
-<g id="Node000114" class="node">
-<title>Node114</title>
-<g id="a_Node000114"><a xlink:href="layout_8h.html" target="_top" xlink:title="Definition of layout.">
-<polygon fill="white" stroke="#666666" points="6965.5,-1025.5 6828.5,-1025.5 6828.5,-1006.5 6965.5,-1006.5 6965.5,-1025.5"/>
-<text text-anchor="middle" x="6897" y="-1013.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/tirx/layout.h</text>
+<!-- Node101 -->
+<g id="Node000101" class="node">
+<title>Node101</title>
+<g id="a_Node000101"><a xlink:href="target__kind_8h.html" target="_top" xlink:title="Target kind registry.">
+<polygon fill="white" stroke="#666666" points="6411.5,-1163 6304.5,-1163 6304.5,-1133 6411.5,-1133 6411.5,-1163"/>
+<text text-anchor="start" x="6312.5" y="-1151" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/target</text>
+<text text-anchor="middle" x="6358" y="-1140" font-family="Helvetica,sans-Serif" font-size="10.00">/target_kind.h</text>
+</a>
+</g>
+</g>
+<!-- Node1&#45;&gt;Node101 -->
+<g id="edge173_Node000001_Node000101" class="edge">
+<title>Node1&#45;&gt;Node101</title>
+<g id="a_edge173_Node000001_Node000101"><a xlink:title=" ">
+<path fill="none" stroke="#63b8ff" d="M6299.89,-1192.75C6312.67,-1183.13 6327.64,-1171.86 6339.19,-1163.16"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="6297.75,-1189.99 6291.86,-1198.8 6301.96,-1195.58 6297.75,-1189.99"/>
+</a>
+</g>
+</g>
+<!-- Node115 -->
+<g id="Node000115" class="node">
+<title>Node115</title>
+<g id="a_Node000115"><a xlink:href="layout_8h.html" target="_top" xlink:title="Definition of layout.">
+<polygon fill="white" stroke="#666666" points="7960.5,-1025.5 7823.5,-1025.5 7823.5,-1006.5 7960.5,-1006.5 7960.5,-1025.5"/>
+<text text-anchor="middle" x="7892" y="-1013.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/tirx/layout.h</text>
 </a>
 </g>
 </g>
-<!-- Node1&#45;&gt;Node114 -->
-<g id="edge265_Node000001_Node000114" class="edge">
-<title>Node1&#45;&gt;Node114</title>
-<g id="a_edge265_Node000001_Node000114"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M6421.01,-1195.38C6529.68,-1154.66 6795.02,-1055.22 6874.28,-1025.51"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="6419.75,-1192.12 6411.61,-1198.9 6422.21,-1198.67 6419.75,-1192.12"/>
+<!-- Node1&#45;&gt;Node115 -->
+<g id="edge269_Node000001_Node000115" class="edge">
+<title>Node1&#45;&gt;Node115</title>
+<g id="a_edge269_Node000001_Node000115"><a xlink:title=" ">
+<path fill="none" stroke="#63b8ff" d="M6335.33,-1206.73C6544.16,-1185.47 7238.18,-1112.91 7809,-1031 7820.28,-1029.38 7832.4,-1027.45 7843.78,-1025.54"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="6334.76,-1203.27 6325.17,-1207.76 6335.47,-1210.23 6334.76,-1203.27"/>
 </a>
 </g>
 </g>
@@ -96,9 +96,9 @@
 <g id="Node000003" class="node">
 <title>Node3</title>
 <g id="a_Node000003"><a xlink:href="ir_2expr__functor_8h.html" target="_top" xlink:title="Native visiting and mutation of core IR expressions.">
-<polygon fill="white" stroke="#666666" points="7311.5,-833 7202.5,-833 7202.5,-803 7311.5,-803 7311.5,-833"/>
-<text text-anchor="start" x="7210.5" y="-821" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/ir/expr</text>
-<text text-anchor="middle" x="7257" y="-810" font-family="Helvetica,sans-Serif" font-size="10.00">_functor.h</text>
+<polygon fill="white" stroke="#666666" points="7161.5,-833 7052.5,-833 7052.5,-803 7161.5,-803 7161.5,-833"/>
+<text text-anchor="start" x="7060.5" y="-821" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/ir/expr</text>
+<text text-anchor="middle" x="7107" y="-810" font-family="Helvetica,sans-Serif" font-size="10.00">_functor.h</text>
 </a>
 </g>
 </g>
@@ -106,8 +106,8 @@
 <g id="edge2_Node000002_Node000003" class="edge">
 <title>Node2&#45;&gt;Node3</title>
 <g id="a_edge2_Node000002_Node000003"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M2118.2,-948.93C2648.37,-948.24 6295.12,-941.96 6780,-899 6934.32,-885.33 7113.96,-849.81 7202.27,-831.04"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="2118.06,-945.43 2108.06,-948.94 2118.07,-952.43 2118.06,-945.43"/>
+<path fill="none" stroke="#63b8ff" d="M2519.62,-947.19C3042.14,-932.59 6569.41,-834.02 7052.27,-820.53"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="2519.16,-943.71 2509.26,-947.48 2519.35,-950.7 2519.16,-943.71"/>
 </a>
 </g>
 </g>
@@ -115,9 +115,9 @@
 <g id="Node000027" class="node">
 <title>Node27</title>
 <g id="a_Node000027"><a xlink:href="ir_2prim_2builtin_8h.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="#666666" points="479,-899 369,-899 369,-869 479,-869 479,-899"/>
-<text text-anchor="start" x="377" y="-887" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/ir/prim</text>
-<text text-anchor="middle" x="424" y="-876" font-family="Helvetica,sans-Serif" font-size="10.00">/builtin.h</text>
+<polygon fill="white" stroke="#666666" points="441,-899 331,-899 331,-869 441,-869 441,-899"/>
+<text text-anchor="start" x="339" y="-887" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/ir/prim</text>
+<text text-anchor="middle" x="386" y="-876" font-family="Helvetica,sans-Serif" font-size="10.00">/builtin.h</text>
 </a>
 </g>
 </g>
@@ -125,8 +125,8 @@
 <g id="edge39_Node000002_Node000027" class="edge">
 <title>Node2&#45;&gt;Node27</title>
 <g id="a_edge39_Node000002_Node000027"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M1989.57,-946.47C1725.18,-936.09 725.88,-896.85 479.27,-887.17"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="1989.64,-949.98 1999.77,-946.87 1989.91,-942.98 1989.64,-949.98"/>
+<path fill="none" stroke="#63b8ff" d="M2390.79,-947.01C2079.59,-937.39 731.39,-895.68 441.17,-886.71"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="2390.88,-950.52 2400.99,-947.33 2391.1,-943.52 2390.88,-950.52"/>
 </a>
 </g>
 </g>
@@ -134,54 +134,54 @@
 <g id="Node000029" class="node">
 <title>Node29</title>
 <g id="a_Node000029"><a xlink:href="tirx_2op_8h.html" target="_top" xlink:title="Common operators defined for Expr.">
-<polygon fill="white" stroke="#666666" points="578,-761.5 460,-761.5 460,-742.5 578,-742.5 578,-761.5"/>
-<text text-anchor="middle" x="519" y="-749.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/tirx/op.h</text>
+<polygon fill="white" stroke="#666666" points="540,-761.5 422,-761.5 422,-742.5 540,-742.5 540,-761.5"/>
+<text text-anchor="middle" x="481" y="-749.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/tirx/op.h</text>
 </a>
 </g>
 </g>
 <!-- Node2&#45;&gt;Node29 -->
-<g id="edge167_Node000002_Node000029" class="edge">
+<g id="edge168_Node000002_Node000029" class="edge">
 <title>Node2&#45;&gt;Node29</title>
-<g id="a_edge167_Node000002_Node000029"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M1989.74,-940.79C1738.04,-908.66 821.13,-791.58 578.33,-760.58"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="1989.46,-944.29 1999.82,-942.08 1990.34,-937.34 1989.46,-944.29"/>
+<g id="a_edge168_Node000002_Node000029"><a xlink:title=" ">
+<path fill="none" stroke="#63b8ff" d="M2390.65,-942.61C2090.43,-912.8 829.92,-787.64 540.44,-758.9"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="2390.62,-946.13 2400.92,-943.63 2391.31,-939.16 2390.62,-946.13"/>
 </a>
 </g>
 </g>
-<!-- Node97 -->
-<g id="Node000097" class="node">
-<title>Node97</title>
-<g id="a_Node000097"><a xlink:href="tirx_2builtin_8h.html" target="_top" xlink:title="TIR builtin intrinsics.">
-<polygon fill="white" stroke="#666666" points="239.5,-827.5 102.5,-827.5 102.5,-808.5 239.5,-808.5 239.5,-827.5"/>
-<text text-anchor="middle" x="171" y="-815.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/tirx/builtin.h</text>
+<!-- Node98 -->
+<g id="Node000098" class="node">
+<title>Node98</title>
+<g id="a_Node000098"><a xlink:href="tirx_2builtin_8h.html" target="_top" xlink:title="TIR builtin intrinsics.">
+<polygon fill="white" stroke="#666666" points="225.5,-827.5 88.5,-827.5 88.5,-808.5 225.5,-808.5 225.5,-827.5"/>
+<text text-anchor="middle" x="157" y="-815.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/tirx/builtin.h</text>
 </a>
 </g>
 </g>
-<!-- Node2&#45;&gt;Node97 -->
-<g id="edge163_Node000002_Node000097" class="edge">
-<title>Node2&#45;&gt;Node97</title>
-<g id="a_edge163_Node000002_Node000097"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M1989.65,-948.51C1699.62,-946.09 521.14,-934.18 360,-899 291.77,-884.1 217.23,-845.12 186.04,-827.67"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="1989.96,-952.01 1999.99,-948.59 1990.02,-945.01 1989.96,-952.01"/>
+<!-- Node2&#45;&gt;Node98 -->
+<g id="edge164_Node000002_Node000098" class="edge">
+<title>Node2&#45;&gt;Node98</title>
+<g id="a_edge164_Node000002_Node000098"><a xlink:title=" ">
+<path fill="none" stroke="#63b8ff" d="M2390.42,-949.12C2055.81,-949.52 527.01,-948.61 322,-899 261.35,-884.32 196.85,-845.23 169.95,-827.7"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="2390.89,-952.62 2400.89,-949.11 2390.88,-945.62 2390.89,-952.62"/>
 </a>
 </g>
 </g>
-<!-- Node98 -->
-<g id="Node000098" class="node">
-<title>Node98</title>
-<g id="a_Node000098"><a xlink:href="tile__primitive_8h.html" target="_top" xlink:title="TIRX tile primitive statements, operators, and reified lambda expressions.">
-<polygon fill="white" stroke="#666666" points="7102.5,-767 6989.5,-767 6989.5,-737 7102.5,-737 7102.5,-767"/>
-<text text-anchor="start" x="6997.5" y="-755" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/tirx/tile</text>
-<text text-anchor="middle" x="7046" y="-744" font-family="Helvetica,sans-Serif" font-size="10.00">_primitive.h</text>
+<!-- Node99 -->
+<g id="Node000099" class="node">
+<title>Node99</title>
+<g id="a_Node000099"><a xlink:href="tile__primitive_8h.html" target="_top" xlink:title="TIRX tile primitive statements, operators, and reified lambda expressions.">
+<polygon fill="white" stroke="#666666" points="7766.5,-767 7653.5,-767 7653.5,-737 7766.5,-737 7766.5,-767"/>
+<text text-anchor="start" x="7661.5" y="-755" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/tirx/tile</text>
+<text text-anchor="middle" x="7710" y="-744" font-family="Helvetica,sans-Serif" font-size="10.00">_primitive.h</text>
 </a>
 </g>
 </g>
-<!-- Node2&#45;&gt;Node98 -->
-<g id="edge168_Node000002_Node000098" class="edge">
-<title>Node2&#45;&gt;Node98</title>
-<g id="a_edge168_Node000002_Node000098"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M2118.45,-947.89C2486.1,-941.36 4355.69,-905.83 5881,-833 6331.22,-811.5 6443.64,-802.21 6893,-767 6924.91,-764.5 6960.52,-761.27 6989.36,-758.54"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="2118.2,-944.39 2108.26,-948.07 2118.32,-951.39 2118.2,-944.39"/>
+<!-- Node2&#45;&gt;Node99 -->
+<g id="edge169_Node000002_Node000099" class="edge">
+<title>Node2&#45;&gt;Node99</title>
+<g id="a_edge169_Node000002_Node000099"><a xlink:title=" ">
+<path fill="none" stroke="#63b8ff" d="M2519.23,-948.8C3071.25,-946.99 7000.9,-933 7246,-899 7356.85,-883.62 7387.61,-880.38 7489,-833 7510.11,-823.13 7510.93,-812.96 7532,-803 7570.74,-784.69 7617.48,-771.88 7653.35,-763.81"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="2519.06,-945.3 2509.07,-948.83 2519.08,-952.3 2519.06,-945.3"/>
 </a>
 </g>
 </g>
@@ -189,9 +189,9 @@
 <g id="Node000004" class="node">
 <title>Node4</title>
 <g id="a_Node000004"><a xlink:href="tirx_2expr__functor_8h.html" target="_top" xlink:title="Functors for tirx expressions.">
-<polygon fill="white" stroke="#666666" points="7316.5,-767 7197.5,-767 7197.5,-737 7316.5,-737 7316.5,-767"/>
-<text text-anchor="start" x="7205.5" y="-755" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/tirx/expr</text>
-<text text-anchor="middle" x="7257" y="-744" font-family="Helvetica,sans-Serif" font-size="10.00">_functor.h</text>
+<polygon fill="white" stroke="#666666" points="7254.5,-767 7135.5,-767 7135.5,-737 7254.5,-737 7254.5,-767"/>
+<text text-anchor="start" x="7143.5" y="-755" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/tirx/expr</text>
+<text text-anchor="middle" x="7195" y="-744" font-family="Helvetica,sans-Serif" font-size="10.00">_functor.h</text>
 </a>
 </g>
 </g>
@@ -199,8 +199,8 @@
 <g id="edge3_Node000003_Node000004" class="edge">
 <title>Node3&#45;&gt;Node4</title>
 <g id="a_edge3_Node000003_Node000004"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7257,-792.54C7257,-783.96 7257,-774.61 7257,-767.16"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7253.5,-792.8 7257,-802.8 7260.5,-792.8 7253.5,-792.8"/>
+<path fill="none" stroke="#63b8ff" d="M7134.84,-796.75C7148.07,-787.13 7163.57,-775.86 7175.52,-767.16"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7132.56,-794.08 7126.53,-802.8 7136.68,-799.75 7132.56,-794.08"/>
 </a>
 </g>
 </g>
@@ -208,9 +208,9 @@
 <g id="Node000005" class="node">
 <title>Node5</title>
 <g id="a_Node000005"><a xlink:href="tirx_2stmt__functor_8h.html" target="_top" xlink:title="Functors for tirx stmts utility functions to call common functors.">
-<polygon fill="white" stroke="#666666" points="7394.5,-701 7275.5,-701 7275.5,-671 7394.5,-671 7394.5,-701"/>
-<text text-anchor="start" x="7283.5" y="-689" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/tirx/stmt</text>
-<text text-anchor="middle" x="7335" y="-678" font-family="Helvetica,sans-Serif" font-size="10.00">_functor.h</text>
+<polygon fill="white" stroke="#666666" points="7292.5,-701 7173.5,-701 7173.5,-671 7292.5,-671 7292.5,-701"/>
+<text text-anchor="start" x="7181.5" y="-689" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/tirx/stmt</text>
+<text text-anchor="middle" x="7233" y="-678" font-family="Helvetica,sans-Serif" font-size="10.00">_functor.h</text>
 </a>
 </g>
 </g>
@@ -218,8 +218,8 @@
 <g id="edge38_Node000003_Node000005" class="edge">
 <title>Node3&#45;&gt;Node5</title>
 <g id="a_edge38_Node000003_Node000005"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7295.29,-797.53C7307.03,-789.65 7318.74,-779.44 7326,-767 7337.97,-746.47 7338.01,-717.93 7336.69,-701.07"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7293.42,-794.57 7286.81,-802.85 7297.14,-800.5 7293.42,-794.57"/>
+<path fill="none" stroke="#63b8ff" d="M7107.36,-792.56C7108.81,-775.32 7113.28,-752.62 7126,-737 7139.72,-720.15 7160.43,-708.68 7179.98,-701.02"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7103.84,-792.78 7106.79,-802.96 7110.83,-793.17 7103.84,-792.78"/>
 </a>
 </g>
 </g>
@@ -227,8 +227,8 @@
 <g id="edge4_Node000004_Node000005" class="edge">
 <title>Node4&#45;&gt;Node5</title>
 <g id="a_edge4_Node000004_Node000005"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7282.35,-730.2C7293.93,-720.7 7307.35,-709.69 7317.74,-701.16"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7279.82,-727.75 7274.31,-736.8 7284.26,-733.16 7279.82,-727.75"/>
+<path fill="none" stroke="#63b8ff" d="M7208.68,-727.96C7214,-719 7219.92,-709.03 7224.59,-701.16"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7205.53,-726.41 7203.43,-736.8 7211.55,-729.98 7205.53,-726.41"/>
 </a>
 </g>
 </g>
@@ -236,9 +236,9 @@
 <g id="Node000006" class="node">
 <title>Node6</title>
 <g id="a_Node000006"><a xlink:href="s__tir_2stmt__functor_8h.html" target="_top" xlink:title="Native traversal and statement dispatch for schedulable TIR.">
-<polygon fill="white" stroke="#666666" points="7792,-635 7668,-635 7668,-605 7792,-605 7792,-635"/>
-<text text-anchor="start" x="7676" y="-623" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/stmt</text>
-<text text-anchor="middle" x="7730" y="-612" font-family="Helvetica,sans-Serif" font-size="10.00">_functor.h</text>
+<polygon fill="white" stroke="#666666" points="7295,-635 7171,-635 7171,-605 7295,-605 7295,-635"/>
+<text text-anchor="start" x="7179" y="-623" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/stmt</text>
+<text text-anchor="middle" x="7233" y="-612" font-family="Helvetica,sans-Serif" font-size="10.00">_functor.h</text>
 </a>
 </g>
 </g>
@@ -246,8 +246,8 @@
 <g id="edge5_Node000005_Node000006" class="edge">
 <title>Node5&#45;&gt;Node6</title>
 <g id="a_edge5_Node000005_Node000006"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7404.86,-670.9C7502.64,-653.65 7604.45,-638.63 7667.96,-629.61"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7404.04,-667.49 7394.81,-672.68 7405.26,-674.38 7404.04,-667.49"/>
+<path fill="none" stroke="#63b8ff" d="M7233,-660.54C7233,-651.96 7233,-642.61 7233,-635.16"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7229.5,-660.8 7233,-670.8 7236.5,-660.8 7229.5,-660.8"/>
 </a>
 </g>
 </g>
@@ -255,9 +255,9 @@
 <g id="Node000007" class="node">
 <title>Node7</title>
 <g id="a_Node000007"><a xlink:href="axis__group__graph_8h.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="#666666" points="6959,-569 6801,-569 6801,-539 6959,-539 6959,-569"/>
-<text text-anchor="start" x="6809" y="-557" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relax/distributed</text>
-<text text-anchor="middle" x="6880" y="-546" font-family="Helvetica,sans-Serif" font-size="10.00">/axis_group_graph.h</text>
+<polygon fill="white" stroke="#666666" points="6820,-569 6662,-569 6662,-539 6820,-539 6820,-569"/>
+<text text-anchor="start" x="6670" y="-557" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relax/distributed</text>
+<text text-anchor="middle" x="6741" y="-546" font-family="Helvetica,sans-Serif" font-size="10.00">/axis_group_graph.h</text>
 </a>
 </g>
 </g>
@@ -265,8 +265,8 @@
 <g id="edge6_Node000006_Node000007" class="edge">
 <title>Node6&#45;&gt;Node7</title>
 <g id="a_edge6_Node000006_Node000007"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7657.85,-605.5C7656.56,-605.32 7655.27,-605.16 7654,-605 7521.29,-588.55 7128.57,-567.53 6959.21,-558.93"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7657.48,-608.98 7667.88,-606.94 7658.48,-602.05 7657.48,-608.98"/>
+<path fill="none" stroke="#63b8ff" d="M7161.31,-605.05C7161.2,-605.03 7161.1,-605.02 7161,-605 7042.75,-586.49 6904.81,-571.28 6820.19,-562.67"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7160.56,-608.47 7171,-606.64 7161.7,-601.57 7160.56,-608.47"/>
 </a>
 </g>
 </g>
@@ -274,9 +274,9 @@
 <g id="Node000008" class="node">
 <title>Node8</title>
 <g id="a_Node000008"><a xlink:href="sblock__scope_8h.html" target="_top" xlink:title="Definition of two pillar data structure for TensorIR scheduling: StmtSRef, SBlockScope.">
-<polygon fill="white" stroke="#666666" points="7943.5,-569 7810.5,-569 7810.5,-539 7943.5,-539 7943.5,-569"/>
-<text text-anchor="start" x="7818.5" y="-557" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/sblock</text>
-<text text-anchor="middle" x="7877" y="-546" font-family="Helvetica,sans-Serif" font-size="10.00">_scope.h</text>
+<polygon fill="white" stroke="#666666" points="7515.5,-569 7382.5,-569 7382.5,-539 7515.5,-539 7515.5,-569"/>
+<text text-anchor="start" x="7390.5" y="-557" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/sblock</text>
+<text text-anchor="middle" x="7449" y="-546" font-family="Helvetica,sans-Serif" font-size="10.00">_scope.h</text>
 </a>
 </g>
 </g>
@@ -284,8 +284,8 @@
 <g id="edge7_Node000006_Node000008" class="edge">
 <title>Node6&#45;&gt;Node8</title>
 <g id="a_edge7_Node000006_Node000008"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7771.53,-600.92C7794.76,-590.8 7823.29,-578.38 7844.82,-569.01"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7770.03,-597.75 7762.26,-604.95 7772.83,-604.17 7770.03,-597.75"/>
+<path fill="none" stroke="#63b8ff" d="M7290.41,-601.99C7325.17,-591.69 7368.95,-578.72 7401.71,-569.01"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7289,-598.76 7280.4,-604.95 7290.98,-605.47 7289,-598.76"/>
 </a>
 </g>
 </g>
@@ -293,9 +293,9 @@
 <g id="Node000009" class="node">
 <title>Node9</title>
 <g id="a_Node000009"><a xlink:href="sblock__dependence__info_8h.html" target="_top" xlink:title="Define SBlockDependenceInfoNode that uses the SBlockScope and StmtSRef objects to store the block lev...">
-<polygon fill="white" stroke="#666666" points="7897.5,-503 7764.5,-503 7764.5,-473 7897.5,-473 7897.5,-503"/>
-<text text-anchor="start" x="7772.5" y="-491" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/sblock</text>
-<text text-anchor="middle" x="7831" y="-480" font-family="Helvetica,sans-Serif" font-size="10.00">_dependence_info.h</text>
+<polygon fill="white" stroke="#666666" points="7465.5,-503 7332.5,-503 7332.5,-473 7465.5,-473 7465.5,-503"/>
+<text text-anchor="start" x="7340.5" y="-491" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/sblock</text>
+<text text-anchor="middle" x="7399" y="-480" font-family="Helvetica,sans-Serif" font-size="10.00">_dependence_info.h</text>
 </a>
 </g>
 </g>
@@ -303,8 +303,8 @@
 <g id="edge8_Node000008_Node000009" class="edge">
 <title>Node8&#45;&gt;Node9</title>
 <g id="a_edge8_Node000008_Node000009"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7860.85,-530.53C7854.31,-521.43 7846.95,-511.19 7841.18,-503.16"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7858.11,-532.72 7866.79,-538.8 7863.8,-528.63 7858.11,-532.72"/>
+<path fill="none" stroke="#63b8ff" d="M7431.66,-530.81C7424.5,-521.64 7416.4,-511.28 7410.07,-503.16"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7428.99,-533.07 7437.9,-538.8 7434.5,-528.76 7428.99,-533.07"/>
 </a>
 </g>
 </g>
@@ -312,9 +312,9 @@
 <g id="Node000010" class="node">
 <title>Node10</title>
 <g id="a_Node000010"><a xlink:href="state_8h.html" target="_top" xlink:title="This file defines ScheduleState, the core data structure of TensorIR scheduling.">
-<polygon fill="white" stroke="#666666" points="7746.5,-503 7601.5,-503 7601.5,-473 7746.5,-473 7746.5,-503"/>
-<text text-anchor="start" x="7609.5" y="-491" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/schedule</text>
-<text text-anchor="middle" x="7674" y="-480" font-family="Helvetica,sans-Serif" font-size="10.00">/state.h</text>
+<polygon fill="white" stroke="#666666" points="7314.5,-503 7169.5,-503 7169.5,-473 7314.5,-473 7314.5,-503"/>
+<text text-anchor="start" x="7177.5" y="-491" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/schedule</text>
+<text text-anchor="middle" x="7242" y="-480" font-family="Helvetica,sans-Serif" font-size="10.00">/state.h</text>
 </a>
 </g>
 </g>
@@ -322,8 +322,8 @@
 <g id="edge9_Node000008_Node000010" class="edge">
 <title>Node8&#45;&gt;Node10</title>
 <g id="a_edge9_Node000008_Node000010"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7822.62,-535.86C7790.03,-525.58 7749.1,-512.68 7718.45,-503.01"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7821.86,-539.29 7832.45,-538.95 7823.97,-532.61 7821.86,-539.29"/>
+<path fill="none" stroke="#63b8ff" d="M7393.98,-535.99C7360.67,-525.69 7318.71,-512.72 7287.32,-503.01"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7392.99,-539.34 7403.57,-538.95 7395.05,-532.66 7392.99,-539.34"/>
 </a>
 </g>
 </g>
@@ -331,8 +331,8 @@
 <g id="Node000026" class="node">
 <title>Node26</title>
 <g id="a_Node000026"><a xlink:href="s__tir_2utils_8h.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="#666666" points="8085.5,-497.5 7954.5,-497.5 7954.5,-478.5 8085.5,-478.5 8085.5,-497.5"/>
-<text text-anchor="middle" x="8020" y="-485.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/utils.h</text>
+<polygon fill="white" stroke="#666666" points="7614.5,-497.5 7483.5,-497.5 7483.5,-478.5 7614.5,-478.5 7614.5,-497.5"/>
+<text text-anchor="middle" x="7549" y="-485.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/utils.h</text>
 </a>
 </g>
 </g>
@@ -340,8 +340,8 @@
 <g id="edge37_Node000008_Node000026" class="edge">
 <title>Node8&#45;&gt;Node26</title>
 <g id="a_edge37_Node000008_Node000026"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7917.71,-534.78C7945.05,-522.54 7979.82,-506.98 8000.97,-497.52"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7916.08,-531.68 7908.38,-538.95 7918.94,-538.06 7916.08,-531.68"/>
+<path fill="none" stroke="#63b8ff" d="M7479.69,-533.36C7498.34,-521.42 7521.23,-506.77 7535.47,-497.66"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7477.73,-530.46 7471.19,-538.8 7481.5,-536.35 7477.73,-530.46"/>
 </a>
 </g>
 </g>
@@ -349,9 +349,9 @@
 <g id="Node000011" class="node">
 <title>Node11</title>
 <g id="a_Node000011"><a xlink:href="schedule_8h.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="#666666" points="7833.5,-437 7688.5,-437 7688.5,-407 7833.5,-407 7833.5,-437"/>
-<text text-anchor="start" x="7696.5" y="-425" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/schedule</text>
-<text text-anchor="middle" x="7761" y="-414" font-family="Helvetica,sans-Serif" font-size="10.00">/schedule.h</text>
+<polygon fill="white" stroke="#666666" points="7322.5,-437 7177.5,-437 7177.5,-407 7322.5,-407 7322.5,-437"/>
+<text text-anchor="start" x="7185.5" y="-425" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/schedule</text>
+<text text-anchor="middle" x="7250" y="-414" font-family="Helvetica,sans-Serif" font-size="10.00">/schedule.h</text>
 </a>
 </g>
 </g>
@@ -359,8 +359,8 @@
 <g id="edge10_Node000010_Node000011" class="edge">
 <title>Node10&#45;&gt;Node11</title>
 <g id="a_edge10_Node000010_Node000011"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7701.52,-466.75C7714.61,-457.13 7729.93,-445.86 7741.75,-437.16"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7699.29,-464.05 7693.31,-472.8 7703.44,-469.69 7699.29,-464.05"/>
+<path fill="none" stroke="#63b8ff" d="M7245.02,-462.83C7246.1,-454.17 7247.29,-444.7 7248.23,-437.16"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7241.54,-462.44 7243.78,-472.8 7248.49,-463.31 7241.54,-462.44"/>
 </a>
 </g>
 </g>
@@ -368,9 +368,9 @@
 <g id="Node000012" class="node">
 <title>Node12</title>
 <g id="a_Node000012"><a xlink:href="cost__model_8h.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="#666666" points="8693,-294 8559,-294 8559,-264 8693,-264 8693,-294"/>
-<text text-anchor="start" x="8567" y="-282" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
-<text text-anchor="middle" x="8626" y="-271" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/cost_model.h</text>
+<polygon fill="white" stroke="#666666" points="8063,-294 7929,-294 7929,-264 8063,-264 8063,-294"/>
+<text text-anchor="start" x="7937" y="-282" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
+<text text-anchor="middle" x="7996" y="-271" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/cost_model.h</text>
 </a>
 </g>
 </g>
@@ -378,8 +378,8 @@
 <g id="edge11_Node000011_Node000012" class="edge">
 <title>Node11&#45;&gt;Node12</title>
 <g id="a_edge11_Node000011_Node000012"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7843.96,-418.08C8045.47,-410.71 8546.48,-390.52 8577,-371 8591.13,-361.96 8610.76,-317.57 8620.32,-294.3"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7843.59,-414.6 7833.73,-418.46 7843.85,-421.59 7843.59,-414.6"/>
+<path fill="none" stroke="#63b8ff" d="M7332.94,-417.93C7518.32,-410.72 7951.97,-391.72 7976,-371 7998.05,-351.99 7998.98,-314.72 7997.59,-294.27"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7332.55,-414.45 7322.7,-418.33 7332.82,-421.44 7332.55,-414.45"/>
 </a>
 </g>
 </g>
@@ -387,9 +387,9 @@
 <g id="Node000013" class="node">
 <title>Node13</title>
 <g id="a_Node000013"><a xlink:href="search__strategy_8h.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="#666666" points="8238,-228 8084,-228 8084,-198 8238,-198 8238,-228"/>
-<text text-anchor="start" x="8092" y="-216" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
-<text text-anchor="middle" x="8161" y="-205" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/search_strategy.h</text>
+<polygon fill="white" stroke="#666666" points="7608,-228 7454,-228 7454,-198 7608,-198 7608,-228"/>
+<text text-anchor="start" x="7462" y="-216" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
+<text text-anchor="middle" x="7531" y="-205" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/search_strategy.h</text>
 </a>
 </g>
 </g>
@@ -397,8 +397,8 @@
 <g id="edge35_Node000011_Node000013" class="edge">
 <title>Node11&#45;&gt;Node13</title>
 <g id="a_edge35_Node000011_Node000013"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7742.91,-398.59C7729.32,-378.88 7715.49,-350.25 7731,-330 7773.67,-274.29 7971.98,-239.27 8083.79,-223.6"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7740.1,-400.69 7748.83,-406.7 7745.76,-396.56 7740.1,-400.69"/>
+<path fill="none" stroke="#63b8ff" d="M7251.4,-396.79C7253.74,-376.78 7259.89,-348.7 7276,-330 7324.33,-273.9 7405.37,-243.5 7463.11,-228.07"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7247.89,-396.69 7250.45,-406.98 7254.86,-397.34 7247.89,-396.69"/>
 </a>
 </g>
 </g>
@@ -406,9 +406,9 @@
 <g id="Node000017" class="node">
 <title>Node17</title>
 <g id="a_Node000017"><a xlink:href="database_8h.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="#666666" points="8192.5,-365.5 8065.5,-365.5 8065.5,-335.5 8192.5,-335.5 8192.5,-365.5"/>
-<text text-anchor="start" x="8073.5" y="-353.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
-<text text-anchor="middle" x="8129" y="-342.5" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/database.h</text>
+<polygon fill="white" stroke="#666666" points="7228.5,-365.5 7101.5,-365.5 7101.5,-335.5 7228.5,-335.5 7228.5,-365.5"/>
+<text text-anchor="start" x="7109.5" y="-353.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
+<text text-anchor="middle" x="7165" y="-342.5" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/database.h</text>
 </a>
 </g>
 </g>
@@ -416,8 +416,8 @@
 <g id="edge19_Node000011_Node000017" class="edge">
 <title>Node11&#45;&gt;Node17</title>
 <g id="a_edge19_Node000011_Node000017"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7843.87,-409.21C7903.44,-400.19 7985.54,-386.67 8057,-371 8064.34,-369.39 8072.04,-367.51 8079.58,-365.56"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7843.13,-405.78 7833.76,-410.73 7844.17,-412.7 7843.13,-405.78"/>
+<path fill="none" stroke="#63b8ff" d="M7224.69,-400.31C7210.98,-389.09 7194.38,-375.52 7182.18,-365.54"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7222.84,-403.32 7232.8,-406.94 7227.27,-397.9 7222.84,-403.32"/>
 </a>
 </g>
 </g>
@@ -425,9 +425,9 @@
 <g id="Node000018" class="node">
 <title>Node18</title>
 <g id="a_Node000018"><a xlink:href="measure__candidate_8h.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="#666666" points="8567.5,-365.5 8394.5,-365.5 8394.5,-335.5 8567.5,-335.5 8567.5,-365.5"/>
-<text text-anchor="start" x="8402.5" y="-353.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
-<text text-anchor="middle" x="8481" y="-342.5" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/measure_candidate.h</text>
+<polygon fill="white" stroke="#666666" points="7967.5,-365.5 7794.5,-365.5 7794.5,-335.5 7967.5,-335.5 7967.5,-365.5"/>
+<text text-anchor="start" x="7802.5" y="-353.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
+<text text-anchor="middle" x="7881" y="-342.5" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/measure_candidate.h</text>
 </a>
 </g>
 </g>
@@ -435,8 +435,8 @@
 <g id="edge21_Node000011_Node000018" class="edge">
 <title>Node11&#45;&gt;Node18</title>
 <g id="a_edge21_Node000011_Node000018"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7844.19,-417.59C7964.3,-411.94 8193.06,-398.41 8386,-371 8396.42,-369.52 8407.41,-367.6 8418.08,-365.54"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7843.8,-414.11 7833.97,-418.07 7844.12,-421.1 7843.8,-414.11"/>
+<path fill="none" stroke="#63b8ff" d="M7332.81,-416.02C7438.23,-409.06 7625.81,-394.54 7785,-371 7795.35,-369.47 7806.26,-367.55 7816.88,-365.52"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7332.3,-412.55 7322.55,-416.7 7332.76,-419.54 7332.3,-412.55"/>
 </a>
 </g>
 </g>
@@ -444,9 +444,9 @@
 <g id="Node000020" class="node">
 <title>Node20</title>
 <g id="a_Node000020"><a xlink:href="mutator_8h.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="#666666" points="7499.5,-365.5 7372.5,-365.5 7372.5,-335.5 7499.5,-335.5 7499.5,-365.5"/>
-<text text-anchor="start" x="7380.5" y="-353.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
-<text text-anchor="middle" x="7436" y="-342.5" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/mutator.h</text>
+<polygon fill="white" stroke="#666666" points="6736.5,-365.5 6609.5,-365.5 6609.5,-335.5 6736.5,-335.5 6736.5,-365.5"/>
+<text text-anchor="start" x="6617.5" y="-353.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
+<text text-anchor="middle" x="6673" y="-342.5" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/mutator.h</text>
 </a>
 </g>
 </g>
@@ -454,8 +454,8 @@
 <g id="edge26_Node000011_Node000020" class="edge">
 <title>Node11&#45;&gt;Node20</title>
 <g id="a_edge26_Node000011_Node000020"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7678.36,-405.24C7630.28,-395.83 7568.58,-383.34 7514,-371 7506.51,-369.31 7498.64,-367.44 7490.9,-365.56"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7677.92,-408.72 7688.4,-407.2 7679.26,-401.85 7677.92,-408.72"/>
+<path fill="none" stroke="#63b8ff" d="M7167.26,-416.4C7067.87,-410.02 6896.33,-396.31 6751,-371 6742.47,-369.52 6733.5,-367.61 6724.8,-365.56"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7167.04,-419.89 7177.24,-417.03 7167.49,-412.9 7167.04,-419.89"/>
 </a>
 </g>
 </g>
@@ -463,9 +463,9 @@
 <g id="Node000021" class="node">
 <title>Node21</title>
 <g id="a_Node000021"><a xlink:href="space__generator_8h.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="#666666" points="7561,-294 7403,-294 7403,-264 7561,-264 7561,-294"/>
-<text text-anchor="start" x="7411" y="-282" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
-<text text-anchor="middle" x="7482" y="-271" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/space_generator.h</text>
+<polygon fill="white" stroke="#666666" points="6890,-294 6732,-294 6732,-264 6890,-264 6890,-294"/>
+<text text-anchor="start" x="6740" y="-282" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
+<text text-anchor="middle" x="6811" y="-271" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/space_generator.h</text>
 </a>
 </g>
 </g>
@@ -473,8 +473,8 @@
 <g id="edge36_Node000011_Node000021" class="edge">
 <title>Node11&#45;&gt;Node21</title>
 <g id="a_edge36_Node000011_Node000021"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7678.46,-415.3C7636.56,-409.17 7586.5,-396.61 7548,-371 7532.81,-360.89 7504.59,-317 7490.49,-294.07"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7678,-418.77 7688.38,-416.65 7678.94,-411.83 7678,-418.77"/>
+<path fill="none" stroke="#63b8ff" d="M7167.13,-418.01C7040.07,-412.57 6809.08,-398.92 6784,-371 6764.4,-349.18 6785.11,-313.71 6799.55,-294.12"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7167.08,-421.51 7177.22,-418.44 7167.37,-414.52 7167.08,-421.51"/>
 </a>
 </g>
 </g>
@@ -482,9 +482,9 @@
 <g id="Node000022" class="node">
 <title>Node22</title>
 <g id="a_Node000022"><a xlink:href="postproc_8h.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="#666666" points="7683.5,-365.5 7556.5,-365.5 7556.5,-335.5 7683.5,-335.5 7683.5,-365.5"/>
-<text text-anchor="start" x="7564.5" y="-353.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
-<text text-anchor="middle" x="7620" y="-342.5" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/postproc.h</text>
+<polygon fill="white" stroke="#666666" points="6920.5,-365.5 6793.5,-365.5 6793.5,-335.5 6920.5,-335.5 6920.5,-365.5"/>
+<text text-anchor="start" x="6801.5" y="-353.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
+<text text-anchor="middle" x="6857" y="-342.5" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/postproc.h</text>
 </a>
 </g>
 </g>
@@ -492,8 +492,8 @@
 <g id="edge29_Node000011_Node000022" class="edge">
 <title>Node11&#45;&gt;Node22</title>
 <g id="a_edge29_Node000011_Node000022"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7723.46,-402.5C7699.93,-390.9 7670.08,-376.18 7648.49,-365.54"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7721.95,-405.65 7732.47,-406.94 7725.04,-399.38 7721.95,-405.65"/>
+<path fill="none" stroke="#63b8ff" d="M7167.03,-410.63C7101.95,-401.88 7009.25,-388.06 6929,-371 6921.53,-369.41 6913.67,-367.52 6906.01,-365.55"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7166.86,-414.14 7177.24,-411.99 7167.79,-407.2 7166.86,-414.14"/>
 </a>
 </g>
 </g>
@@ -501,10 +501,10 @@
 <g id="Node000023" class="node">
 <title>Node23</title>
 <g id="a_Node000023"><a xlink:href="thread__bind_8h.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="#666666" points="7878,-371 7740,-371 7740,-330 7878,-330 7878,-371"/>
-<text text-anchor="start" x="7748" y="-359" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
-<text text-anchor="start" x="7748" y="-348" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/schedule/cuda</text>
-<text text-anchor="middle" x="7809" y="-337" font-family="Helvetica,sans-Serif" font-size="10.00">/thread_bind.h</text>
+<polygon fill="white" stroke="#666666" points="7593,-371 7455,-371 7455,-330 7593,-330 7593,-371"/>
+<text text-anchor="start" x="7463" y="-359" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
+<text text-anchor="start" x="7463" y="-348" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/schedule/cuda</text>
+<text text-anchor="middle" x="7524" y="-337" font-family="Helvetica,sans-Serif" font-size="10.00">/thread_bind.h</text>
 </a>
 </g>
 </g>
@@ -512,8 +512,8 @@
 <g id="edge31_Node000011_Node000023" class="edge">
 <title>Node11&#45;&gt;Node23</title>
 <g id="a_edge31_Node000011_Node000023"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7776.48,-398.59C7782.6,-389.73 7789.57,-379.63 7795.48,-371.07"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7773.52,-396.72 7770.71,-406.94 7779.28,-400.7 7773.52,-396.72"/>
+<path fill="none" stroke="#63b8ff" d="M7315.31,-404.43C7357.36,-393.77 7411.96,-379.92 7454.76,-369.06"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7314.28,-401.08 7305.45,-406.94 7316,-407.87 7314.28,-401.08"/>
 </a>
 </g>
 </g>
@@ -521,10 +521,10 @@
 <g id="Node000024" class="node">
 <title>Node24</title>
 <g id="a_Node000024"><a xlink:href="winograd_8h.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="#666666" points="8047.5,-371 7896.5,-371 7896.5,-330 8047.5,-330 8047.5,-371"/>
-<text text-anchor="start" x="7904.5" y="-359" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
-<text text-anchor="start" x="7904.5" y="-348" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/schedule/generic</text>
-<text text-anchor="middle" x="7972" y="-337" font-family="Helvetica,sans-Serif" font-size="10.00">/winograd.h</text>
+<polygon fill="white" stroke="#666666" points="7436.5,-371 7285.5,-371 7285.5,-330 7436.5,-330 7436.5,-371"/>
+<text text-anchor="start" x="7293.5" y="-359" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
+<text text-anchor="start" x="7293.5" y="-348" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/schedule/generic</text>
+<text text-anchor="middle" x="7361" y="-337" font-family="Helvetica,sans-Serif" font-size="10.00">/winograd.h</text>
 </a>
 </g>
 </g>
@@ -532,8 +532,8 @@
 <g id="edge32_Node000011_Node000024" class="edge">
 <title>Node11&#45;&gt;Node24</title>
 <g id="a_edge32_Node000011_Node000024"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7813.58,-403.68C7843.64,-393.78 7881.44,-381.33 7912.58,-371.07"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7812.1,-400.48 7803.7,-406.94 7814.29,-407.13 7812.1,-400.48"/>
+<path fill="none" stroke="#63b8ff" d="M7281.02,-401.58C7296.22,-392.06 7314.5,-380.62 7329.74,-371.07"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7279.08,-398.66 7272.46,-406.94 7282.8,-404.6 7279.08,-398.66"/>
 </a>
 </g>
 </g>
@@ -541,9 +541,9 @@
 <g id="Node000025" class="node">
 <title>Node25</title>
 <g id="a_Node000025"><a xlink:href="schedule__rule_8h.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="#666666" points="7354.5,-365.5 7209.5,-365.5 7209.5,-335.5 7354.5,-335.5 7354.5,-365.5"/>
-<text text-anchor="start" x="7217.5" y="-353.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
-<text text-anchor="middle" x="7282" y="-342.5" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/schedule_rule.h</text>
+<polygon fill="white" stroke="#666666" points="7083.5,-365.5 6938.5,-365.5 6938.5,-335.5 7083.5,-335.5 7083.5,-365.5"/>
+<text text-anchor="start" x="6946.5" y="-353.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
+<text text-anchor="middle" x="7011" y="-342.5" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/schedule_rule.h</text>
 </a>
 </g>
 </g>
@@ -551,8 +551,8 @@
 <g id="edge33_Node000011_Node000025" class="edge">
 <title>Node11&#45;&gt;Node25</title>
 <g id="a_edge33_Node000011_Node000025"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7678.11,-413.2C7597.52,-404.99 7471.83,-390.55 7364,-371 7355.36,-369.43 7346.27,-367.53 7337.41,-365.53"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7677.9,-416.7 7688.2,-414.22 7678.6,-409.73 7677.9,-416.7"/>
+<path fill="none" stroke="#63b8ff" d="M7191.86,-404.09C7151.22,-392.28 7097.58,-376.68 7059.29,-365.54"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7191.06,-407.5 7201.63,-406.94 7193.01,-400.78 7191.06,-407.5"/>
 </a>
 </g>
 </g>
@@ -560,8 +560,8 @@
 <g id="edge12_Node000012_Node000013" class="edge">
 <title>Node12&#45;&gt;Node13</title>
 <g id="a_edge12_Node000012_Node000013"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M8548.91,-267.39C8462.82,-255.54 8324.29,-236.47 8238.17,-224.62"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="8548.5,-270.87 8558.88,-268.76 8549.45,-263.93 8548.5,-270.87"/>
+<path fill="none" stroke="#63b8ff" d="M7918.91,-267.39C7832.82,-255.54 7694.29,-236.47 7608.17,-224.62"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7918.5,-270.87 7928.88,-268.76 7919.45,-263.93 7918.5,-270.87"/>
 </a>
 </g>
 </g>
@@ -569,9 +569,9 @@
 <g id="Node000015" class="node">
 <title>Node15</title>
 <g id="a_Node000015"><a xlink:href="task__scheduler_8h.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="#666666" points="8236,-30 8086,-30 8086,0 8236,0 8236,-30"/>
-<text text-anchor="start" x="8094" y="-18" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
-<text text-anchor="middle" x="8161" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/task_scheduler.h</text>
+<polygon fill="white" stroke="#666666" points="7606,-30 7456,-30 7456,0 7606,0 7606,-30"/>
+<text text-anchor="start" x="7464" y="-18" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
+<text text-anchor="middle" x="7531" y="-7" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/task_scheduler.h</text>
 </a>
 </g>
 </g>
@@ -579,8 +579,8 @@
 <g id="edge18_Node000012_Node000015" class="edge">
 <title>Node12&#45;&gt;Node15</title>
 <g id="a_edge18_Node000012_Node000015"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M8606.18,-256.48C8565.36,-213.49 8467.12,-116.75 8365,-66 8324.84,-46.04 8276.17,-33.71 8236.45,-26.3"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="8603.72,-258.98 8613.13,-263.86 8608.82,-254.18 8603.72,-258.98"/>
+<path fill="none" stroke="#63b8ff" d="M7976.18,-256.48C7935.36,-213.49 7837.12,-116.75 7735,-66 7694.84,-46.04 7646.17,-33.71 7606.45,-26.3"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7973.72,-258.98 7983.13,-263.86 7978.82,-254.18 7973.72,-258.98"/>
 </a>
 </g>
 </g>
@@ -588,9 +588,9 @@
 <g id="Node000014" class="node">
 <title>Node14</title>
 <g id="a_Node000014"><a xlink:href="measure__callback_8h.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="#666666" points="8244,-96 8078,-96 8078,-66 8244,-66 8244,-96"/>
-<text text-anchor="start" x="8086" y="-84" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
-<text text-anchor="middle" x="8161" y="-73" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/measure_callback.h</text>
+<polygon fill="white" stroke="#666666" points="7614,-96 7448,-96 7448,-66 7614,-66 7614,-96"/>
+<text text-anchor="start" x="7456" y="-84" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
+<text text-anchor="middle" x="7531" y="-73" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/measure_callback.h</text>
 </a>
 </g>
 </g>
@@ -598,8 +598,8 @@
 <g id="edge13_Node000013_Node000014" class="edge">
 <title>Node13&#45;&gt;Node14</title>
 <g id="a_edge13_Node000013_Node000014"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M8161,-187.68C8161,-160.7 8161,-118.11 8161,-96.14"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="8157.5,-187.84 8161,-197.84 8164.5,-187.84 8157.5,-187.84"/>
+<path fill="none" stroke="#63b8ff" d="M7531,-187.68C7531,-160.7 7531,-118.11 7531,-96.14"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7527.5,-187.84 7531,-197.84 7534.5,-187.84 7527.5,-187.84"/>
 </a>
 </g>
 </g>
@@ -607,9 +607,9 @@
 <g id="Node000016" class="node">
 <title>Node16</title>
 <g id="a_Node000016"><a xlink:href="tune__context_8h.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="#666666" points="7744.5,-162 7603.5,-162 7603.5,-132 7744.5,-132 7744.5,-162"/>
-<text text-anchor="start" x="7611.5" y="-150" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
-<text text-anchor="middle" x="7674" y="-139" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/tune_context.h</text>
+<polygon fill="white" stroke="#666666" points="7289.5,-162 7148.5,-162 7148.5,-132 7289.5,-132 7289.5,-162"/>
+<text text-anchor="start" x="7156.5" y="-150" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
+<text text-anchor="middle" x="7219" y="-139" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/tune_context.h</text>
 </a>
 </g>
 </g>
@@ -617,8 +617,8 @@
 <g id="edge15_Node000013_Node000016" class="edge">
 <title>Node13&#45;&gt;Node16</title>
 <g id="a_edge15_Node000013_Node000016"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M8073.78,-200.54C7979.78,-188.18 7831.98,-168.76 7744.87,-157.31"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="8073.46,-204.03 8083.83,-201.86 8074.37,-197.09 8073.46,-204.03"/>
+<path fill="none" stroke="#63b8ff" d="M7452.56,-195.91C7401.68,-185.47 7336.04,-172.01 7287.31,-162.01"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7452.03,-199.37 7462.53,-197.95 7453.44,-192.52 7452.03,-199.37"/>
 </a>
 </g>
 </g>
@@ -626,8 +626,8 @@
 <g id="edge14_Node000014_Node000015" class="edge">
 <title>Node14&#45;&gt;Node15</title>
 <g id="a_edge14_Node000014_Node000015"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M8161,-55.54C8161,-46.96 8161,-37.61 8161,-30.16"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="8157.5,-55.8 8161,-65.8 8164.5,-55.8 8157.5,-55.8"/>
+<path fill="none" stroke="#63b8ff" d="M7531,-55.54C7531,-46.96 7531,-37.61 7531,-30.16"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7527.5,-55.8 7531,-65.8 7534.5,-55.8 7527.5,-55.8"/>
 </a>
 </g>
 </g>
@@ -635,8 +635,8 @@
 <g id="edge16_Node000016_Node000014" class="edge">
 <title>Node16&#45;&gt;Node14</title>
 <g id="a_edge16_Node000016_Node000014"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7754.64,-135.4C7843.99,-123.66 7987.38,-104.82 8077.76,-92.94"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7754.01,-131.95 7744.55,-136.73 7754.92,-138.9 7754.01,-131.95"/>
+<path fill="none" stroke="#63b8ff" d="M7297.44,-129.91C7348.32,-119.47 7413.96,-106.01 7462.69,-96.01"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7296.56,-126.52 7287.47,-131.95 7297.97,-133.37 7296.56,-126.52"/>
 </a>
 </g>
 </g>
@@ -644,8 +644,8 @@
 <g id="edge17_Node000016_Node000015" class="edge">
 <title>Node16&#45;&gt;Node15</title>
 <g id="a_edge17_Node000016_Node000015"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7736.52,-129.31C7833.34,-103.47 8017.78,-54.23 8108.27,-30.08"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7735.34,-126 7726.58,-131.96 7737.14,-132.77 7735.34,-126"/>
+<path fill="none" stroke="#63b8ff" d="M7262.29,-127.96C7325.02,-101.82 7439.92,-53.95 7496.98,-30.17"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7260.57,-124.89 7252.69,-131.96 7263.26,-131.35 7260.57,-124.89"/>
 </a>
 </g>
 </g>
@@ -653,8 +653,8 @@
 <g id="edge20_Node000017_Node000013" class="edge">
 <title>Node17&#45;&gt;Node13</title>
 <g id="a_edge20_Node000017_Node000013"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M8133.73,-324.94C8137.13,-307.8 8142,-284.43 8147,-264 8149.96,-251.92 8153.8,-238.33 8156.71,-228.37"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="8130.2,-324.73 8131.71,-335.21 8137.07,-326.08 8130.2,-324.73"/>
+<path fill="none" stroke="#63b8ff" d="M7179.26,-326.82C7193.05,-306.93 7215.81,-278.91 7243,-264 7278.43,-244.57 7381.23,-229.97 7453.87,-221.7"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7176.23,-325.06 7173.58,-335.31 7182.05,-328.95 7176.23,-325.06"/>
 </a>
 </g>
 </g>
@@ -662,8 +662,8 @@
 <g id="edge22_Node000018_Node000012" class="edge">
 <title>Node18&#45;&gt;Node12</title>
 <g id="a_edge22_Node000018_Node000012"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M8519.6,-331C8543.8,-319.4 8574.5,-304.68 8596.7,-294.04"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="8517.85,-327.96 8510.34,-335.44 8520.87,-334.27 8517.85,-327.96"/>
+<path fill="none" stroke="#63b8ff" d="M7912.9,-330.22C7931.88,-318.75 7955.55,-304.45 7972.76,-294.04"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7911.02,-327.27 7904.27,-335.44 7914.64,-333.26 7911.02,-327.27"/>
 </a>
 </g>
 </g>
@@ -671,8 +671,8 @@
 <g id="edge25_Node000018_Node000013" class="edge">
 <title>Node18&#45;&gt;Node13</title>
 <g id="a_edge25_Node000018_Node000013"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M8431.62,-332.05C8402.67,-321.56 8365.51,-307.63 8333,-294 8281.83,-272.54 8223.5,-244.67 8189.61,-228.13"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="8430.51,-335.37 8441.1,-335.48 8432.88,-328.79 8430.51,-335.37"/>
+<path fill="none" stroke="#63b8ff" d="M7819.03,-332.56C7784.23,-322.48 7740.25,-308.8 7702,-294 7649.88,-273.84 7591.33,-245.05 7558.04,-228.06"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7818.47,-336.04 7829.05,-335.43 7820.4,-329.31 7818.47,-336.04"/>
 </a>
 </g>
 </g>
@@ -680,8 +680,8 @@
 <g id="edge24_Node000018_Node000014" class="edge">
 <title>Node18&#45;&gt;Node14</title>
 <g id="a_edge24_Node000018_Node000014"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M8499.43,-327.28C8511.91,-309.36 8524.12,-283.94 8512,-264 8451.38,-164.29 8316.49,-116.75 8232.7,-96.06"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="8496.53,-325.31 8493.38,-335.42 8502.15,-329.48 8496.53,-325.31"/>
+<path fill="none" stroke="#63b8ff" d="M7887.33,-325.45C7890.69,-307.25 7892.14,-282.35 7881,-264 7820.49,-164.33 7685.66,-116.73 7602.13,-96.03"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7883.89,-324.77 7885.2,-335.29 7890.73,-326.25 7883.89,-324.77"/>
 </a>
 </g>
 </g>
@@ -689,9 +689,9 @@
 <g id="Node000019" class="node">
 <title>Node19</title>
 <g id="a_Node000019"><a xlink:href="feature__extractor_8h.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="#666666" points="8502.5,-294 8341.5,-294 8341.5,-264 8502.5,-264 8502.5,-294"/>
-<text text-anchor="start" x="8349.5" y="-282" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
-<text text-anchor="middle" x="8422" y="-271" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/feature_extractor.h</text>
+<polygon fill="white" stroke="#666666" points="7872.5,-294 7711.5,-294 7711.5,-264 7872.5,-264 7872.5,-294"/>
+<text text-anchor="start" x="7719.5" y="-282" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/meta</text>
+<text text-anchor="middle" x="7792" y="-271" font-family="Helvetica,sans-Serif" font-size="10.00">_schedule/feature_extractor.h</text>
 </a>
 </g>
 </g>
@@ -699,8 +699,8 @@
 <g id="edge23_Node000018_Node000019" class="edge">
 <title>Node18&#45;&gt;Node19</title>
 <g id="a_edge23_Node000018_Node000019"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M8462.35,-327.53C8453.05,-316.57 8442.07,-303.65 8433.92,-294.04"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="8459.92,-330.08 8469.06,-335.44 8465.26,-325.55 8459.92,-330.08"/>
+<path fill="none" stroke="#63b8ff" d="M7854.91,-329.13C7840.47,-317.85 7822.89,-304.12 7809.98,-294.04"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="7852.95,-332.04 7862.99,-335.44 7857.26,-326.52 7852.95,-332.04"/>
 </a>
 </g>
 </g>
@@ -708,8 +708,8 @@
 <g id="edge27_Node000020_Node000021" class="edge">
 <title>Node20&#45;&gt;Node21</title>
 <g id="a_edge27_Node000020_Node000021"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7450.97,-326.88C7458.13,-316.07 7466.47,-303.46 7472.71,-294.04"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7447.91,-325.16 7445.31,-335.44 7453.75,-329.03 7447.91,-325.16"/>
+<path fill="none" stroke="#63b8ff" d="M6710.04,-330.84C6733.03,-319.27 6762.08,-304.64 6783.12,-294.04"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="6708.28,-327.81 6700.93,-335.44 6711.43,-334.06 6708.28,-327.81"/>
 </a>
 </g>
 </g>
@@ -717,8 +717,8 @@
 <g id="edge28_Node000021_Node000016" class="edge">
 <title>Node21&#45;&gt;Node16</title>
 <g id="a_edge28_Node000021_Node000016"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7511.26,-258.19C7550.39,-231.7 7618.79,-185.38 7653.11,-162.14"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7509.23,-255.34 7502.91,-263.84 7513.16,-261.13 7509.23,-255.34"/>
+<path fill="none" stroke="#63b8ff" d="M6864.62,-260.92C6946.05,-234.97 7099.4,-186.11 7174.82,-162.08"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="6863.52,-257.59 6855.05,-263.96 6865.64,-264.26 6863.52,-257.59"/>
 </a>
 </g>
 </g>
@@ -726,8 +726,8 @@
 <g id="edge30_Node000022_Node000021" class="edge">
 <title>Node22&#45;&gt;Node21</title>
 <g id="a_edge30_Node000022_Node000021"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7582.96,-330.84C7559.97,-319.27 7530.92,-304.64 7509.88,-294.04"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7581.57,-334.06 7592.07,-335.44 7584.72,-327.81 7581.57,-334.06"/>
+<path fill="none" stroke="#63b8ff" d="M6842.03,-326.88C6834.87,-316.07 6826.53,-303.46 6820.29,-294.04"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="6839.25,-329.03 6847.69,-335.44 6845.09,-325.16 6839.25,-329.03"/>
 </a>
 </g>
 </g>
@@ -735,8 +735,8 @@
 <g id="edge34_Node000025_Node000021" class="edge">
 <title>Node25&#45;&gt;Node21</title>
 <g id="a_edge34_Node000025_Node000021"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M7332.17,-332.07C7365.99,-320.31 7410.02,-305.01 7441.59,-294.04"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="7330.77,-328.85 7322.47,-335.44 7333.07,-335.46 7330.77,-328.85"/>
+<path fill="none" stroke="#63b8ff" d="M6960.83,-332.07C6927.01,-320.31 6882.98,-305.01 6851.41,-294.04"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="6959.93,-335.46 6970.53,-335.44 6962.23,-328.85 6959.93,-335.46"/>
 </a>
 </g>
 </g>
@@ -744,8 +744,8 @@
 <g id="Node000028" class="node">
 <title>Node28</title>
 <g id="a_Node000028"><a xlink:href="ir_2prim_2op_8h.html" target="_top" xlink:title="Shared primitive construction and constant helpers.">
-<polygon fill="white" stroke="#666666" points="491,-827.5 357,-827.5 357,-808.5 491,-808.5 491,-827.5"/>
-<text text-anchor="middle" x="424" y="-815.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/ir/prim/op.h</text>
+<polygon fill="white" stroke="#666666" points="453,-827.5 319,-827.5 319,-808.5 453,-808.5 453,-827.5"/>
+<text text-anchor="middle" x="386" y="-815.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/ir/prim/op.h</text>
 </a>
 </g>
 </g>
@@ -753,17 +753,17 @@
 <g id="edge40_Node000027_Node000028" class="edge">
 <title>Node27&#45;&gt;Node28</title>
 <g id="a_edge40_Node000027_Node000028"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M424,-858.6C424,-847.8 424,-835.78 424,-827.84"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="420.5,-858.8 424,-868.8 427.5,-858.8 420.5,-858.8"/>
+<path fill="none" stroke="#63b8ff" d="M386,-858.6C386,-847.8 386,-835.78 386,-827.84"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="382.5,-858.8 386,-868.8 389.5,-858.8 382.5,-858.8"/>
 </a>
 </g>
 </g>
 <!-- Node27&#45;&gt;Node29 -->
-<g id="edge160_Node000027_Node000029" class="edge">
+<g id="edge161_Node000027_Node000029" class="edge">
 <title>Node27&#45;&gt;Node29</title>
-<g id="a_edge160_Node000027_Node000029"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M465.17,-863.74C478.04,-855.87 491.17,-845.61 500,-833 515.64,-810.67 518.52,-777.13 518.97,-761.53"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="463.28,-860.79 456.35,-868.8 466.77,-866.85 463.28,-860.79"/>
+<g id="a_edge161_Node000027_Node000029"><a xlink:title=" ">
+<path fill="none" stroke="#63b8ff" d="M427.17,-863.74C440.04,-855.87 453.17,-845.61 462,-833 477.64,-810.67 480.52,-777.13 480.97,-761.53"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="425.28,-860.79 418.35,-868.8 428.77,-866.85 425.28,-860.79"/>
 </a>
 </g>
 </g>
@@ -771,17 +771,17 @@
 <g id="Node000078" class="node">
 <title>Node78</title>
 <g id="a_Node000078"><a xlink:href="elemwise_8h.html" target="_top" xlink:title="Elementwise op constructions.">
-<polygon fill="white" stroke="#666666" points="452.5,-360 297.5,-360 297.5,-341 452.5,-341 452.5,-360"/>
-<text text-anchor="middle" x="375" y="-348" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/topi/elemwise.h</text>
+<polygon fill="white" stroke="#666666" points="425.5,-360 270.5,-360 270.5,-341 425.5,-341 425.5,-360"/>
+<text text-anchor="middle" x="348" y="-348" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/topi/elemwise.h</text>
 </a>
 </g>
 </g>
 <!-- Node27&#45;&gt;Node78 -->
-<g id="edge162_Node000027_Node000078" class="edge">
+<g id="edge163_Node000027_Node000078" class="edge">
 <title>Node27&#45;&gt;Node78</title>
-<g id="a_edge162_Node000027_Node000078"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M358.78,-879.27C275.26,-873.47 136.15,-860.01 93,-833 56.42,-810.11 38,-796.15 38,-753 38,-753 38,-753 38,-487 38,-445.07 53.43,-430.73 88,-407 121.31,-384.13 224.24,-368.24 297.28,-359.49"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="358.72,-882.78 368.93,-879.96 359.19,-875.79 358.72,-882.78"/>
+<g id="a_edge163_Node000027_Node000078"><a xlink:title=" ">
+<path fill="none" stroke="#63b8ff" d="M320.6,-877.14C243.32,-869.39 120.04,-854.19 79,-833 34.6,-810.08 0,-802.97 0,-753 0,-753 0,-753 0,-553 0,-424.89 178.8,-376.91 280.08,-360.01"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="320.43,-880.64 330.72,-878.14 321.11,-873.67 320.43,-880.64"/>
 </a>
 </g>
 </g>
@@ -789,18 +789,18 @@
 <g id="Node000084" class="node">
 <title>Node84</title>
 <g id="a_Node000084"><a xlink:href="extern_8h.html" target="_top" xlink:title="Helpers for using external functions.">
-<polygon fill="white" stroke="#666666" points="231.5,-569 104.5,-569 104.5,-539 231.5,-539 231.5,-569"/>
-<text text-anchor="start" x="112.5" y="-557" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/topi/detail</text>
-<text text-anchor="middle" x="168" y="-546" font-family="Helvetica,sans-Serif" font-size="10.00">/extern.h</text>
+<polygon fill="white" stroke="#666666" points="193.5,-569 66.5,-569 66.5,-539 193.5,-539 193.5,-569"/>
+<text text-anchor="start" x="74.5" y="-557" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/topi/detail</text>
+<text text-anchor="middle" x="130" y="-546" font-family="Helvetica,sans-Serif" font-size="10.00">/extern.h</text>
 </a>
 </g>
 </g>
 <!-- Node27&#45;&gt;Node84 -->
-<g id="edge161_Node000027_Node000084" class="edge">
+<g id="edge162_Node000027_Node000084" class="edge">
 <title>Node27&#45;&gt;Node84</title>
-<g id="a_edge161_Node000027_Node000084"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M375.54,-864.91C331.38,-844.91 273,-808.06 273,-753 273,-753 273,-753 273,-685 273,-633.07 221.66,-590.2 190.78,-569.11"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="374.16,-868.12 384.72,-868.92 376.96,-861.71 374.16,-868.12"/>
+<g id="a_edge162_Node000027_Node000084"><a xlink:title=" ">
+<path fill="none" stroke="#63b8ff" d="M349.2,-863.86C313.28,-842.22 264,-803.36 264,-753 264,-753 264,-753 264,-685 264,-628.6 202.1,-588.81 162.44,-569.11"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="347.61,-866.98 358.01,-868.98 351.13,-860.93 347.61,-866.98"/>
 </a>
 </g>
 </g>
@@ -808,8 +808,8 @@
 <g id="edge41_Node000028_Node000029" class="edge">
 <title>Node28&#45;&gt;Node29</title>
 <g id="a_edge41_Node000028_Node000029"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M445.26,-802.68C463.92,-790.11 490.46,-772.23 506.09,-761.7"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="443.15,-799.88 436.81,-808.37 447.06,-805.68 443.15,-799.88"/>
+<path fill="none" stroke="#63b8ff" d="M407.26,-802.68C425.92,-790.11 452.46,-772.23 468.09,-761.7"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="405.15,-799.88 398.81,-808.37 409.06,-805.68 405.15,-799.88"/>
 </a>
 </g>
 </g>
@@ -817,8 +817,8 @@
 <g id="Node000030" class="node">
 <title>Node30</title>
 <g id="a_Node000030"><a xlink:href="relax_2expr_8h.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="#666666" points="4342.5,-695.5 4207.5,-695.5 4207.5,-676.5 4342.5,-676.5 4342.5,-695.5"/>
-<text text-anchor="middle" x="4275" y="-683.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relax/expr.h</text>
+<polygon fill="white" stroke="#666666" points="4300.5,-695.5 4165.5,-695.5 4165.5,-676.5 4300.5,-676.5 4300.5,-695.5"/>
+<text text-anchor="middle" x="4233" y="-683.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relax/expr.h</text>
 </a>
 </g>
 </g>
@@ -826,8 +826,8 @@
 <g id="edge42_Node000029_Node000030" class="edge">
 <title>Node29&#45;&gt;Node30</title>
 <g id="a_edge42_Node000029_Node000030"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M588.71,-749.81C1057.49,-741.82 3745.74,-696.02 4207.49,-688.15"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="588.32,-746.32 578.38,-749.99 588.43,-753.32 588.32,-746.32"/>
+<path fill="none" stroke="#63b8ff" d="M550.63,-749.81C1018.78,-741.83 3702.86,-696.04 4165.19,-688.16"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="550.25,-746.32 540.31,-749.99 550.37,-753.32 550.25,-746.32"/>
 </a>
 </g>
 </g>
@@ -835,9 +835,9 @@
 <g id="Node000063" class="node">
 <title>Node63</title>
 <g id="a_Node000063"><a xlink:href="data__layout_8h.html" target="_top" xlink:title="SLayout expression to describe the data organization of a tensor. And SBijectiveLayout to mapping two...">
-<polygon fill="white" stroke="#666666" points="1110.5,-437 987.5,-437 987.5,-407 1110.5,-407 1110.5,-437"/>
-<text text-anchor="start" x="995.5" y="-425" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/data</text>
-<text text-anchor="middle" x="1049" y="-414" font-family="Helvetica,sans-Serif" font-size="10.00">_layout.h</text>
+<polygon fill="white" stroke="#666666" points="1207.5,-437 1084.5,-437 1084.5,-407 1207.5,-407 1207.5,-437"/>
+<text text-anchor="start" x="1092.5" y="-425" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/s_tir/data</text>
+<text text-anchor="middle" x="1146" y="-414" font-family="Helvetica,sans-Serif" font-size="10.00">_layout.h</text>
 </a>
 </g>
 </g>
@@ -845,8 +845,8 @@
 <g id="edge87_Node000029_Node000063" class="edge">
 <title>Node29&#45;&gt;Node63</title>
 <g id="a_edge87_Node000029_Node000063"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M528.77,-733.38C557.6,-683.18 647.81,-538.85 766,-473 847.58,-427.55 881.08,-453.46 973,-437 977.62,-436.17 982.4,-435.31 987.21,-434.44"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="525.57,-731.93 523.69,-742.35 531.66,-735.37 525.57,-731.93"/>
+<path fill="none" stroke="#63b8ff" d="M474.96,-732.78C457.03,-677.09 407.48,-510.6 443,-473 491.3,-421.87 1005.22,-445.82 1075,-437 1077.99,-436.62 1081.05,-436.19 1084.13,-435.72"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="471.66,-733.95 478.09,-742.37 478.32,-731.78 471.66,-733.95"/>
 </a>
 </g>
 </g>
@@ -854,17 +854,17 @@
 <g id="Node000064" class="node">
 <title>Node64</title>
 <g id="a_Node000064"><a xlink:href="topi_2transform_8h.html" target="_top" xlink:title="Transform op constructors.">
-<polygon fill="white" stroke="#666666" points="1236,-360 1080,-360 1080,-341 1236,-341 1236,-360"/>
-<text text-anchor="middle" x="1158" y="-348" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/topi/transform.h</text>
+<polygon fill="white" stroke="#666666" points="1390,-360 1234,-360 1234,-341 1390,-341 1390,-360"/>
+<text text-anchor="middle" x="1312" y="-348" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/topi/transform.h</text>
 </a>
 </g>
 </g>
 <!-- Node29&#45;&gt;Node64 -->
-<g id="edge159_Node000029_Node000064" class="edge">
+<g id="edge160_Node000029_Node000064" class="edge">
 <title>Node29&#45;&gt;Node64</title>
-<g id="a_edge159_Node000029_Node000064"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M523.71,-732.21C528.25,-715.61 535.92,-690.99 546,-671 598.75,-566.4 614.95,-524.85 720,-473 793.94,-436.51 822.88,-460.23 902,-437 936.84,-426.77 943.73,-419.03 978,-407 1030.15,-388.7 1091.89,-370.37 1127.83,-360.03"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="520.23,-731.71 521.08,-742.27 527,-733.49 520.23,-731.71"/>
+<g id="a_edge160_Node000029_Node000064"><a xlink:title=" ">
+<path fill="none" stroke="#63b8ff" d="M492.2,-733.98C520.16,-693.01 597.45,-588.61 690,-539 899.88,-426.5 1002.58,-542.63 1216,-437 1255.21,-417.6 1290.65,-377.79 1305.11,-360.19"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="489.25,-732.09 486.58,-742.35 495.07,-736 489.25,-732.09"/>
 </a>
 </g>
 </g>
@@ -872,17 +872,17 @@
 <g id="Node000065" class="node">
 <title>Node65</title>
 <g id="a_Node000065"><a xlink:href="topi_2nn_8h.html" target="_top" xlink:title="NN op constructions.">
-<polygon fill="white" stroke="#666666" points="880,-222.5 760,-222.5 760,-203.5 880,-203.5 880,-222.5"/>
-<text text-anchor="middle" x="820" y="-210.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/topi/nn.h</text>
+<polygon fill="white" stroke="#666666" points="1256,-222.5 1136,-222.5 1136,-203.5 1256,-203.5 1256,-222.5"/>
+<text text-anchor="middle" x="1196" y="-210.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/topi/nn.h</text>
 </a>
 </g>
 </g>
 <!-- Node29&#45;&gt;Node65 -->
-<g id="edge158_Node000029_Node000065" class="edge">
+<g id="edge159_Node000029_Node000065" class="edge">
 <title>Node29&#45;&gt;Node65</title>
-<g id="a_edge158_Node000029_Node000065"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M502.14,-735.11C479.75,-712.21 443,-667.54 443,-621 443,-621 443,-621 443,-487 443,-362.1 509.35,-332.17 614,-264 639.13,-247.63 715.77,-231.83 768.14,-222.52"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="499.8,-737.73 509.37,-742.27 504.73,-732.75 499.8,-737.73"/>
+<g id="a_edge159_Node000029_Node000065"><a xlink:title=" ">
+<path fill="none" stroke="#63b8ff" d="M469.88,-733.28C442.44,-687.1 377.31,-560.55 428,-473 451.37,-432.64 747.76,-278.77 792,-264 909.48,-224.78 1055.44,-215.83 1135.84,-214.08"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="467.06,-735.38 475.25,-742.1 473.04,-731.74 467.06,-735.38"/>
 </a>
 </g>
 </g>
@@ -890,8 +890,8 @@
 <g id="Node000073" class="node">
 <title>Node73</title>
 <g id="a_Node000073"><a xlink:href="operation_8h.html" target="_top" xlink:title="Operation node can generate one or multiple Tensors.">
-<polygon fill="white" stroke="#666666" points="1244,-629.5 1098,-629.5 1098,-610.5 1244,-610.5 1244,-629.5"/>
-<text text-anchor="middle" x="1171" y="-617.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/te/operation.h</text>
+<polygon fill="white" stroke="#666666" points="1508,-629.5 1362,-629.5 1362,-610.5 1508,-610.5 1508,-629.5"/>
+<text text-anchor="middle" x="1435" y="-617.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/te/operation.h</text>
 </a>
 </g>
 </g>
@@ -899,17 +899,17 @@
 <g id="edge100_Node000029_Node000073" class="edge">
 <title>Node29&#45;&gt;Node73</title>
 <g id="a_edge100_Node000029_Node000073"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M571.94,-740.45C697.8,-715.35 1012.97,-652.51 1128.06,-629.56"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="570.9,-737.08 561.78,-742.47 572.27,-743.95 570.9,-737.08"/>
+<path fill="none" stroke="#63b8ff" d="M550.37,-741.55C728.85,-717.23 1201.85,-652.77 1372.5,-629.52"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="549.75,-738.1 540.32,-742.92 550.7,-745.03 549.75,-738.1"/>
 </a>
 </g>
 </g>
 <!-- Node29&#45;&gt;Node78 -->
-<g id="edge157_Node000029_Node000078" class="edge">
+<g id="edge158_Node000029_Node000078" class="edge">
 <title>Node29&#45;&gt;Node78</title>
-<g id="a_edge157_Node000029_Node000078"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M482.74,-738.5C464.26,-730.43 442.84,-718.2 429,-701 405.73,-672.08 405,-658.12 405,-621 405,-621 405,-621 405,-487 405,-438.09 386.14,-381.55 378.33,-360.23"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="481.5,-741.77 492.08,-742.34 484.16,-735.3 481.5,-741.77"/>
+<g id="a_edge158_Node000029_Node000078"><a xlink:title=" ">
+<path fill="none" stroke="#63b8ff" d="M441.97,-738.73C423.54,-730.9 402.99,-718.8 391,-701 351.79,-642.83 348.32,-408.07 348.03,-360.09"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="440.77,-742.02 451.36,-742.45 443.35,-735.51 440.77,-742.02"/>
 </a>
 </g>
 </g>
@@ -917,18 +917,18 @@
 <g id="Node000086" class="node">
 <title>Node86</title>
 <g id="a_Node000086"><a xlink:href="pad__utils_8h.html" target="_top" xlink:title="Padding helpers.">
-<polygon fill="white" stroke="#666666" points="376.5,-569 249.5,-569 249.5,-539 376.5,-539 376.5,-569"/>
-<text text-anchor="start" x="257.5" y="-557" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/topi/detail</text>
-<text text-anchor="middle" x="313" y="-546" font-family="Helvetica,sans-Serif" font-size="10.00">/pad_utils.h</text>
+<polygon fill="white" stroke="#666666" points="338.5,-569 211.5,-569 211.5,-539 338.5,-539 338.5,-569"/>
+<text text-anchor="start" x="219.5" y="-557" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/topi/detail</text>
+<text text-anchor="middle" x="275" y="-546" font-family="Helvetica,sans-Serif" font-size="10.00">/pad_utils.h</text>
 </a>
 </g>
 </g>
 <!-- Node29&#45;&gt;Node86 -->
-<g id="edge156_Node000029_Node000086" class="edge">
+<g id="edge157_Node000029_Node000086" class="edge">
 <title>Node29&#45;&gt;Node86</title>
-<g id="a_edge156_Node000029_Node000086"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M466.89,-739.68C441.68,-732.11 412.34,-719.95 391,-701 348.89,-663.6 325.54,-597.88 316.91,-569.14"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="466.11,-743.1 476.68,-742.46 468.02,-736.37 466.11,-743.1"/>
+<g id="a_edge157_Node000029_Node000086"><a xlink:title=" ">
+<path fill="none" stroke="#63b8ff" d="M428.89,-739.68C403.68,-732.11 374.34,-719.95 353,-701 310.89,-663.6 287.54,-597.88 278.91,-569.14"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="428.11,-743.1 438.68,-742.46 430.02,-736.37 428.11,-743.1"/>
 </a>
 </g>
 </g>
@@ -936,8 +936,8 @@
 <g id="Node000095" class="node">
 <title>Node95</title>
 <g id="a_Node000095"><a xlink:href="te_2tensor_8h.html" target="_top" xlink:title="Dataflow tensor object.">
-<polygon fill="white" stroke="#666666" points="1235.5,-695.5 1106.5,-695.5 1106.5,-676.5 1235.5,-676.5 1235.5,-695.5"/>
-<text text-anchor="middle" x="1171" y="-683.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/te/tensor.h</text>
+<polygon fill="white" stroke="#666666" points="1499.5,-695.5 1370.5,-695.5 1370.5,-676.5 1499.5,-676.5 1499.5,-695.5"/>
+<text text-anchor="middle" x="1435" y="-683.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/te/tensor.h</text>
 </a>
 </g>
 </g>
@@ -945,8 +945,8 @@
 <g id="edge152_Node000029_Node000095" class="edge">
 <title>Node29&#45;&gt;Node95</title>
 <g id="a_edge152_Node000029_Node000095"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M587.99,-744.23C714.74,-731.79 982.96,-705.46 1106.38,-693.34"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="587.62,-740.75 578.01,-745.21 588.3,-747.71 587.62,-740.75"/>
+<path fill="none" stroke="#63b8ff" d="M550.33,-746.35C728.01,-734.43 1197.8,-702.91 1370.29,-691.34"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="550.06,-742.86 540.32,-747.02 550.53,-749.84 550.06,-742.86"/>
 </a>
 </g>
 </g>
@@ -954,9 +954,9 @@
 <g id="Node000096" class="node">
 <title>Node96</title>
 <g id="a_Node000096"><a xlink:href="tirx_2script_2builder_2ir_8h.html" target="_top" xlink:title=" ">
-<polygon fill="white" stroke="#666666" points="6630,-635 6506,-635 6506,-605 6630,-605 6630,-635"/>
-<text text-anchor="start" x="6514" y="-623" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/tirx/script</text>
-<text text-anchor="middle" x="6568" y="-612" font-family="Helvetica,sans-Serif" font-size="10.00">/builder/ir.h</text>
+<polygon fill="white" stroke="#666666" points="8028,-635 7904,-635 7904,-605 8028,-605 8028,-635"/>
+<text text-anchor="start" x="7912" y="-623" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/tirx/script</text>
+<text text-anchor="middle" x="7966" y="-612" font-family="Helvetica,sans-Serif" font-size="10.00">/builder/ir.h</text>
 </a>
 </g>
 </g>
@@ -964,8 +964,8 @@
 <g id="edge155_Node000029_Node000096" class="edge">
 <title>Node29&#45;&gt;Node96</title>
 <g id="a_edge155_Node000029_Node000096"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M588.33,-751.15C1184.45,-752.32 5436.8,-758.64 6000,-701 6068.5,-693.99 6083.99,-681.78 6152,-671 6277.01,-651.18 6424.27,-635.2 6505.78,-627"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="588.18,-747.65 578.18,-751.13 588.17,-754.65 588.18,-747.65"/>
+<path fill="none" stroke="#63b8ff" d="M550.4,-750.75C1267.8,-748.08 7309.42,-724.95 7491,-701 7543.37,-694.09 7554.2,-681.32 7606,-671 7661.54,-659.94 7816.19,-639.81 7903.65,-628.76"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="550.21,-747.25 540.22,-750.78 550.24,-754.25 550.21,-747.25"/>
 </a>
 </g>
 </g>
@@ -973,8 +973,8 @@
 <g id="edge77_Node000030_Node000007" class="edge">
 <title>Node30&#45;&gt;Node7</title>
 <g id="a_edge77_Node000030_Node000007"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M4352.74,-684.15C4595.67,-681.16 5330.49,-669.34 5432,-635 5454.07,-627.53 5452.9,-612.38 5475,-605 5490.83,-599.71 6506.64,-566.92 6800.92,-557.52"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="4352.53,-680.66 4342.58,-684.28 4352.62,-687.66 4352.53,-680.66"/>
+<path fill="none" stroke="#63b8ff" d="M4310.98,-684.54C4637.5,-682.41 5885.83,-671.89 6058,-635 6091.9,-627.74 6096.31,-613.18 6130,-605 6228.77,-581.02 6520.27,-564.99 6661.94,-558.39"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="4310.65,-681.05 4300.68,-684.61 4310.7,-688.05 4310.65,-681.05"/>
 </a>
 </g>
 </g>
@@ -982,8 +982,8 @@
 <g id="Node000031" class="node">
 <title>Node31</title>
 <g id="a_Node000031"><a xlink:href="relax_2analysis_8h.html" target="_top" xlink:title="The set of Relax specific analysis on IR.">
-<polygon fill="white" stroke="#666666" points="5596.5,-431.5 5441.5,-431.5 5441.5,-412.5 5596.5,-412.5 5596.5,-431.5"/>
-<text text-anchor="middle" x="5519" y="-419.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relax/analysis.h</text>
+<polygon fill="white" stroke="#666666" points="5293.5,-431.5 5138.5,-431.5 5138.5,-412.5 5293.5,-412.5 5293.5,-431.5"/>
+<text text-anchor="middle" x="5216" y="-419.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relax/analysis.h</text>
 </a>
 </g>
 </g>
@@ -991,8 +991,8 @@
 <g id="edge43_Node000030_Node000031" class="edge">
 <title>Node30&#45;&gt;Node31</title>
 <g id="a_edge43_Node000030_Node000031"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M4196.76,-685.37C3895.25,-686.43 2822.86,-686.55 2773,-635 2763.73,-625.42 2765.25,-615.85 2773,-605 2825.72,-531.25 2876.93,-555.89 2966,-539 3458.17,-445.64 5068.47,-426.73 5441.4,-423.56"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="4197.17,-688.87 4207.16,-685.33 4197.15,-681.87 4197.17,-688.87"/>
+<path fill="none" stroke="#63b8ff" d="M4155.38,-684.66C3896.93,-683.16 3079.59,-675.25 3041,-635 3031.77,-625.38 3031.97,-614.81 3041,-605 3185.82,-447.56 4767.45,-426.26 5138.44,-423.43"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="4155.42,-688.16 4165.44,-684.72 4155.46,-681.16 4155.42,-688.16"/>
 </a>
 </g>
 </g>
@@ -1000,9 +1000,9 @@
 <g id="Node000032" class="node">
 <title>Node32</title>
 <g id="a_Node000032"><a xlink:href="binding__rewrite_8h.html" target="_top" xlink:title="An IR rewriter to easily add/remove/replace bindings (statements).">
-<polygon fill="white" stroke="#666666" points="3812.5,-365.5 3671.5,-365.5 3671.5,-335.5 3812.5,-335.5 3812.5,-365.5"/>
-<text text-anchor="start" x="3679.5" y="-353.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relax/binding</text>
-<text text-anchor="middle" x="3742" y="-342.5" font-family="Helvetica,sans-Serif" font-size="10.00">_rewrite.h</text>
+<polygon fill="white" stroke="#666666" points="3837.5,-365.5 3696.5,-365.5 3696.5,-335.5 3837.5,-335.5 3837.5,-365.5"/>
+<text text-anchor="start" x="3704.5" y="-353.5" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relax/binding</text>
+<text text-anchor="middle" x="3767" y="-342.5" font-family="Helvetica,sans-Serif" font-size="10.00">_rewrite.h</text>
 </a>
 </g>
 </g>
@@ -1010,8 +1010,8 @@
 <g id="edge62_Node000030_Node000032" class="edge">
 <title>Node30&#45;&gt;Node32</title>
 <g id="a_edge62_Node000030_Node000032"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M4197.16,-684.58C3884.21,-682.64 2731.4,-672.94 2664,-635 2627.05,-614.2 2612,-597.41 2612,-555 2612,-555 2612,-555 2612,-487 2612,-450.46 2602.9,-430.37 2631,-407 2671.04,-373.7 3432.7,-357.11 3671.21,-352.71"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="4197.47,-688.08 4207.49,-684.64 4197.51,-681.08 4197.47,-688.08"/>
+<path fill="none" stroke="#63b8ff" d="M4155.18,-684.69C3895.06,-683.28 3069.95,-675.6 3031,-635 2828.62,-424.03 3475.71,-367.77 3696.15,-354.9"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="4155.28,-688.19 4165.3,-684.74 4155.32,-681.19 4155.28,-688.19"/>
 </a>
 </g>
 </g>
@@ -1019,9 +1019,9 @@
 <g id="Node000033" class="node">
 <title>Node33</title>
 <g id="a_Node000033"><a xlink:href="ccl_8h.html" target="_top" xlink:title="Attributes for ccl operators.">
-<polygon fill="white" stroke="#666666" points="3074,-635 2946,-635 2946,-605 3074,-605 3074,-635"/>
-<text text-anchor="start" x="2954" y="-623" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relax/attrs</text>
-<text text-anchor="middle" x="3010" y="-612" font-family="Helvetica,sans-Serif" font-size="10.00">/ccl.h</text>
+<polygon fill="white" stroke="#666666" points="2810,-635 2682,-635 2682,-605 2810,-605 2810,-635"/>
+<text text-anchor="start" x="2690" y="-623" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relax/attrs</text>
+<text text-anchor="middle" x="2746" y="-612" font-family="Helvetica,sans-Serif" font-size="10.00">/ccl.h</text>
 </a>
 </g>
 </g>
@@ -1029,8 +1029,8 @@
 <g id="edge45_Node000030_Node000033" class="edge">
 <title>Node30&#45;&gt;Node33</title>
 <g id="a_edge45_Node000030_Node000033"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M4196.97,-685.7C4006.15,-686.54 3500.94,-683.57 3083,-635 3080.05,-634.66 3077.04,-634.26 3074.01,-633.83"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="4197.2,-689.2 4207.18,-685.65 4197.17,-682.2 4197.2,-689.2"/>
+<path fill="none" stroke="#63b8ff" d="M4154.75,-683.82C3897.73,-679.71 3080.97,-664.57 2819,-635 2816.05,-634.67 2813.04,-634.28 2810.01,-633.85"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="4155.06,-687.33 4165.11,-683.99 4155.17,-680.33 4155.06,-687.33"/>
 </a>
 </g>
 </g>
@@ -1038,9 +1038,9 @@
 <g id="Node000034" class="node">
 <title>Node34</title>
 <g id="a_Node000034"><a xlink:href="create_8h.html" target="_top" xlink:title="Attributes for tensor creation operators.">
-<polygon fill="white" stroke="#666666" points="3220,-635 3092,-635 3092,-605 3220,-605 3220,-635"/>
-<text text-anchor="start" x="3100" y="-623" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relax/attrs</text>
-<text text-anchor="middle" x="3156" y="-612" font-family="Helvetica,sans-Serif" font-size="10.00">/create.h</text>
+<polygon fill="white" stroke="#666666" points="2956,-635 2828,-635 2828,-605 2956,-605 2956,-635"/>
+<text text-anchor="start" x="2836" y="-623" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relax/attrs</text>
+<text text-anchor="middle" x="2892" y="-612" font-family="Helvetica,sans-Serif" font-size="10.00">/create.h</text>
 </a>
 </g>
 </g>
@@ -1048,8 +1048,8 @@
 <g id="edge46_Node000030_Node000034" class="edge">
 <title>Node30&#45;&gt;Node34</title>
 <g id="a_edge46_Node000030_Node000034"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M4197.33,-685.04C4023.32,-684.31 3589.2,-677.93 3229,-635 3226.05,-634.65 3223.05,-634.25 3220.01,-633.81"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="4197.41,-688.54 4207.42,-685.08 4197.43,-681.54 4197.41,-688.54"/>
+<path fill="none" stroke="#63b8ff" d="M4155.3,-685.64C3957.1,-686.48 3416.8,-683.71 2970,-635 2965.49,-634.51 2960.84,-633.91 2956.17,-633.24"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="4155.34,-689.14 4165.33,-685.6 4155.31,-682.14 4155.34,-689.14"/>
 </a>
 </g>
 </g>
@@ -1057,9 +1057,9 @@
 <g id="Node000035" class="node">
 <title>Node35</title>
 <g id="a_Node000035"><a xlink:href="datatype_8h.html" target="_top" xlink:title="Attributes for datatype operators.">
-<polygon fill="white" stroke="#666666" points="3366,-635 3238,-635 3238,-605 3366,-605 3366,-635"/>
-<text text-anchor="start" x="3246" y="-623" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relax/attrs</text>
-<text text-anchor="middle" x="3302" y="-612" font-family="Helvetica,sans-Serif" font-size="10.00">/datatype.h</text>
+<polygon fill="white" stroke="#666666" points="3178,-635 3050,-635 3050,-605 3178,-605 3178,-635"/>
+<text text-anchor="start" x="3058" y="-623" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relax/attrs</text>
+<text text-anchor="middle" x="3114" y="-612" font-family="Helvetica,sans-Serif" font-size="10.00">/datatype.h</text>
 </a>
 </g>
 </g>
@@ -1067,8 +1067,8 @@
 <g id="edge47_Node000030_Node000035" class="edge">
 <title>Node30&#45;&gt;Node35</title>
 <g id="a_edge47_Node000030_Node000035"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M4196.8,-684.17C4040.23,-681.75 3677.33,-672.22 3375,-635 3372.05,-634.64 3369.05,-634.23 3366.02,-633.78"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="4197.22,-687.68 4207.27,-684.33 4197.32,-680.68 4197.22,-687.68"/>
+<path fill="none" stroke="#63b8ff" d="M4155.33,-685.04C3981.32,-684.31 3547.2,-677.93 3187,-635 3184.05,-634.65 3181.05,-634.25 3178.01,-633.81"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="4155.41,-688.54 4165.42,-685.08 4155.43,-681.54 4155.41,-688.54"/>
 </a>
 </g>
 </g>
@@ -1076,9 +1076,9 @@
 <g id="Node000036" class="node">
 <title>Node36</title>
 <g id="a_Node000036"><a xlink:href="distributed_8h.html" target="_top" xlink:title="Attributes for redistribute and annotate_sharding operators.">
-<polygon fill="white" stroke="#666666" points="5976,-635 5848,-635 5848,-605 5976,-605 5976,-635"/>
-<text text-anchor="start" x="5856" y="-623" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relax/attrs</text>
-<text text-anchor="middle" x="5912" y="-612" font-family="Helvetica,sans-Serif" font-size="10.00">/distributed.h</text>
+<polygon fill="white" stroke="#666666" points="5904,-635 5776,-635 5776,-605 5904,-605 5904,-635"/>
+<text text-anchor="start" x="5784" y="-623" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relax/attrs</text>
+<text text-anchor="middle" x="5840" y="-612" font-family="Helvetica,sans-Serif" font-size="10.00">/distributed.h</text>
 </a>
 </g>
 </g>
@@ -1086,8 +1086,8 @@
 <g id="edge48_Node000030_Node000036" class="edge">
 <title>Node30&#45;&gt;Node36</title>
 <g id="a_edge48_Node000030_Node000036"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M4352.86,-684.99C4577.72,-684.43 5247.33,-678.89 5801,-635 5816.2,-633.8 5832.51,-632.01 5847.83,-630.12"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="4352.8,-681.49 4342.81,-685.02 4352.82,-688.49 4352.8,-681.49"/>
+<path fill="none" stroke="#63b8ff" d="M4310.94,-684.08C4581.68,-680.62 5480.38,-666.96 5767,-635 5769.95,-634.67 5772.96,-634.29 5775.99,-633.86"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="4310.77,-680.58 4300.81,-684.21 4310.86,-687.58 4310.77,-680.58"/>
 </a>
 </g>
 </g>
@@ -1095,9 +1095,9 @@
 <g id="Node000037" class="node">
 <title>Node37</title>
 <g id="a_Node000037"><a xlink:href="image_8h.html" target="_top" xlink:title="Attributes for image operators.">
-<polygon fill="white" stroke="#666666" points="3512,-635 3384,-635 3384,-605 3512,-605 3512,-635"/>
-<text text-anchor="start" x="3392" y="-623" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relax/attrs</text>
-<text text-anchor="middle" x="3448" y="-612" font-family="Helvetica,sans-Serif" font-size="10.00">/image.h</text>
+<polygon fill="white" stroke="#666666" points="3324,-635 3196,-635 3196,-605 3324,-605 3324,-635"/>
+<text text-anchor="start" x="3204" y="-623" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relax/attrs</text>
+<text text-anchor="middle" x="3260" y="-612" font-family="Helvetica,sans-Serif" font-size="10.00">/image.h</text>
 </a>
 </g>
 </g>
@@ -1105,8 +1105,8 @@
 <g id="edge49_Node000030_Node000037" class="edge">
 <title>Node30&#45;&gt;Node37</title>
 <g id="a_edge49_Node000030_Node000037"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M4197,-682.99C4059.8,-678.76 3766.55,-666.56 3521,-635 3518.06,-634.62 3515.05,-634.2 3512.02,-633.74"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="4197.3,-686.51 4207.4,-683.31 4197.51,-679.51 4197.3,-686.51"/>
+<path fill="none" stroke="#63b8ff" d="M4154.8,-684.17C3998.23,-681.75 3635.33,-672.22 3333,-635 3330.05,-634.64 3327.05,-634.23 3324.02,-633.78"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="4155.22,-687.68 4165.27,-684.33 4155.32,-680.68 4155.22,-687.68"/>
 </a>
 </g>
 </g>
@@ -1114,9 +1114,9 @@
 <g id="Node000038" class="node">
 <title>Node38</title>
 <g id="a_Node000038"><a xlink:href="index_8h.html" target="_top" xlink:title="Attributes for indexing operators.">
-<polygon fill="white" stroke="#666666" points="3658,-635 3530,-635 3530,-605 3658,-605 3658,-635"/>
-<text text-anchor="start" x="3538" y="-623" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relax/attrs</text>
-<text text-anchor="middle" x="3594" y="-612" font-family="Helvetica,sans-Serif" font-size="10.00">/index.h</text>
+<polygon fill="white" stroke="#666666" points="3470,-635 3342,-635 3342,-605 3470,-605 3470,-635"/>
+<text text-anchor="start" x="3350" y="-623" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relax/attrs</text>
+<text text-anchor="middle" x="3406" y="-612" font-family="Helvetica,sans-Serif" font-size="10.00">/index.h</text>
 </a>
 </g>
 </g>
@@ -1124,8 +1124,8 @@
 <g id="edge50_Node000030_Node000038" class="edge">
 <title>Node30&#45;&gt;Node38</title>
 <g id="a_edge50_Node000030_Node000038"><a xlink:title=" ">
-<path fill="none" stroke="#63b8ff" d="M4197.07,-681.28C4081.11,-675.13 3856.47,-660.88 3667,-635 3664.06,-634.6 3661.06,-634.16 3658.03,-633.68"/>
-<polygon fill="#63b8ff" stroke="#63b8ff" points="4197.09,-684.78 4207.26,-681.81 4197.46,-677.79 4197.09,-684.78"/>
+<path fill="none" stroke="#63b8ff" d="M4155,-682.99C4017.8,-678.76 3724.55,-666.56 3479,-635 3476.06,-634.62 3473.05,-634.2 3470.02,-633.74"/>
+<polygon fill="#63b8ff" stroke="#63b8ff" points="4155.3,-686.51 4165.4,-683.31 4155.51,-679.51 4155.3,-686.51"/>
 </a>
 </g>
 </g>
@@ -1133,9 +1133,9 @@
 <g id="Node000039" class="node">
 <title>Node39</title>
 <g id="a_Node000039"><a xlink:href="linear__algebra_8h.html" target="_top" xlink:title="Attributes for linear algebra operators.">
-<polygon fill="white" stroke="#666666" points="3804,-635 3676,-635 3676,-605 3804,-605 3804,-635"/>
-<text text-anchor="start" x="3684" y="-623" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relax/attrs</text>
-<text text-anchor="middle" x="3740" y="-612" font-family="Helvetica,sans-Serif" font-size="10.00">/linear_algebra.h</text>
+<polygon fill="white" stroke="#666666" points="3616,-635 3488,-635 3488,-605 3616,-605 3616,-635"/>
+<text text-anchor="start" x="3496" y="-623" font-family="Helvetica,sans-Serif" font-size="10.00">include/tvm/relax/attrs</text>
... 243180 lines suppressed ...