Skip to content

[Bug] Unsupported CPU on SpacemiT K1 Otca-core X60(RV64GCVB),RVA22, #17508

@JieGH

Description

@JieGH

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.

Metadata

Metadata

Assignees

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