MichaelJKlaiber opened a new issue, #16224:
URL: https://github.com/apache/tvm/issues/16224

   T.if_then_else vanishes after blockize
   
   ```
   from tvm.script import tir as T
   from tvm import tir
   from tvm.ir import IRModule   
   
   @T.prim_func
   def func(A: T.Buffer((128, 129), "float32"), B: T.Buffer((128, 129), 
"float32")):
       for i, j in T.grid(128, 129):
           with T.block("B"):
               vi, vj = T.axis.remap("SS", [i, j])
               B[vi, vj] = T.if_then_else(vj<129, A[vi, vj] * 2.0, 0, 
dtype="int32")
               
       
       
   sch = tir.Schedule(func)
   i, j = sch.get_loops(sch.get_block("B"))
   print(sch.mod)
   sch.blockize(j)
   print(sch.mod)
   
   ```
   
   ### Expected behavior
   
   ```
   # from tvm.script import ir as I
   # from tvm.script import tir as T
   
   @I.ir_module
   class Module:
       @T.prim_func
       def main(A: T.Buffer((128, 129), "float32"), B: T.Buffer((128, 129), 
"float32")):
           T.func_attr({"global_symbol": "func"})
           # with T.block("root"):
           for i in range(128):
               with T.block("B_o"):
                   vi_o = T.axis.spatial(128, i)
                   vj_o = T.axis.spatial(1, 0)
                   T.reads(A[vi_o, 0:129])
                   T.writes(B[vi_o, 0:129])
                   for j in range(129):
                       with T.block("B"):
                           vj_i = T.axis.spatial(129, j)
                           T.reads(A[vi_o, vj_i])
                           T.writes(B[vi_o, vj_i])
                           B[vi, vj] = T.if_then_else(vj < 129, A[vi, vj] * 
T.float32(2), T.float32(0))
   ```
   ### Actual behavior
   
   ```
   @I.ir_module
   class Module:
       @T.prim_func
       def main(A: T.Buffer((128, 129), "float32"), B: T.Buffer((128, 129), 
"float32")):
           T.func_attr({"global_symbol": "func"})
           # with T.block("root"):
           for i in range(128):
               with T.block("B_o"):
                   vi_o = T.axis.spatial(128, i)
                   vj_o = T.axis.spatial(1, 0)
                   T.reads(A[vi_o, 0:129])
                   T.writes(B[vi_o, 0:129])
                   for j in range(129):
                       with T.block("B"):
                           vj_i = T.axis.spatial(129, j)
                           T.reads(A[vi_o, vj_i])
                           T.writes(B[vi_o, vj_i])
                           B[vi_o, vj_i] = A[vi_o, vj_i] * T.float32(2)
   ```
   
   ### Environment
   
   main a9fcac1a47f4b57c1d9d828c7ed1d77452b02cc5
   Dec10 23
   
   
   ### Steps to reproduce
   
   ```
   from tvm.script import tir as T
   from tvm import tir
   from tvm.ir import IRModule   
   
   @T.prim_func
   def func(A: T.Buffer((128, 129), "float32"), B: T.Buffer((128, 129), 
"float32")):
       for i, j in T.grid(128, 129):
           with T.block("B"):
               vi, vj = T.axis.remap("SS", [i, j])
               B[vi, vj] = T.if_then_else(vj<129, A[vi, vj] * 2.0, 0, 
dtype="int32")
               
       
       
   sch = tir.Schedule(func)
   i, j = sch.get_loops(sch.get_block("B"))
   print(sch.mod)
   sch.blockize(j)
   print(sch.mod)
   
   ```
   
   Output:
   ```
   # from tvm.script import ir as I
   # from tvm.script import tir as T
   
   @I.ir_module
   class Module:
       @T.prim_func
       def main(A: T.Buffer((128, 129), "float32"), B: T.Buffer((128, 129), 
"float32")):
           T.func_attr({"global_symbol": "func"})
           # with T.block("root"):
           for i, j in T.grid(128, 129):
               with T.block("B"):
                   vi, vj = T.axis.remap("SS", [i, j])
                   T.reads(A[vi, vj])
                   T.writes(B[vi, vj])
                   B[vi, vj] = T.if_then_else(vj < 129, A[vi, vj] * 
T.float32(2), T.float32(0))
   # from tvm.script import ir as I
   # from tvm.script import tir as T
   
   @I.ir_module
   class Module:
       @T.prim_func
       def main(A: T.Buffer((128, 129), "float32"), B: T.Buffer((128, 129), 
"float32")):
           T.func_attr({"global_symbol": "func"})
           # with T.block("root"):
           for i in range(128):
               with T.block("B_o"):
                   vi_o = T.axis.spatial(128, i)
                   vj_o = T.axis.spatial(1, 0)
                   T.reads(A[vi_o, 0:129])
                   T.writes(B[vi_o, 0:129])
                   for j in range(129):
                       with T.block("B"):
                           vj_i = T.axis.spatial(129, j)
                           T.reads(A[vi_o, vj_i])
                           T.writes(B[vi_o, vj_i])
                           B[vi_o, vj_i] = A[vi_o, vj_i] * T.float32(2)
   ```
   
   ### Triage
   
   
   * tir
   * tir:schedule
   * tir: transform
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to