@@ -695,6 +695,42 @@ <h2>Module Contents<a class="headerlink" href="#module-contents" title="Link to
695695</ dl >
696696</ dd > </ dl >
697697
698+ < dl class ="py attribute ">
699+ < dt class ="sig sig-object py " id ="tilelang.transform.pass_config.PassConfigKey.TL_STORAGE_REWRITE_DETECT_INPLACE ">
700+ < span class ="sig-name descname "> < span class ="pre "> TL_STORAGE_REWRITE_DETECT_INPLACE</ span > </ span > < em class ="property "> < span class ="w "> </ span > < span class ="p "> < span class ="pre "> =</ span > </ span > < span class ="w "> </ span > < span class ="pre "> 'tl.storage_rewrite_detect_inplace'</ span > </ em > < a class ="headerlink " href ="#tilelang.transform.pass_config.PassConfigKey.TL_STORAGE_REWRITE_DETECT_INPLACE " title ="Link to this definition "> ¶</ a > </ dt >
701+ < dd > < p > Control StorageRewrite inplace detection.</ p >
702+ < p > When False (default) StorageRewrite keeps distinct temporaries for patterns
703+ such as < cite > dst[i] = f(src[i])</ cite > , avoiding implicit aliasing:</ p >
704+ < p > < code class ="docutils literal notranslate "> < span class ="pre "> `</ span >
705+ < span class ="pre "> read</ span > < span class ="pre "> =</ span > < span class ="pre "> T.allocate([1],</ span > < span class ="pre "> "int32",</ span > < span class ="pre "> "local.var")</ span >
706+ < span class ="pre "> write</ span > < span class ="pre "> =</ span > < span class ="pre "> T.allocate([1],</ span > < span class ="pre "> "int32",</ span > < span class ="pre "> "local.var")</ span >
707+ < span class ="pre "> read_buf</ span > < span class ="pre "> =</ span > < span class ="pre "> T.Buffer((1,),</ span > < span class ="pre "> "int32",</ span > < span class ="pre "> data=read,</ span > < span class ="pre "> scope="local.var")</ span >
708+ < span class ="pre "> write_buf</ span > < span class ="pre "> =</ span > < span class ="pre "> T.Buffer((1,),</ span > < span class ="pre "> "int32",</ span > < span class ="pre "> data=write,</ span > < span class ="pre "> scope="local.var")</ span >
709+ < span class ="pre "> write_buf[0]</ span > < span class ="pre "> =</ span > < span class ="pre "> read_buf[0]</ span > < span class ="pre "> *</ span > < span class ="pre "> 2</ span >
710+ < span class ="pre "> f(write_buf[0])</ span >
711+ < span class ="pre "> `</ span > </ code > </ p >
712+ < p > Setting the flag to True allows StorageRewrite to reuse the < cite > read</ cite > buffer
713+ for the write when it can prove the update is safely inplace, producing IR
714+ like:</ p >
715+ < p > < code class ="docutils literal notranslate "> < span class ="pre "> `</ span >
716+ < span class ="pre "> read</ span > < span class ="pre "> =</ span > < span class ="pre "> T.allocate([1],</ span > < span class ="pre "> "int32",</ span > < span class ="pre "> "local.var")</ span >
717+ < span class ="pre "> read_buf</ span > < span class ="pre "> =</ span > < span class ="pre "> T.Buffer((1,),</ span > < span class ="pre "> "int32",</ span > < span class ="pre "> data=read,</ span > < span class ="pre "> scope="local.var")</ span >
718+ < span class ="pre "> read_buf[0]</ span > < span class ="pre "> =</ span > < span class ="pre "> read_buf[0]</ span > < span class ="pre "> *</ span > < span class ="pre "> 2</ span >
719+ < span class ="pre "> f(read_buf[0])</ span >
720+ < span class ="pre "> `</ span > </ code > </ p >
721+ < p > This reduces local memory usage but introduces aliasing between the buffers.</ p >
722+ < p > Usage:</ p >
723+ < p > < a href ="#id1 "> < span class ="problematic " id ="id2 "> ``</ span > </ a > < a href ="#id3 "> < span class ="problematic " id ="id4 "> `</ span > </ a > python
724+ from tilelang.transform import PassContext, PassConfigKey</ p >
725+ < dl class ="simple ">
726+ < dt > with PassContext(</ dt > < dd > < p > config={PassConfigKey.TL_STORAGE_REWRITE_DETECT_INPLACE.value: True}</ p >
727+ </ dd >
728+ < dt > ):</ dt > < dd > < p > mod = tilelang.transform.StorageRewrite()(mod)</ p >
729+ </ dd >
730+ </ dl >
731+ < p > < a href ="#id5 "> < span class ="problematic " id ="id6 "> ``</ span > </ a > < a href ="#id7 "> < span class ="problematic " id ="id8 "> `</ span > </ a > </ p >
732+ </ dd > </ dl >
733+
698734< dl class ="py attribute ">
699735< dt class ="sig sig-object py " id ="tilelang.transform.pass_config.PassConfigKey.TIR_ENABLE_EQUIV_TERMS_IN_CSE ">
700736< span class ="sig-name descname "> < span class ="pre "> TIR_ENABLE_EQUIV_TERMS_IN_CSE</ span > </ span > < em class ="property "> < span class ="w "> </ span > < span class ="p "> < span class ="pre "> =</ span > </ span > < span class ="w "> </ span > < span class ="pre "> 'tir.enable_equiv_terms_in_cse_tir'</ span > </ em > < a class ="headerlink " href ="#tilelang.transform.pass_config.PassConfigKey.TIR_ENABLE_EQUIV_TERMS_IN_CSE " title ="Link to this definition "> ¶</ a > </ dt >
@@ -898,6 +934,7 @@ <h2>Module Contents<a class="headerlink" href="#module-contents" title="Link to
898934< li > < a class ="reference internal " href ="#tilelang.transform.pass_config.PassConfigKey.TL_DISABLE_SHUFFLE_ELECT "> < code class ="docutils literal notranslate "> < span class ="pre "> PassConfigKey.TL_DISABLE_SHUFFLE_ELECT</ span > </ code > </ a > </ li >
899935< li > < a class ="reference internal " href ="#tilelang.transform.pass_config.PassConfigKey.TL_DISABLE_THREAD_STORAGE_SYNC "> < code class ="docutils literal notranslate "> < span class ="pre "> PassConfigKey.TL_DISABLE_THREAD_STORAGE_SYNC</ span > </ code > </ a > </ li >
900936< li > < a class ="reference internal " href ="#tilelang.transform.pass_config.PassConfigKey.TL_FORCE_LET_INLINE "> < code class ="docutils literal notranslate "> < span class ="pre "> PassConfigKey.TL_FORCE_LET_INLINE</ span > </ code > </ a > </ li >
937+ < li > < a class ="reference internal " href ="#tilelang.transform.pass_config.PassConfigKey.TL_STORAGE_REWRITE_DETECT_INPLACE "> < code class ="docutils literal notranslate "> < span class ="pre "> PassConfigKey.TL_STORAGE_REWRITE_DETECT_INPLACE</ span > </ code > </ a > </ li >
901938< li > < a class ="reference internal " href ="#tilelang.transform.pass_config.PassConfigKey.TIR_ENABLE_EQUIV_TERMS_IN_CSE "> < code class ="docutils literal notranslate "> < span class ="pre "> PassConfigKey.TIR_ENABLE_EQUIV_TERMS_IN_CSE</ span > </ code > </ a > </ li >
902939< li > < a class ="reference internal " href ="#tilelang.transform.pass_config.PassConfigKey.TIR_DISABLE_CSE "> < code class ="docutils literal notranslate "> < span class ="pre "> PassConfigKey.TIR_DISABLE_CSE</ span > </ code > </ a > </ li >
903940< li > < a class ="reference internal " href ="#tilelang.transform.pass_config.PassConfigKey.TIR_SIMPLIFY "> < code class ="docutils literal notranslate "> < span class ="pre "> PassConfigKey.TIR_SIMPLIFY</ span > </ code > </ a > </ li >
0 commit comments