From 53b7ae3e4040cb1f41e12547dd5eba9133240df6 Mon Sep 17 00:00:00 2001 From: Junru Shao Date: Sat, 19 Aug 2023 20:32:11 -0700 Subject: [PATCH] [Runtime] Enhance PackedFunc Metaprogramming with `PackArgs` This PR introduces a convenient method `PackArgs` that allows packing variadic C++ parameters into TVM's PackedFunc calling convention without recursion using C++ parameter pack tricks. As an example, ```C++ template void MyVariadicMethod(Args&&... args) { constexpr int kNumArgs = sizeof...(Args); TVMValue values[kNumArgs]; int type_codes[kNumArgs]; tvm::runtime::PackArgs(values, type_codes, std::forward(args)...); ... } ``` --- include/tvm/runtime/packed_func.h | 55 ++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 11 deletions(-) diff --git a/include/tvm/runtime/packed_func.h b/include/tvm/runtime/packed_func.h index 660c24284b8d..655325ebe190 100644 --- a/include/tvm/runtime/packed_func.h +++ b/include/tvm/runtime/packed_func.h @@ -1284,13 +1284,27 @@ namespace parameter_pack { template struct EnumeratedParamPack { - struct Invoke { - template