Compiling error for a simple take op with FirstOrderGradient

my code to create take op relay

def CreateTake(optype, dimA, dimB):

indices = relay.var("indices", shape=dimA, dtype='int32')

embeddings = relay.var("embeddings", shape=dimB, dtype=optype)

axis_to_fill = 0

takenode = relay.take(embeddings, indices, axis_to_fill)

func = relay.Function([embeddings, indices], takenode)

IR_mod = tvm.IRModule.from_expr(func)

irmod = tvm.relay.transform.InferType()(IR_mod)

irmod = tvm.relay.transform.FirstOrderGradient()(irmod)

# irmod = tvm.relay.transform.gradient(irmod["main"])

print(irmod["main"])

return irmod

then I used “c” to compile it

target = "c"

with tvm.transform.PassContext(opt_level=0):
    lib = relay.build(module, target)

Got error

4: tvm::relay::dyn::StridedSliceCompute(tvm::Attrs const&, tvm::runtime::Array<tvm::te::Tensor, void> const&, tvm::Type const&) at /home/ddu/work/tvm/include/tvm/runtime/packed_func.h:1646 3: tvm::topi::dynamic_strided_slice(tvm::te::Tensor const&, tvm::te::Tensor const&, tvm::te::Tensor const&, tvm::te::Tensor const&, std::__cxx11::basic_string<char, std::char_traits, std::allocator >, std::__cxx11::basic_string<char, std::char_traits, std::allocator >) at /home/ddu/work/tvm/src/relay/op/dyn/tensor/transform.cc:505 2: tvm::topi::dynamic_strided_slice(tvm::te::Tensor const&, tvm::runtime::Array<tvm::PrimExpr, void> const&, tvm::runtime::Array<tvm::PrimExpr, void> const&, tvm::runtime::Array<tvm::PrimExpr, void> const&, std::__cxx11::basic_string<char, std::char_traits, std::allocator >, std::__cxx11::basic_string<char, std::char_traits, std::allocator >) at /home/ddu/work/tvm/include/tvm/topi/transform.h:729 1: tvm::indexdiv(tvm::PrimExpr, tvm::PrimExpr, tvm::Span) at /home/ddu/work/tvm/include/tvm/topi/transform.h:672 0: tvm::floordiv(tvm::PrimExpr, tvm::PrimExpr, tvm::Span) at /home/ddu/work/tvm/src/tir/op/op.cc:384 File “/home/ddu/work/tvm/src/tir/op/op.cc”, line 396 at /home/ddu/work/tvm/src/tir/op/op.cc:396 TVMError:

An error occurred during the execution of TVM. For more information, please see: Handle TVM Errors — tvm 0.13.dev0 documentation

Check failed: (b.dtype().is_int() || b.dtype().is_uint()) is false: placeholder[(int64)0]

Seems sth related to dyn.strided_slice op (second parameter is float32?)

I don’t think this code path is well maintained at the moment. Based on the PRs, I believe most of the effort on high-level IR has been around Relax in the unity branch.