I have added a scheduling model for a RISC-V vector processor to LLVM. I have included the
SchedMachineModel definition in
llvm/lib/Target/RISCV/RISCV.td and added it to section
RISC-V processors supported as follows:
def : ProcessorModel<"vicuna", VicunaModel, [FeatureStdExtM, FeatureStdExtC, FeatureStdExtV]>;
I have then successfully built LLVM and Clang for RISC-V by using the cmake options
-DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS=clang -DLLVM_TARGETS_TO_BUILD=RISCV. The custom processor can be used with
llc as follows:
$ llc -mtriple riscv32 -mattr=+experimental-v -mcpu=vicuna ...
Clang also lists the custom processor as a supported CPU with following command:
$ clang -menable-experimental-extensions --target=riscv32 -print-supported-cpus --print-supported-cpus -mcpu=? clang version 14.0.0 (https://github.com/llvm/llvm-project.git 499f1ca79f232faae09b1793a994d1a22ba403cd) Target: riscv32 Thread model: posix InstalledDir: /home/michael/Documents/prog/riscv-llvm/build/bin Available CPUs for this target: generic-rv32 generic-rv64 rocket-rv32 rocket-rv64 sifive-7-rv32 sifive-7-rv64 sifive-e20 sifive-e21 sifive-e24 sifive-e31 sifive-e34 sifive-e76 sifive-s21 sifive-s51 sifive-s54 sifive-s76 sifive-u54 sifive-u74 vicuna Use -mcpu or -mtune to specify the target's processor. For example, clang --target=aarch64-unknown-linux-gui -mcpu=cortex-a35
However, when I attempt to actually select the custom processor via
-mtune, I get the following error for
$ clang -menable-experimental-extensions --target=riscv32 -march=rv32imcv0p10 -mcpu=vicuna ... clang: error: the clang compiler does not support '-mcpu=vicuna'
and the following error for
$ clang -menable-experimental-extensions --target=riscv32 -march=rv32imcv0p10 -mtune=vicuna ... error: unknown target CPU 'vicuna' note: valid target CPU values are: generic-rv32, rocket-rv32, sifive-7-rv32, sifive-e20, sifive-e21, sifive-e24, sifive-e31, sifive-e34, sifive-e76, generic, rocket, sifive-7-series
Why is that? What am I missing?
Thanks for any pointers!