FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

LLVM13からRISC-Vのベクトル拡張のサポートが本格的に入るらしい?

こちらの記事を読んで、LLVMのAutomatic Vectorizationが少しずつ使い物になっていることを知った。RISC-Vを例に採っているので、使えるようになっているのだろうか?

試してみようと思って手元にあるLLVM12のバイナリを動かしてみると、そもそも-riscv-vector-bits-minがサポートされていなかった。LLVM13からの新機能何だろうか?

LLVMの現在なmainブランチを観察してみると、確かにRISCVSubtarget.cppにベクトル拡張のオプションが入っている。これはいいな。ビルドしてみよう。

  • llvm/lib/Target/RISCV/RISCVSubtarget.cpp
static cl::opt<unsigned> RVVVectorBitsMax(
    "riscv-v-vector-bits-max",
    cl::desc("Assume V extension vector registers are at most this big, "
             "with zero meaning no maximum size is assumed."),
    cl::init(0), cl::Hidden);

static cl::opt<unsigned> RVVVectorBitsMin(
    "riscv-v-vector-bits-min",
    cl::desc("Assume V extension vector registers are at least this big, "
             "with zero meaning no minimum size is assumed."),
    cl::init(0), cl::Hidden);

static cl::opt<unsigned> RVVVectorLMULMax(
    "riscv-v-fixed-length-vector-lmul-max",
    cl::desc("The maximum LMUL value to use for fixed length vectors. "
             "Fractional LMUL values are not supported."),
    cl::init(8), cl::Hidden);