Consider the following example:
def test_generate_zero_extent_loop():
ib = tvm.ir_builder.create()
m = tvm.var('m')
n = tvm.var('n')
with ib.for_range(0, 16, "i") as i:
with ib.if_scope(ib.likely(i>0)):
with ib.if_scope(ib.likely(i<7)):
ib.emit(tvm.make.Evaluate(m))
stmt = ib.get()
print("==================================")
print(stmt)
stmt = tvm.ir_pass.LoopPartition(stmt, True)
print("==================================")
print(stmt)
stmt = tvm.ir_pass.Simplify(stmt)
print("==================================")
print(stmt)
In this case, LoopPartition gives the following output after the Simplify pass:
0
for (i, 0, 6) {
m
}
for (i, 0, 0) {
m
}
for (i, 0, 9) {
0
}
Dead zero extent loops can be removed from RemoveNoOp pass if functionality for that is added.