-
Notifications
You must be signed in to change notification settings - Fork 3.8k
Description
Expected Behavior
After building TVM 0.18.0 with LLVM 19.1.3, I expect TVM to generate RISC-V compatible code that executes without errors related to unsupported CPU types. The build should allow the execution of a basic TVM Python example on a Banana Pi K1 board, with the riscv64-linux-gnu target specified in the configuration.
Actual Behavior
Upon running a simple TVM example with LLVM 19.1.3 and TVM 0.18.0 on the Banana Pi K1, I encounter the following error message:
Unsupported CPU type!
UNREACHABLE executed at /home/jlei/llvm-project/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp:1080!In the TVM logs, there is also a warning that native vector bits are set to 128 for RISC-V, which could be relevant to the issue. The error persists despite multiple rebuilds of both LLVM and TVM, with adjusted configurations and target-specific flags to ensure compatibility with the RISC-V architecture on this board.
The error appears to stem from LLVM’s RuntimeDyldELF.cpp file, and recent threads, such as LLVM Issue #58652 and Halide Issue #7078, mention related problems that were resolved in newer LLVM releases, motivating my decision to upgrade from LLVM 15.0.7 to 19.1.3.
Environment
• Operating System: Banana Pi K1 OS (version 1.X, latest)
• LLVM Version: 19.1.3 (Default target: riscv64-linux-gnu; Host CPU: generic-rv64)
• TVM Version: 0.18.0
• Target Triple Configuration in TVM: "llvm -mtriple=riscv64-linux-gnu -mcpu=generic-rv64"
• Architecture Flags: -march=rv64gc -mabi=lp64d
• Other Configuration Flags:
• USE_LLVM set to "llvm-config --ignore-libllvm --link-static"
• GPU backends like CUDA, Vulkan, and OpenCL disabled.
• Set USE_TVM_RUNTIME ON, USE_PROFILER ON, USE_GRAPH_RUNTIME ON.
• Profiling, graph runtime, and relevant libraries enabled; unnecessary libraries like MKL and NNPACK disabled.
• Builds attempted with both RelWithDebInfo and Release build types.
Steps to Reproduce
1. Compile LLVM 19.1.3 with the following configurations:
• Ensure the riscv64-linux-gnu target is specified explicitly during the build.
• Build LLVM with optimized settings, assertions enabled, and set default and target-specific flags for RISC-V compatibility.
2. Configure and build TVM 0.18.0:
• Specify the target triple as riscv64-linux-gnu.
• Set architecture flags for -march=rv64gc -mabi=lp64d.
• Disable unnecessary backends and enable LLVM and RISC-V-specific configurations.
• Ensure no additional RISC-V flags are set in the LLVM configuration to isolate any unsupported flag issues.
3. Run a simple TVM Python example (like matrix multiplication or a basic compute test) on the Banana Pi K1 with the above setup to trigger the CPU error.
Additional Notes and Troubleshooting
• I have attempted multiple builds of LLVM and TVM with minimal changes each time to pinpoint the issue.
• Cross-referencing with related issues, like [LLVM Issue #58652](https://github.com/llvm/llvm-project/issues/58652), suggests this might be linked to incomplete support for specific RISC-V targets or configurations.
• Despite the “Unsupported CPU” error, Python finishes the TVM script execution, but the generated LLVM code fails to execute.
• Notably, the error does not occur when using an older LLVM version (15.0.7), although it cannot produce LLVM code properly for the required RISC-V target.