zhanghaohit commented on a change in pull request #5842:
URL: https://github.com/apache/incubator-tvm/pull/5842#discussion_r443337640
##########
File path: src/tir/transforms/lower_tvm_builtin.cc
##########
@@ -86,16 +86,19 @@ class BuiltinLower : public StmtExprMutator {
op = stmt.as<AllocateNode>();
// Get constant allocation bound.
int64_t nbytes = GetVectorBytes(op->dtype);
- if (device_type_.defined()) {
- if (const auto* dev_type = device_type_.as<IntImmNode>()) {
- if (dev_type->value == kDLCPU) {
- int32_t constant_size = op->constant_allocation_size();
- if (constant_size > 0 && constant_size * nbytes <
runtime::kMaxStackAlloca) {
- return stmt;
- }
- }
- }
- }
+ // NOTE(zhanghao): remove special handling for kDLCPU
Review comment:
```bash
Traceback (most recent call last):
File "vta/tutorials/frontend/deploy_classification.py", line 210, in
<module>
params=params, target_host=env.target_host)
File
"/4pd/home/zhanghao/workspace/tvm-2/tvm/python/tvm/relay/build_module.py", line
251, in build
graph_json, mod, params = bld_mod.build(mod, target, target_host, params)
File
"/4pd/home/zhanghao/workspace/tvm-2/tvm/python/tvm/relay/build_module.py", line
120, in build
self._build(mod, target, target_host)
File "tvm/_ffi/_cython/./packed_func.pxi", line 321, in
tvm._ffi._cy3.core.PackedFuncBase.__call__
File "tvm/_ffi/_cython/./packed_func.pxi", line 256, in
tvm._ffi._cy3.core.FuncCall
File "tvm/_ffi/_cython/./packed_func.pxi", line 245, in
tvm._ffi._cy3.core.FuncCall3
File "tvm/_ffi/_cython/./base.pxi", line 160, in tvm._ffi._cy3.core.CALL
tvm._ffi.base.TVMError: Traceback (most recent call last):
[bt] (8)
/4pd/home/zhanghao/workspace/tvm-2/tvm/build/libtvm.so(TVMFuncCall+0x4c)
[0x7f385ac9bc1c]
[bt] (7)
/4pd/home/zhanghao/workspace/tvm-2/tvm/build/libtvm.so(std::_Function_handler<void
(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*),
tvm::relay::backend::RelayBuildModule::GetFunction(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&,
tvm::runtime::ObjectPtr<tvm::runtime::Object>
const&)::{lambda(tvm::runtime::TVMArgs,
tvm::runtime::TVMRetValue*)#3}>::_M_invoke(std::_Any_data const&,
tvm::runtime::TVMArgs&&, tvm::runtime::TVMRetValue*&&)+0x316) [0x7f385ab2a566]
[bt] (6)
/4pd/home/zhanghao/workspace/tvm-2/tvm/build/libtvm.so(tvm::relay::backend::RelayBuildModule::BuildRelay(tvm::IRModule,
std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >, tvm::runtime::NDArray,
std::hash<std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > >,
std::allocator<std::pair<std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const, tvm::runtime::NDArray> >
> const&)+0xe31) [0x7f385ab29c11]
[bt] (5)
/4pd/home/zhanghao/workspace/tvm-2/tvm/build/libtvm.so(tvm::build(tvm::Map<tvm::runtime::String,
tvm::IRModule, void, void> const&, tvm::Target const&)+0x3c4) [0x7f385a4322d4]
[bt] (4)
/4pd/home/zhanghao/workspace/tvm-2/tvm/build/libtvm.so(tvm::build(tvm::Map<tvm::Target,
tvm::IRModule, void, void> const&, tvm::Target const&)+0x326) [0x7f385a4318c6]
[bt] (3)
/4pd/home/zhanghao/workspace/tvm-2/tvm/build/libtvm.so(tvm::codegen::Build(tvm::IRModule,
tvm::Target const&)+0x67a) [0x7f385a74f68a]
[bt] (2)
/4pd/home/zhanghao/workspace/tvm-2/tvm/build/libtvm.so(+0x1277ea1)
[0x7f385ac7eea1]
[bt] (1)
/4pd/home/zhanghao/workspace/tvm-2/tvm/build/libtvm.so(tvm::codegen::LLVMModuleNode::Init(tvm::IRModule
const&, std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >)+0x1388) [0x7f385ac82c68]
[bt] (0)
/4pd/home/zhanghao/workspace/tvm-2/tvm/build/libtvm.so(+0x1276a57)
[0x7f385ac7da57]
File
"/4pd/home/zhanghao/workspace/tvm-2/tvm/src/target/llvm/llvm_module.cc", line
230
TVMError: LLVM module verification failed with the following errors:
Call parameter type does not match function signature!
%.sub = getelementptr inbounds [4 x <8 x float>], [4 x <8 x float>]* %3,
i64 0, i64 0
i8* %34 = call i8* @VTABufferCPUPtr(i8* %17, <8 x float>* nonnull %.sub)
Call parameter type does not match function signature!
%.sub = getelementptr inbounds [8 x float], [8 x float]* %3, i64 0, i64 0
i8* %31 = call i8* @VTABufferCPUPtr(i8* %14, float* nonnull %.sub)
```
The raise error is due to the LLVM code here (lib/IR/Verifier.cpp):
```{.c++ filename="lib/IR/Verifier.cpp"}
2598 // Verify that all arguments to the call match the function type.
2599 for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i)
2600 Assert(CS.getArgument(i)->getType() == FTy->getParamType(i),
2601 "Call parameter type does not match function signature!",
2602 CS.getArgument(i), FTy->getParamType(i), I);
```
It will raise this error if the special handling for kDLCPU is there. I
think it is because the signature for the AllocateNode is not consistent with
the parameter? Any ideas about alternative fix?
----------------------------------------------------------------
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.
For queries about this service, please contact Infrastructure at:
[email protected]