こちらの記事を読んで、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);