Skip to content

[Bug] Unable to build TVM with LLVM 19 #17140

@mshr-h

Description

@mshr-h

I attempted to build TVM with LLVM 19 but failed with the following errors. I checked the LLVM docs and PRs and found that it seems like they dropped Module.h include during LLVM 19 development cycle which caused the error. I'll send the PR to fix it.
llvm/llvm-project#96892
https://llvm.org/doxygen/classllvm_1_1Module.html

Expected behavior

TVM successfully compiles

Actual behavior

Got the below error message.

FAILED: CMakeFiles/tvm_objs.dir/src/target/llvm/codegen_amdgpu.cc.o 
ccache /usr/bin/c++ -DDMLC_USE_FOPEN64=0 -DDMLC_USE_LOGGING_LIBRARY="<tvm/runtime/logging.h>" -DNDEBUG=1 -DTVM_INDEX_DEFAULT_I64=1 -DTVM_LLVM_HAS_AARCH64_TARGET=1 -DTVM_LLVM_VERSION=190 -DTVM_LOG_DEBUG -DTVM_THREADPOOL_USE_OPENMP=0 -DTVM_USE_LIBBACKTRACE=1 -DUSE_FALLBACK_STL_MAP=0 -DUSE_MICRO_STANDALONE_RUNTIME=1 -DUSE_RELAY_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DDMLC_ENABLE_RTTI=0 -I/home/ubuntu/data/sandbox/_dep/tvm/include -I/home/ubuntu/data/sandbox/_dep/tvm/build/libbacktrace/include -I/home/ubuntu/data/sandbox/_dep/tvm/3rdparty/libcrc/include -isystem /home/ubuntu/data/sandbox/_dep/tvm/3rdparty/dlpack/include -isystem /home/ubuntu/data/sandbox/_dep/tvm/3rdparty/dmlc-core/include -isystem /home/ubuntu/data/sandbox/_dep/tvm/3rdparty/rang/include -isystem /home/ubuntu/data/sandbox/_dep/tvm/3rdparty/compiler-rt -isystem /home/ubuntu/data/sandbox/_dep/tvm/3rdparty/picojson -isystem /home/ubuntu/data/source/llvm-project/llvm/include -isystem /home/ubuntu/data/source/llvm-project/build/include -std=c++17 -faligned-new -O2 -Wall -fPIC  -fno-rtti -MD -MT CMakeFiles/tvm_objs.dir/src/target/llvm/codegen_amdgpu.cc.o -MF CMakeFiles/tvm_objs.dir/src/target/llvm/codegen_amdgpu.cc.o.d -o CMakeFiles/tvm_objs.dir/src/target/llvm/codegen_amdgpu.cc.o -c /home/ubuntu/data/sandbox/_dep/tvm/src/target/llvm/codegen_amdgpu.cc
/home/ubuntu/data/sandbox/_dep/tvm/src/target/llvm/codegen_amdgpu.cc: In function ‘tvm::runtime::Module tvm::codegen::BuildAMDGPU(tvm::IRModule, tvm::Target)’:
/home/ubuntu/data/sandbox/_dep/tvm/src/target/llvm/codegen_amdgpu.cc:274:9: error: invalid use of incomplete type ‘class llvm::Module’
  274 |     mlib->setTargetTriple(llvm_target->GetTargetTriple());
      |         ^~
In file included from /home/ubuntu/data/source/llvm-project/llvm/include/llvm/IR/Argument.h:18,
                 from /home/ubuntu/data/source/llvm-project/llvm/include/llvm/IR/Function.h:25,
                 from /home/ubuntu/data/sandbox/_dep/tvm/src/target/llvm/codegen_amdgpu.cc:29:
/home/ubuntu/data/source/llvm-project/llvm/include/llvm/IR/Value.h:47:7: note: forward declaration of ‘class llvm::Module’
   47 | class Module;
      |       ^~~~~~
/home/ubuntu/data/sandbox/_dep/tvm/src/target/llvm/codegen_amdgpu.cc:275:9: error: invalid use of incomplete type ‘class llvm::Module’
  275 |     mlib->setDataLayout(tm->createDataLayout());
      |         ^~
/home/ubuntu/data/source/llvm-project/llvm/include/llvm/IR/Value.h:47:7: note: forward declaration of ‘class llvm::Module’
   47 | class Module;
      |       ^~~~~~
/home/ubuntu/data/sandbox/_dep/tvm/src/target/llvm/codegen_amdgpu.cc:277:34: error: invalid use of incomplete type ‘class llvm::Module’
  277 |     for (llvm::Function& f : mlib->functions()) {
      |                                  ^~
/home/ubuntu/data/source/llvm-project/llvm/include/llvm/IR/Value.h:47:7: note: forward declaration of ‘class llvm::Module’
   47 | class Module;
      |       ^~~~~~
/home/ubuntu/data/sandbox/_dep/tvm/src/target/llvm/codegen_amdgpu.cc:289:9: error: invalid use of incomplete type ‘class llvm::Module’
  289 |   module->print(dest_ll, nullptr);
      |         ^~
/home/ubuntu/data/source/llvm-project/llvm/include/llvm/IR/Value.h:47:7: note: forward declaration of ‘class llvm::Module’
   47 | class Module;
      |       ^~~~~~
In file included from /usr/include/c++/13/memory:78,
                 from /home/ubuntu/data/source/llvm-project/llvm/include/llvm/ADT/SmallVector.h:28,
                 from /home/ubuntu/data/source/llvm-project/llvm/include/llvm/ADT/SmallString.h:17,
                 from /home/ubuntu/data/sandbox/_dep/tvm/src/target/llvm/codegen_amdgpu.cc:26:
/usr/include/c++/13/bits/unique_ptr.h: In instantiation of ‘void std::default_delete<_Tp>::operator()(_Tp*) const [with _Tp = llvm::Module]’:
/usr/include/c++/13/bits/unique_ptr.h:404:17:   required from ‘std::unique_ptr<_Tp, _Dp>::~unique_ptr() [with _Tp = llvm::Module; _Dp = std::default_delete<llvm::Module>]’
/home/ubuntu/data/sandbox/_dep/tvm/src/target/llvm/codegen_amdgpu.cc:273:62:   required from here
/usr/include/c++/13/bits/unique_ptr.h:97:23: error: invalid application of ‘sizeof’ to incomplete type ‘llvm::Module’
   97 |         static_assert(sizeof(_Tp)>0,
      |                       ^~~~~~~~~~~
/home/ubuntu/data/sandbox/_dep/tvm/src/target/llvm/codegen_amdgpu.cc: In member function ‘virtual llvm::Value* tvm::codegen::CodeGenAMDGPU::CreateStorageSync(const tvm::tir::CallNode*)’:
/home/ubuntu/data/sandbox/_dep/tvm/src/target/llvm/codegen_amdgpu.cc:205:3: warning: control reaches end of non-void function [-Wreturn-type]
  205 |   }
      |   ^
In file included from /home/ubuntu/data/sandbox/_dep/tvm/include/tvm/tir/stmt_functor.h:31,
                 from /home/ubuntu/data/sandbox/_dep/tvm/src/target/llvm/codegen_llvm.h:61,
                 from /home/ubuntu/data/sandbox/_dep/tvm/src/target/llvm/codegen_amdgpu.cc:55:
/home/ubuntu/data/sandbox/_dep/tvm/include/tvm/tir/expr_functor.h: In member function ‘R tvm::tir::ExprFunctor<R(const tvm::PrimExpr&, Args ...)>::VisitExprDefault_(const tvm::runtime::Object*, Args ...) [with R = llvm::Value*; Args = {}]’:
/home/ubuntu/data/sandbox/_dep/tvm/include/tvm/tir/expr_functor.h:154:48: warning: control reaches end of non-void function [-Wreturn-type]
  154 |     LOG(FATAL) << "Do not have a default for " << op->GetTypeKey();
      |                                                ^
ninja: build stopped: subcommand failed.

Environment

  • TVM@0fc047c98b1ebf730b8c9aad8b94ddac28a7b34b
  • LLVM@4a9dabee73f79974c69a35af7668c7a7e52e2d7f

Steps to reproduce

Build TVM with LLVM.

Triage

  • backend: rocm

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs-triagePRs or issues that need to be investigated by maintainers to find the right assignees to address ittype: bug

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions