@@ -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