From 6e6e9121ca5d6c63f24b1d596cd13662fdb54aa3 Mon Sep 17 00:00:00 2001 From: Jiahan Xie <765130715@qq.com> Date: Mon, 11 Dec 2023 13:45:13 -0500 Subject: [PATCH 01/19] first draft of the report for the final project --- .../blog/2023-12-11-rvv-llvm-gisel/index.md | 177 ++++++++++++++++++ .../2023-12-11-rvv-llvm-gisel/pipeline.png | Bin 0 -> 267556 bytes .../2023-12-11-rvv-llvm-gisel/vec-regs.png | Bin 0 -> 215811 bytes 3 files changed, 177 insertions(+) create mode 100644 content/blog/2023-12-11-rvv-llvm-gisel/index.md create mode 100644 content/blog/2023-12-11-rvv-llvm-gisel/pipeline.png create mode 100644 content/blog/2023-12-11-rvv-llvm-gisel/vec-regs.png diff --git a/content/blog/2023-12-11-rvv-llvm-gisel/index.md b/content/blog/2023-12-11-rvv-llvm-gisel/index.md new file mode 100644 index 000000000..1db1d7f5d --- /dev/null +++ b/content/blog/2023-12-11-rvv-llvm-gisel/index.md @@ -0,0 +1,177 @@ ++++ +title = "Support LLVM GlobalISel for RISC-V Vector Extension on Partial ALU Instructions" +[extra] +bio = """ + Jiahan Xie is a first-year CS MS student at Cornell whose interests lie in Compilers and Computer Architecture. + + Michael Maitland was a student in Cornell CS 6120 Advanced Compilers and he's now working at SiFive. +""" +[[extra.authors]] +name = "Jiahan Xie" +[[extra.authors]] +name = "Michael Maitland" ++++ + +# Introduction + +The open [RISC-V instruction set architecture (ISA)](https://riscv.org/technical/specifications/) has an interesting extension, [the RISC-V "V" Vector Extension](https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc). The unique part of RISC-V Vector Extension is that its vector registers have flexible widths, VLEN, which makes programming in RISC-V Vector Extension agnostic to the vector register sizes. This feature really distinguishes the RISC-V Vector Extension from the traditional SIMD extensions, such as [x86 SSE](https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions) (with a fixed size 128-bit vector length)/[AVX](https://en.wikipedia.org/wiki/Advanced_Vector_Extensions) (256-bit), and [Arm NEON](https://developer.arm.com/Architectures/Neon) (128-bit). The increasing vector lengths can pose a challenge to the traditional SIMD extensions as they have to address compatability and support all existing fixed size vector lengths in their ISAs. On the contrary, with the vector lengths agnostic principles, binary code generated by RISC-V assembly is automatically portable between different CPUs. + +# What Was the Goal? +The goal was to support LLVM Global Instruction Selection for RISC-V Vector Extensions on some ALU operations, such as `vadd`, `vsub`, `vand`, `vor`, and `vxor`. + + +# A Primer on the RISC-V Vector Extension +There are a lot of instructions and cool features in the [RISC-V "V" Vector Extension Spec](https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc), I will only pick the most relevant and important parts to explain. + +The most important parameters are undoubtly `SEW`, `VLEN`, `VL`, and `LMUL`; and one of the most interesting and powerful instructions is `vset{i}vl{i}`. + +Let's begin with the crucial parameters: +- `SEW`: Selected Element Width (in bits), set dynamically by the programmers. It sets the width/length of a single element in a vector element. Each vector element can compose multiple single element. +- `VLEN`: Vector register LENgth (in bits). The number of bits in a single vector register. It is hardware dependent. +- `VL`: Vector element Length (in bits) that the programmers actually deal with, which can be treated as the vector operation building blocks. It defines how many elements the vector operations will execute. +- `LMUL`: The vector Length MULtiplier. It is used for grouping vector registers. It is a power of 2 and it ranges from 1/8 to 8. For instance, when `LMUL=8`, only `v0`, `v8`, `v16`, and `v24` indices are allowed to used, as for example, group `v8` encodes 8 vector elments `v8v9`...`v15`. Note it can also be fraction numbers because sometimes we want to use only parts of the vector registers. + +After introducing these basic and the most important parameters, there are still two paramters we will be dealing with, `AVL` and `VLMAX`: +- `AVL`: Application Vector Length. The application specifies the total number of elements to be processed as a candidate for `VL`. +- `VLMAX`: MAX Vector Length. Although programmers can dynamically select vector register lengths, they cannot be set to arbitrary numbers because they might be larger than the hardware constraints, which is imposed by `VLMAX`. Specifically, `VLMAX=(LMUL × VLEN) / SEW`. For example, if the length of a single basic elment is 32 bit, and this specific hardware supports `VLEN`=256 bit, there are 8 basic blocks in a vector element. And we want to group every `LMUL`=2 vector elements, `VLMAX`=4. As a result, the actual value `VL` is the smaller value of the desired application vector length `AVL` and the vector length value constrained by the hardware `VLMAX`: `VL = min(AVL, VLMAX)`. + +The visualization of vector registers is shown below: ![](vec-regs.png) + +One of the most interesting instruction is `vset{i}vl{i}`, which allow rapid configuration. The `vset{i}vl{i}` instructions set the `vtype` and `VL` based on arguments, and write the new value of `VL` into `rd`. Take `vsetvli` as an example, the spec of `vsetvli` is: +``` +vsetvli rd, rs1, vtypei # rd = new vl, rs1 = AVL, vtypei = new vtype setting +``` + +Say we have a `vsetvli` instruction: +``` +vsetvli t0, a0, e64, m2, ta, ma +``` +The SEW is therefore 64-bit (`e64`); the vector length multiplier is 2 (`m2`); the `AVL` is held in `a0`; the new `VL = min(AVL, VLMAX)` is stored in `t0`; the tail and mask policy is tail agnostic (`ta`) and mask agnostic (`ma`), which is not our concern in this blog. + +# A Primer on LLVM Global Instruction Selection +LLVM Global Instruction Selection ([GlobalISel](https://llvm.org/docs/GlobalISel/index.html)) is a framework that provides a set of reusable passes and utilities for instruction selection — translation from LLVM IR to target-specific Machine IR (MIR). It is "global" in the sense that it operates on the whole function rather than a single basic block. + +GlobalISel is intended to be a replacement for [SelectionDAG](https://llvm.org/docs/CodeGenerator.html#introduction-to-selectiondags) and [FastISel](https://llvm.org/doxygen/classllvm_1_1FastISel.html), to solve performance, granularity, and modularity problems. GlobalISel does not need to introduce a new dedicated IR as in SelectionDAG so GlobalISel can provide faster code generation; GlobalISel operates on a function, whereas SelectionDAG only considers a basic block, losing some global optimization opportunities; in addition, GlobalISel enables more code reuse for instruction selection for different targets. + +[The pipeline of GlobalISel](https://llvm.org/docs/GlobalISel/Pipeline.html#pipeline) composes of four major passes: +1. [IRTranslate](https://llvm.org/docs/GlobalISel/IRTranslator.html): Converts LLVM IR into [Generic MachineIR (gMIR)](https://llvm.org/docs/GlobalISel/GMIR.html), which has the same data strucures as [MachineIR](https://llvm.org/docs/MIRLangRef.html) but is less constrained. The constraints will be incrementally enforced along with the pipeline, transforming gMIR to MIR in the end. +2. [Legalize](https://llvm.org/docs/GlobalISel/Legalizer.html): This pass replaces unsupported operations with supported ones. So there will be no illegal instructions after this step. +3. [Register Bank Select](https://llvm.org/docs/GlobalISel/RegBankSelect.html): This pass assigns the corresponding [Register Banks](https://llvm.org/docs/GlobalISel/GMIR.html#gmir-regbank) to the [generic virtual registers](https://llvm.org/docs/GlobalISel/GMIR.html#gmir-gvregs) in the gMIR. In essence, Register Bank is a framework for grouping and managing different sets of registers in a target architecture. +4. [Instruction Select](https://llvm.org/docs/GlobalISel/InstructionSelect.html): This is the final pass, it selects target MIR instructions based on the gMIR instructions. As mentioned above, the gMIR has been constrained enough that it becomes MIR at this point. + +A visualization of the pipeline is shown below: ![](pipeline.png) + +Please note that Combiner is not in the scope of this blog. + +# What Did I Do? +Let's start with a minimum code generation example that we want to support in LLVM GlobalISel: +``` +define @vadd_vv_nxv1i8( %va, %b) { + %vc = add %va, %vb + ret %vc +} +``` +Here, we define a vector-vector add function that takes in two vector arguments, and returns the sum. For the background knowledge of LLVM [vector types](https://llvm.org/docs/LangRef.html#vector-type), it has both fix-length vectors and scalable vectors. We will be focusing on scalable vectors not only because it's more complex and flexible, it also fits into our abovementioned discussion regarding flexible-widths RISC-V vector registers. The form of scalable vectors in LLVM is as follows: +``` + +``` +where `VF` is the vectorization/grouping factor, it specifies how many vector elements are there in this group; a primitive data type; and `vscale` is a constant multiple of the specified number of vector elements, and `vscale` is unknown at compile time. For example, `` represents a scalable vector, which is a multiple of 4 32-bit integer values. + + +Since there are four passes in the LLVM GlobalISel core pipeline, my design and implmentation are also based on these four passes. + +## IRTranslator +IRTranslator is the first pass of GlobalISel pipeline. The goal of this pass is to translate LLVM IR into gMIR. And the essential thing that is happening in this pass is call lowering according to the ABI rules of the target, which is RISC-V in our case. The proposal of vector calling convention can be found [here](https://github.com/riscv-non-isa/riscv-elf-psabi-doc/pull/389). + +If we recall our example, what we want to get out of the first pass is something like: +``` +%vc:_() = G_ADD %va:_(), %vb:_() +``` + +To achieve this, we need to first support parsing scalable vectors and to implement three main parts in call lowering, namely `lowerReturn`, `lowerFormalArguments`, and `lowerCall`. The functionalities of these three main parts are as what their names have suggested: +1. `lowerReturn` enables functions to return scalable vector types. To be specific, scalable vector types in the input LLVM IR programs can be lowered into physical vector registers MIR based on the RISC-V vector calling conventions for return instructions. To implement this, we just write a function that translate to a return MIR if the return value is a scalable vector. It used to fall back to SelectionDAG before we implement this, now we can directly enable it in GlobalISel. [This patch](https://github.com/llvm/llvm-project/pull/71587) implements this functionality. +2. `lowerFormalArguments` supports passing scalable vectors as arguments. We do it by implementing a function that takes in type information and returns true/false based on the type and other relevant information, such as if the target hardware supports vector instructions, and so forth. The existing argument-lowering function can take this as a helper function and enables passing scalable vectors as function arguments. [This patch](https://github.com/llvm/llvm-project/pull/70882) supports lowering formal arguments. +3. `lowerCall` is used to lower the given call instruction according to the ABI. + +## Legalizer +After the IRTranslator translates the input program written in LLVM IR into: +`%vc:_() = G_ADD %va:_(), %vb:_()`, we want to legalize all the types and operations. + +Before explaining our work, let's define what does "legal" mean in LLVM GlobalISel. An instruction is legal if the target (RISC-V in our case) will later be able to select it to a target-specific MIR instruction. + +Prior to our support, the `G_ADD` operation is legal but the scalable vectors as Low Level Types are illegal in GlobalISel, so we focused on legalizing the LLTs. Just as a note, [Low Level Type (LLT)](https://llvm.org/doxygen/classllvm_1_1LLT.html) is intended to replace the usage of Extended Vector Type (EVT) in SelectionDAG. LLTs are specified in terms of whether they are scalar or vector, and their widths; but they don't differentiate between integer and floating values. For example, `LLT s16` is simply defined as `LLT::scalar(16)`. For scalable vector types, if we want to define `nx4s32` (``), it's nothing but `LLT::scalable_vector(4, s32)`. + +Since we just brought up LLT, I'd like to introduce how to concretely associate the `VLEN`, `LMUL` things we discussed before with LLVM scalable vector types. Please note that as the date of this blog post, the LLVM community only has comprehensive support when `vscale == VLEN/64`, and that we only have partial support for `VLEN=32` using intrinsics when `vscale` is not used and there is no spill/reload of vectors. Supporting `VLEN=32` would require twice as many instruction selection patterns in `RISCVGenDAGISel.inc` which is already a very large table so the community hasn't done it. With that being said, I can present the chart of how RISC-V vector types are mapped to LLVM types for integers: +``` +LMUL +/ MF8 MF4 MF2 M1 M2 M4 M8 +SEW +i64 N/A N/A N/A nxv1i64 nxv2i64 nxv4i64 nxv8i64 +i32 N/A N/A nxv1i32 nxv2i32 nxv4i32 nxv8i32 nxv16i32 +i16 N/A nxv1i16 nxv2i16 nxv4i16 nxv8i16 nxv16i16 nxv32i16 +i8 nxv1i8 nxv2i8 nxv4i8 nxv8i8 nxv16i8 nxv32i8 nxv64i8 +``` +The complete chart can be found in [this `RISCV/RISCVRegisterInfo.td` file](https://github.com/llvm/llvm-project/blob/75d6795e420274346b14aca8b6bd49bfe6030eeb/llvm/lib/Target/RISCV/RISCVRegisterInfo.td). And note that `MF` stands for fractional `LMUL` and `M`s are integer `LMUL`s. + +Some values are `None` because currently RISC-V vectors assume `VLEN=64`. Take the combination (`MF8`, `i16`) as an example. If we were to write it in terms of LLVM scalable vectors, it would be `nx1/2i16` ((64 x 1/8) / 16 = 1/2), which is illegal. Now consider a legal (`LMUL`, `SEW`) combination: (`i32`, `M4`). Since `VLEN` = 64 and `SEW` = 32, there are 2 basic block elements in a single vector element. And since the grouping factor is 4, there are 2*4 = 8 multiples of elements, hence `nxv8i32 == `. + +The legal scalable vector types in the chart should all be legalized in the `legalize` pass. To implement this, we use the `getActionDefinitionsBuilder` function in [the `LegalizerInfo` class](https://llvm.org/doxygen/classllvm_1_1LegalizerInfo.html). In addition, we utilize [the `LegalityQuery` structure](https://llvm.org/doxygen/structllvm_1_1LegalityQuery.html) to query and filter the input LLTs. + +It is noteworthy that some target hardwares only support `ELEN` = 32; on the other hand, `nxv1i64`, `nxv2i64`, `nxv4i64`, and `nxv8i64` require `hasVInstructionsI64` as we want to support max 64-bit vector elements in these cases. For example, in [Zve, Vector Extensions for Embedded Processors](https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc#182-zve-vector-extensions-for-embedded-processors), `Zvex32` does not provide support for `SEW` = 64. To this end, we need to have extra separate files when the target hardwares are different, which will be discussed further in the evaluation part. + +[This patch](https://github.com/llvm/llvm-project/pull/71400) implements the legalize pass. + +## Register Bank Select +[RegisterBankSelector](https://llvm.org/docs/GlobalISel/RegBankSelect.html) essentially binds generic virtual registers to register banks. A virtual register, in LLVM, is a temporary, abstract placeholder representing a storage location that's not yet mapped to a specific physical hardware register. And generic virtual registers means they are virtual registers but yet have not assigned with Register Class constraints. Basically, Register Banks are sets of register classes defined by a target architecture, used to optimize register allocation by clustering related data into specific register files, thus minimizing data copying and accommodating operation-specific constraints. + +Therefore, the goal in this pass is to take the input as the results of the legalizer, `%vc:_() = G_ADD %va:_(), %vb:_()`, and assign register banks for the results and the operands. At the end of this pass, we expect to see `%vc:vrb() = G_ADD %va:vrb(), %vb:vrb()`, where `vrb` stands for vector register banks. Just to provide complete context and background information, there are three types of register banks in RISC-V: +- `GPRRegBank`: general purpose registers RegBank; +- `FPRRegBank`: floating point registers RegBank; +- `VRRegBank`: vector register RegBank. + +At the end of the day, to assign the instructions with proper register banks, we will utilize the function [`getInstructionMapping`](https://llvm.org/doxygen/classllvm_1_1RegisterBankInfo.html#a5b7e84a2ea3cdb118f44543cdb33f670) and call it on the opcodes we are working on. To make sure we are mapping our instructions to their correct register banks, we still need more helper functions to achieve that. + +Remarkably, we need a function to map operands values to register banks by using the [`ValueMapping` structure](https://llvm.org/doxygen/structllvm_1_1RegisterBankInfo_1_1ValueMapping.html). And we will create the mapping based on the size of the incoming operands. The rule here is we have 4 different sizes in the mapping for the 4 different integer `LMUL` register size cases. We pick based on the known minimum size of the register type, 64, 128, 256, and 512. We map any size less than 64 to 64 as well. And the reason being is `MF8`, `MF4`, and `MF2` have similar behaviors as `M1`; but `M2`, `M4`, and `M8` do not. Consider we have two instructions that use `vsetvli` to set `LMUL` to 1/2 (`MF2`) and 1 (`M1`) respectively. Assume we want to read a vector register in the first instruction. We can only read/extract the first half of that vector register, say `v1`, out of it since we have fractional `LMUL` `MF2`. In that sense, regardless of using `MF2` or `M1`, we are essentially using the whole registers so they all take one cycle to process even in the case of fractional `LMUL`s. However, if we set `LMUL` to 2, if we were reading `v1`, we end up reading a group of 2 registers: `{v1, v2}`. And this behavior is fundamentally different from the former case. + +## Instruction Select +Now that we have assigned the correct register banks, we are ready to implement the last pass, [InstructionSelect](https://llvm.org/docs/GlobalISel/InstructionSelect.html), to select the target MIR using the gMIR! + +Let's recall the result produced by the Register Bank Select pass: `%vc:vrb() = G_ADD %va:vrb(), %vb:vrb()`. We'd like to use the corresponding MIR of RISC-V vector add instruction to replace the generic add `G_ADD` instruction. Please note that I said "the corresponding MIR" because we will not be generating the actual RISC-V `vadd` or `vsetvli` in the current pass. It's because the process of instruction selection involves transforming code into target-specific MIR/machine instructions. Later down the pipeline, the `RISCVInsertVSETVLI` function, for example, will executed. Additionally, the `RISCVAsmPrinter` will translate MIR into MCInst at later stage, representing the final assembly language form. With that being said, what we actually want to get out of instruction selection pass is in this form: `%vc:vr = PseudoVADD_VV_MF8 %va, %vb, -1, 3 /* e8 */, 3 /* ta, ma */`, where `PseudoVADD_VV_MF8` is vector instruction pseudos for vector-vector add with `LMUL` = 1/8, the position where -1 stands is for the `VL` operand and -1 means `VLMAX`, the first 3 stands for `SEW` as log2(8) = 3, and the second 3 is the encoding for the policy tail agnostic and mask agnostic. RISC-V vector instruction pseudos in LLVM are essentially used for efficiently handling the complex, `vtype`-dependent behavior of vector instructions, such as in register allocation. + +Implementation-wise, the [`select` function](https://llvm.org/doxygen/classllvm_1_1InstructionSelector.html#a50058a922d4f75ed765c34742c5066c6) is invoked, which in turns call [the corresponding RISC-V `selectImpl` function](https://github.com/llvm/llvm-project/blob/d96f46dd20157be9c11e16d8bdd3ebf900df41fc/llvm/lib/Target/RISCV/GISel/RISCVInstructionSelector.cpp#L56). To achieve this final phase, there are essentially four steps to take. First is to identify the vectorized opcode/gMIR; then we create the lowered version of that gMIR using the vector instruction pseudos; and we need to erase the old instruction once the lowered version has been picked; finally we choose a register from the register bank. For this final phase in GlobalISel, LLVM TableGen might generate `selectImpl` and we can use it out-of-the-box; otherwise, we need to implement extra logics to customize the selection pass outlined above. Luckily, TableGen does pick up and we only need implement some helper functions to mesh everything together. + +[This patch](https://github.com/llvm/llvm-project/pull/74114) implements both Register Bank Select and Instruction Select passes. + + + + +# What Were the Hardest Parts? + +Definitely learning the whole LLVM and its GlobalISel infrastructure, and it was also hard to understand the vector length agnostic features/instructions in the RISC-V vector extension. + +LLVM is a huge project and it was hard to navigate at the beginning. They have the TableGen file, all the CodeGen GlobalISel source code, and the target-specific (RISC-V in our case) implementations. They also have all the regression tests infrastructure that I had to learn at the beggin. Besides, the GlobalISel infrastructure is also rather new and under active development as well. And since we are one of the earliest people start supporting RISC-V vector extension in LLVM GlobalISel, there had been some extensive research and discussion going on. And we didn't have that many existing work to refer to, so we had to start pretty much from scratch. My initial strategy was to look at AArch64 GlobalISel for their vectors because AArch64 is one of the pioneers in GlobalISel and their work is pretty mature. + +Learning the RISC-V vector extension was also a headache at the beginning because I had to figure out the difference between RISC-V vector extension with standard SIMD vector instructions. Learning the semantic meaning of `vsetvli`, differentiating the concepts of `ELEN`, `VLEN`, and how `SEW`, `LMUL`, `VLMAX` come into play was also confusing. + +# Were You Successful? + +This project is a success and we have become one of the first developers to support GlobalISel for the RISC-V vector extension. + +We evaluate our work using LLVM [Regression tests](https://llvm.org/docs/TestingGuide.html#regression-tests). The regression tests are driven by [lit](https://llvm.org/docs/CommandGuide/lit.html), LLVM Integrated Tester. Each pass of GlobalISel is testable (that's also one of the advantages of GlobalISel over SelectionDAG). The root test directory for RISC-V GlobalISel is located in [`llvm/test/CodeGen/RISCV/GlobalISel`](https://github.com/llvm/llvm-project/tree/main/llvm/test/CodeGen/RISCV/GlobalISel), in which it has `irtranslator`, `legalizer`, `regbankselect`, and `instruction-select` directories to test each pass. We first make sure that our implementation still pass all the existing regression tests. Then, we generate more regression test assertions using Python scripts `update_llc_test_checks.py` and `update_mir_test_checks.py` located under `llvm/utils/`. We test for every pass, for all the opcodes we intend to support, and for all the scalable vector `LLT` types available in the RISC-V vector extension. And as a result, we achieve 100% correctness. Although didn't "optimizie" anything explicitly, when I compare our GlobalISel outputs with the outputs from SelectionDAG, which is typically used as the ground truth for now, and they turn out to be the same, meaning we have an "optimal" code generation implementation. + +There are numerous benefits of this work. As we have mentioned before, GlobalISel is intended to replace SelectionDAG and FastISel to solve some major problems. Since GlobalISel operates on the whole function, supporting GlobalISel for RISC-V vector extension can allow for more efficient code generation globally tailored to the unique features of this extension, such as variable vector lengths and diverse operation types. GlobalISel also eliminates the use of dedicated IRs as in SelectionDAG, it streamlines the compilation process by providing this more unified and efficient approach to instruction selection, which can be particularly beneficial for the complex operations involved in vector processing. Last but not least, as GlobalISel is built in a way that enables code reuses, our work also provides a foundation of the framework that can be extended and customized for future work, enabling long term reusability and adaptability. + +# Future Work? + +It's absolutely been a fun and rewarding experience, and I plan to keep supporting more opcodes, such as vector load/store, in LLVM GlobalISel for the RISC-V vector extension. When more opcodes are supported and we are ready to write actual interesting high-level language programs, I will also try to write some, for example, C programs, and run them on simulators like [Spike](https://github.com/riscv-software-src/riscv-isa-sim). + + + + +# Reference +1. [Portability across Arm NEON and SVE vector instruction sets using the NSIMD library: a case study on a Seismic Spectral-Element kernel](https://hal.science/hal-03533584#:~:text=Traditional%20SIMD%20instruction%20sets%20like,%2Dbit%20for%20AVX%2D512.) +2. [RISC-V "V" Vector Extension Spec](https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc) +3. [Tutorial: RISC-V Vector Extension Demystified - 2020 RISC-V Summit](https://www.youtube.com/watch?v=oTaOd8qr53U) +4. [2017 LLVM Developers' Meeting: "GlobalISel: Past, Present, and Future"](https://www.llvm.org/devmtg/2017-10/#talk11) +5. [LLVM Global Instruction Selection](https://llvm.org/docs/GlobalISel/index.html) +6. [2023 EuroLLVM - Tutorial: GlobalISel by example](https://www.youtube.com/watch?v=PEP0DfAT_N8) \ No newline at end of file diff --git a/content/blog/2023-12-11-rvv-llvm-gisel/pipeline.png b/content/blog/2023-12-11-rvv-llvm-gisel/pipeline.png new file mode 100644 index 0000000000000000000000000000000000000000..d46242a5664f11fd361fbe8dfd3f6e3990373fd3 GIT binary patch literal 267556 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 oHFSgICr?VOT#46z^J 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 P@NskXa;f>t$&`NpVJ>+L literal 0 HcmV?d00001 From 67501e57c4937e3699b4a736f3f8f996a2e08db5 Mon Sep 17 00:00:00 2001 From: Jiahan Xie <765130715@qq.com> Date: Sun, 7 Jan 2024 09:43:21 +0800 Subject: [PATCH 02/19] fix some typo and wording --- content/blog/2023-12-11-rvv-llvm-gisel/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/blog/2023-12-11-rvv-llvm-gisel/index.md b/content/blog/2023-12-11-rvv-llvm-gisel/index.md index 1db1d7f5d..d86434453 100644 --- a/content/blog/2023-12-11-rvv-llvm-gisel/index.md +++ b/content/blog/2023-12-11-rvv-llvm-gisel/index.md @@ -33,11 +33,11 @@ Let's begin with the crucial parameters: After introducing these basic and the most important parameters, there are still two paramters we will be dealing with, `AVL` and `VLMAX`: - `AVL`: Application Vector Length. The application specifies the total number of elements to be processed as a candidate for `VL`. -- `VLMAX`: MAX Vector Length. Although programmers can dynamically select vector register lengths, they cannot be set to arbitrary numbers because they might be larger than the hardware constraints, which is imposed by `VLMAX`. Specifically, `VLMAX=(LMUL × VLEN) / SEW`. For example, if the length of a single basic elment is 32 bit, and this specific hardware supports `VLEN`=256 bit, there are 8 basic blocks in a vector element. And we want to group every `LMUL`=2 vector elements, `VLMAX`=4. As a result, the actual value `VL` is the smaller value of the desired application vector length `AVL` and the vector length value constrained by the hardware `VLMAX`: `VL = min(AVL, VLMAX)`. +- `VLMAX`: MAXimum Vector Length. Although programmers can dynamically select vector register lengths, they cannot be set to arbitrary numbers because they might be larger than the hardware constraints, which is imposed by `VLMAX`. Specifically, `VLMAX=(LMUL × VLEN) / SEW`. For example, if the length of a single basic elment is 32 bit, and this specific hardware supports `VLEN`=256 bit, there are 8 basic blocks in a vector element. And we want to group every `LMUL`=2 vector elements, `VLMAX`=4. As a result, the actual value `VL` is the smaller value of the desired application vector length `AVL` and the vector length value constrained by the hardware `VLMAX`: `VL = min(AVL, VLMAX)`. The visualization of vector registers is shown below: ![](vec-regs.png) -One of the most interesting instruction is `vset{i}vl{i}`, which allow rapid configuration. The `vset{i}vl{i}` instructions set the `vtype` and `VL` based on arguments, and write the new value of `VL` into `rd`. Take `vsetvli` as an example, the spec of `vsetvli` is: +One of the most interesting instructions is `vset{i}vl{i}`, which configures the vector length. The `vset{i}vl{i}` instructions set the `vtype` and `VL` based on arguments, and write the new value of `VL` into `rd`. Take `vsetvli` as an example, the spec of `vsetvli` is: ``` vsetvli rd, rs1, vtypei # rd = new vl, rs1 = AVL, vtypei = new vtype setting ``` @@ -136,7 +136,7 @@ Remarkably, we need a function to map operands values to register banks by using ## Instruction Select Now that we have assigned the correct register banks, we are ready to implement the last pass, [InstructionSelect](https://llvm.org/docs/GlobalISel/InstructionSelect.html), to select the target MIR using the gMIR! -Let's recall the result produced by the Register Bank Select pass: `%vc:vrb() = G_ADD %va:vrb(), %vb:vrb()`. We'd like to use the corresponding MIR of RISC-V vector add instruction to replace the generic add `G_ADD` instruction. Please note that I said "the corresponding MIR" because we will not be generating the actual RISC-V `vadd` or `vsetvli` in the current pass. It's because the process of instruction selection involves transforming code into target-specific MIR/machine instructions. Later down the pipeline, the `RISCVInsertVSETVLI` function, for example, will executed. Additionally, the `RISCVAsmPrinter` will translate MIR into MCInst at later stage, representing the final assembly language form. With that being said, what we actually want to get out of instruction selection pass is in this form: `%vc:vr = PseudoVADD_VV_MF8 %va, %vb, -1, 3 /* e8 */, 3 /* ta, ma */`, where `PseudoVADD_VV_MF8` is vector instruction pseudos for vector-vector add with `LMUL` = 1/8, the position where -1 stands is for the `VL` operand and -1 means `VLMAX`, the first 3 stands for `SEW` as log2(8) = 3, and the second 3 is the encoding for the policy tail agnostic and mask agnostic. RISC-V vector instruction pseudos in LLVM are essentially used for efficiently handling the complex, `vtype`-dependent behavior of vector instructions, such as in register allocation. +Let's recall the result produced by the Register Bank Select pass: `%vc:vrb() = G_ADD %va:vrb(), %vb:vrb()`. We'd like to use the corresponding MIR of RISC-V vector add instruction to replace the generic add `G_ADD` instruction. Please note that I said "the corresponding MIR" because we will not be generating the actual RISC-V `vadd` or `vsetvli` in the current pass. It's because the process of instruction selection involves transforming code into target-specific MIR/machine instructions. Later down the pipeline, the `RISCVInsertVSETVLI` function, for example, will execute. Additionally, the `RISCVAsmPrinter` will translate MIR into MCInst at later stage, representing the final assembly language form. With that being said, what we actually want to get out of instruction selection pass is in this form: `%vc:vr = PseudoVADD_VV_MF8 %va, %vb, -1, 3 /* e8 */, 3 /* ta, ma */`, where `PseudoVADD_VV_MF8` is vector instruction pseudos for vector-vector add with `LMUL` = 1/8, the position where -1 stands is for the `VL` operand and -1 means `VLMAX`, the first 3 stands for `SEW` as log2(8) = 3, and the second 3 is the encoding for the policy tail agnostic and mask agnostic. RISC-V vector instruction pseudos in LLVM are essentially used for efficiently handling the complex, `vtype`-dependent behavior of vector instructions, such as in register allocation. Implementation-wise, the [`select` function](https://llvm.org/doxygen/classllvm_1_1InstructionSelector.html#a50058a922d4f75ed765c34742c5066c6) is invoked, which in turns call [the corresponding RISC-V `selectImpl` function](https://github.com/llvm/llvm-project/blob/d96f46dd20157be9c11e16d8bdd3ebf900df41fc/llvm/lib/Target/RISCV/GISel/RISCVInstructionSelector.cpp#L56). To achieve this final phase, there are essentially four steps to take. First is to identify the vectorized opcode/gMIR; then we create the lowered version of that gMIR using the vector instruction pseudos; and we need to erase the old instruction once the lowered version has been picked; finally we choose a register from the register bank. For this final phase in GlobalISel, LLVM TableGen might generate `selectImpl` and we can use it out-of-the-box; otherwise, we need to implement extra logics to customize the selection pass outlined above. Luckily, TableGen does pick up and we only need implement some helper functions to mesh everything together. @@ -149,7 +149,7 @@ Implementation-wise, the [`select` function](https://llvm.org/doxygen/classllvm_ Definitely learning the whole LLVM and its GlobalISel infrastructure, and it was also hard to understand the vector length agnostic features/instructions in the RISC-V vector extension. -LLVM is a huge project and it was hard to navigate at the beginning. They have the TableGen file, all the CodeGen GlobalISel source code, and the target-specific (RISC-V in our case) implementations. They also have all the regression tests infrastructure that I had to learn at the beggin. Besides, the GlobalISel infrastructure is also rather new and under active development as well. And since we are one of the earliest people start supporting RISC-V vector extension in LLVM GlobalISel, there had been some extensive research and discussion going on. And we didn't have that many existing work to refer to, so we had to start pretty much from scratch. My initial strategy was to look at AArch64 GlobalISel for their vectors because AArch64 is one of the pioneers in GlobalISel and their work is pretty mature. +LLVM is a huge project and it was hard to navigate at the beginning. They have the TableGen file, all the CodeGen GlobalISel source code, and the target-specific (RISC-V in our case) implementations. They also have all the regression tests infrastructure that I had to learn at the beginning. Besides, the GlobalISel infrastructure is also rather new and under active development as well. And since we are one of the earliest people start supporting RISC-V vector extension in LLVM GlobalISel, there had been some extensive research and discussion going on. And we didn't have that many existing work to refer to, so we had to start pretty much from scratch. My initial strategy was to look at AArch64 GlobalISel for their vectors because AArch64 is one of the pioneers in GlobalISel and their work is pretty mature. Learning the RISC-V vector extension was also a headache at the beginning because I had to figure out the difference between RISC-V vector extension with standard SIMD vector instructions. Learning the semantic meaning of `vsetvli`, differentiating the concepts of `ELEN`, `VLEN`, and how `SEW`, `LMUL`, `VLMAX` come into play was also confusing. From 07a249bbe48ed2b25dc5d4b253780e683e18cdcf Mon Sep 17 00:00:00 2001 From: Jiahan Xie <765130715@qq.com> Date: Sun, 7 Jan 2024 10:14:14 +0800 Subject: [PATCH 03/19] correct the real unique part of riscv v extension; emphasize the real power of vl agnostic over traditional simd is when it comes loops --- content/blog/2023-12-11-rvv-llvm-gisel/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/2023-12-11-rvv-llvm-gisel/index.md b/content/blog/2023-12-11-rvv-llvm-gisel/index.md index d86434453..d557fb22d 100644 --- a/content/blog/2023-12-11-rvv-llvm-gisel/index.md +++ b/content/blog/2023-12-11-rvv-llvm-gisel/index.md @@ -14,7 +14,7 @@ name = "Michael Maitland" # Introduction -The open [RISC-V instruction set architecture (ISA)](https://riscv.org/technical/specifications/) has an interesting extension, [the RISC-V "V" Vector Extension](https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc). The unique part of RISC-V Vector Extension is that its vector registers have flexible widths, VLEN, which makes programming in RISC-V Vector Extension agnostic to the vector register sizes. This feature really distinguishes the RISC-V Vector Extension from the traditional SIMD extensions, such as [x86 SSE](https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions) (with a fixed size 128-bit vector length)/[AVX](https://en.wikipedia.org/wiki/Advanced_Vector_Extensions) (256-bit), and [Arm NEON](https://developer.arm.com/Architectures/Neon) (128-bit). The increasing vector lengths can pose a challenge to the traditional SIMD extensions as they have to address compatability and support all existing fixed size vector lengths in their ISAs. On the contrary, with the vector lengths agnostic principles, binary code generated by RISC-V assembly is automatically portable between different CPUs. +The open [RISC-V instruction set architecture (ISA)](https://riscv.org/technical/specifications/) has an interesting extension, [the RISC-V "V" Vector Extension](https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc). The unique part of RISC-V Vector Extension is that its vector instructions can deal with flexible vector lengths, VL, which makes programming in RISC-V Vector Extension agnostic to the vector register sizes. This feature really distinguishes the RISC-V Vector Extension from the traditional SIMD extensions, such as [x86 SSE](https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions) (with a fixed size 128-bit vector length)/[AVX](https://en.wikipedia.org/wiki/Advanced_Vector_Extensions) (256-bit), and [Arm NEON](https://developer.arm.com/Architectures/Neon) (128-bit). Traditional SIMD extensions with fixed vector lengths face challenges when dealing with the changing data sizes. They must maintain compatibility and support all existing fixed-size vector lengths in their instruction set architectures. This often leads to inefficiencies, especially in loop operations where the data size/loop stride may not align perfectly with the fixed vector size, necessitating additional scalar processing for the remaining elements. And the most suitable size for the number of elements to be processed in the vector loop is hard to decide ahead of time. In contrast, the RISC-V Vector Extension eliminate this concern with its vector length agnostic principle. Particularly in loop scenarios, the RISC-V's ability to adaptively handle varying data sizes stands out. For instance, in a simple loop adding two arrays, the RISC-V can dynamically adjust the vector length for each iteration by dynamically setting the vector length. This means it can process as many elements as possible in each pass, depending on the hardware capabilities and the remaining data. This adaptive approach really simplifies the code by eliminating the need for separate scalar loops for the leftover elements. # What Was the Goal? The goal was to support LLVM Global Instruction Selection for RISC-V Vector Extensions on some ALU operations, such as `vadd`, `vsub`, `vand`, `vor`, and `vxor`. From b16530fb5eb9c0b07a76814a147961f501eb650a Mon Sep 17 00:00:00 2001 From: Jiahan Xie <765130715@qq.com> Date: Sun, 7 Jan 2024 10:34:28 +0800 Subject: [PATCH 04/19] qualify that it's the ABI imposes the fact that v0, v8, v16 can be used, not the rvv spec --- content/blog/2023-12-11-rvv-llvm-gisel/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/2023-12-11-rvv-llvm-gisel/index.md b/content/blog/2023-12-11-rvv-llvm-gisel/index.md index d557fb22d..b3ccb2afd 100644 --- a/content/blog/2023-12-11-rvv-llvm-gisel/index.md +++ b/content/blog/2023-12-11-rvv-llvm-gisel/index.md @@ -29,7 +29,7 @@ Let's begin with the crucial parameters: - `SEW`: Selected Element Width (in bits), set dynamically by the programmers. It sets the width/length of a single element in a vector element. Each vector element can compose multiple single element. - `VLEN`: Vector register LENgth (in bits). The number of bits in a single vector register. It is hardware dependent. - `VL`: Vector element Length (in bits) that the programmers actually deal with, which can be treated as the vector operation building blocks. It defines how many elements the vector operations will execute. -- `LMUL`: The vector Length MULtiplier. It is used for grouping vector registers. It is a power of 2 and it ranges from 1/8 to 8. For instance, when `LMUL=8`, only `v0`, `v8`, `v16`, and `v24` indices are allowed to used, as for example, group `v8` encodes 8 vector elments `v8v9`...`v15`. Note it can also be fraction numbers because sometimes we want to use only parts of the vector registers. +- `LMUL`: The vector Length MULtiplier. It is used for grouping vector registers. It is a power of 2 and it ranges from 1/8 to 8. For instance, when `LMUL=8`, the ABI imposes that only `v0`, `v8`, `v16`, and `v24` indices are allowed to used, as for example, group `v8` encodes 8 vector elments `v8v9`...`v15`. Note it can also be fraction numbers because sometimes we want to use only parts of the vector registers. After introducing these basic and the most important parameters, there are still two paramters we will be dealing with, `AVL` and `VLMAX`: - `AVL`: Application Vector Length. The application specifies the total number of elements to be processed as a candidate for `VL`. From f7ed8e4213c1efdf49f442287cf5b76dc1c7b3c8 Mon Sep 17 00:00:00 2001 From: Jiahan Xie <765130715@qq.com> Date: Sun, 7 Jan 2024 10:39:42 +0800 Subject: [PATCH 05/19] reword vector 'basic block' to simply just vector 'element'; recalculate vlmax --- content/blog/2023-12-11-rvv-llvm-gisel/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/2023-12-11-rvv-llvm-gisel/index.md b/content/blog/2023-12-11-rvv-llvm-gisel/index.md index b3ccb2afd..a922c1886 100644 --- a/content/blog/2023-12-11-rvv-llvm-gisel/index.md +++ b/content/blog/2023-12-11-rvv-llvm-gisel/index.md @@ -33,7 +33,7 @@ Let's begin with the crucial parameters: After introducing these basic and the most important parameters, there are still two paramters we will be dealing with, `AVL` and `VLMAX`: - `AVL`: Application Vector Length. The application specifies the total number of elements to be processed as a candidate for `VL`. -- `VLMAX`: MAXimum Vector Length. Although programmers can dynamically select vector register lengths, they cannot be set to arbitrary numbers because they might be larger than the hardware constraints, which is imposed by `VLMAX`. Specifically, `VLMAX=(LMUL × VLEN) / SEW`. For example, if the length of a single basic elment is 32 bit, and this specific hardware supports `VLEN`=256 bit, there are 8 basic blocks in a vector element. And we want to group every `LMUL`=2 vector elements, `VLMAX`=4. As a result, the actual value `VL` is the smaller value of the desired application vector length `AVL` and the vector length value constrained by the hardware `VLMAX`: `VL = min(AVL, VLMAX)`. +- `VLMAX`: MAXimum Vector Length. Although programmers can dynamically select vector register lengths, they cannot be set to arbitrary numbers because they might be larger than the hardware constraints, which is imposed by `VLMAX`. Specifically, `VLMAX=(LMUL × VLEN) / SEW`. For example, if the length of a single basic elment is 32 bit, and this specific hardware supports `VLEN`=256 bit, there are 8 elements that can fit in vector register. And we want to group every `LMUL`=2 vector elements, `VLMAX`=(2 × 256) / 32 bits = 16 bits. As a result, the actual value `VL` is the smaller value of the desired application vector length `AVL` and the vector length value constrained by the hardware `VLMAX`: `VL = min(AVL, VLMAX)`. The visualization of vector registers is shown below: ![](vec-regs.png) From 09890b98c1822d0ef89fc735cb712c463cbe8ec6 Mon Sep 17 00:00:00 2001 From: Jiahan Xie <765130715@qq.com> Date: Sun, 7 Jan 2024 10:44:42 +0800 Subject: [PATCH 06/19] change VF to M for LLVM scalable vectors --- content/blog/2023-12-11-rvv-llvm-gisel/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/blog/2023-12-11-rvv-llvm-gisel/index.md b/content/blog/2023-12-11-rvv-llvm-gisel/index.md index a922c1886..3e3ec6980 100644 --- a/content/blog/2023-12-11-rvv-llvm-gisel/index.md +++ b/content/blog/2023-12-11-rvv-llvm-gisel/index.md @@ -73,9 +73,9 @@ define @vadd_vv_nxv1i8( %va, ``` Here, we define a vector-vector add function that takes in two vector arguments, and returns the sum. For the background knowledge of LLVM [vector types](https://llvm.org/docs/LangRef.html#vector-type), it has both fix-length vectors and scalable vectors. We will be focusing on scalable vectors not only because it's more complex and flexible, it also fits into our abovementioned discussion regarding flexible-widths RISC-V vector registers. The form of scalable vectors in LLVM is as follows: ``` - + ``` -where `VF` is the vectorization/grouping factor, it specifies how many vector elements are there in this group; a primitive data type; and `vscale` is a constant multiple of the specified number of vector elements, and `vscale` is unknown at compile time. For example, `` represents a scalable vector, which is a multiple of 4 32-bit integer values. +where `M` is the minimum number of elements in the vector; a primitive data type; and `vscale` is a constant multiple of the specified number of vector elements, and `vscale` is unknown at compile time. For example, `` represents a scalable vector, which is a multiple of 4 32-bit integer values. Since there are four passes in the LLVM GlobalISel core pipeline, my design and implmentation are also based on these four passes. From 0ca7820051a9bbf4ca3f2941ab2f08679170699a Mon Sep 17 00:00:00 2001 From: Jiahan Xie <765130715@qq.com> Date: Sun, 7 Jan 2024 10:48:34 +0800 Subject: [PATCH 07/19] clarify that lowerCall is not implemented yet --- content/blog/2023-12-11-rvv-llvm-gisel/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/2023-12-11-rvv-llvm-gisel/index.md b/content/blog/2023-12-11-rvv-llvm-gisel/index.md index 3e3ec6980..5dcd503a3 100644 --- a/content/blog/2023-12-11-rvv-llvm-gisel/index.md +++ b/content/blog/2023-12-11-rvv-llvm-gisel/index.md @@ -91,7 +91,7 @@ If we recall our example, what we want to get out of the first pass is something To achieve this, we need to first support parsing scalable vectors and to implement three main parts in call lowering, namely `lowerReturn`, `lowerFormalArguments`, and `lowerCall`. The functionalities of these three main parts are as what their names have suggested: 1. `lowerReturn` enables functions to return scalable vector types. To be specific, scalable vector types in the input LLVM IR programs can be lowered into physical vector registers MIR based on the RISC-V vector calling conventions for return instructions. To implement this, we just write a function that translate to a return MIR if the return value is a scalable vector. It used to fall back to SelectionDAG before we implement this, now we can directly enable it in GlobalISel. [This patch](https://github.com/llvm/llvm-project/pull/71587) implements this functionality. 2. `lowerFormalArguments` supports passing scalable vectors as arguments. We do it by implementing a function that takes in type information and returns true/false based on the type and other relevant information, such as if the target hardware supports vector instructions, and so forth. The existing argument-lowering function can take this as a helper function and enables passing scalable vectors as function arguments. [This patch](https://github.com/llvm/llvm-project/pull/70882) supports lowering formal arguments. -3. `lowerCall` is used to lower the given call instruction according to the ABI. +3. `lowerCall` is used to lower the given call instruction according to the ABI. Note that `lowerCall` is not yet implemented for vectors on RISCV since it was not a blocker to do CodeGen for vector add. ## Legalizer After the IRTranslator translates the input program written in LLVM IR into: From 92b40b21af8476ca4c373470f21610df03ab435e Mon Sep 17 00:00:00 2001 From: Jiahan Xie <765130715@qq.com> Date: Sun, 7 Jan 2024 10:58:51 +0800 Subject: [PATCH 08/19] rephrase about G_ADD legality and 'basic block' --- content/blog/2023-12-11-rvv-llvm-gisel/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/blog/2023-12-11-rvv-llvm-gisel/index.md b/content/blog/2023-12-11-rvv-llvm-gisel/index.md index 5dcd503a3..fbdd71b88 100644 --- a/content/blog/2023-12-11-rvv-llvm-gisel/index.md +++ b/content/blog/2023-12-11-rvv-llvm-gisel/index.md @@ -99,7 +99,7 @@ After the IRTranslator translates the input program written in LLVM IR into: Before explaining our work, let's define what does "legal" mean in LLVM GlobalISel. An instruction is legal if the target (RISC-V in our case) will later be able to select it to a target-specific MIR instruction. -Prior to our support, the `G_ADD` operation is legal but the scalable vectors as Low Level Types are illegal in GlobalISel, so we focused on legalizing the LLTs. Just as a note, [Low Level Type (LLT)](https://llvm.org/doxygen/classllvm_1_1LLT.html) is intended to replace the usage of Extended Vector Type (EVT) in SelectionDAG. LLTs are specified in terms of whether they are scalar or vector, and their widths; but they don't differentiate between integer and floating values. For example, `LLT s16` is simply defined as `LLT::scalar(16)`. For scalable vector types, if we want to define `nx4s32` (``), it's nothing but `LLT::scalable_vector(4, s32)`. +Prior to our support, the `G_ADD` operation is legal for scalar types. Scalable vectors as Low Level Types are theoretically legal in GlobalISel, but it has not been legalized, so we focused on legalizing the LLTs. Just as a note, [Low Level Type (LLT)](https://llvm.org/doxygen/classllvm_1_1LLT.html) is intended to replace the usage of Extended Vector Type (EVT) in SelectionDAG. LLTs are specified in terms of whether they are scalar or vector, and their widths; but they don't differentiate between integer and floating values. For example, `LLT s16` is simply defined as `LLT::scalar(16)`. For scalable vector types, if we want to define `nx4s32` (``), it's nothing but `LLT::scalable_vector(4, s32)`. Since we just brought up LLT, I'd like to introduce how to concretely associate the `VLEN`, `LMUL` things we discussed before with LLVM scalable vector types. Please note that as the date of this blog post, the LLVM community only has comprehensive support when `vscale == VLEN/64`, and that we only have partial support for `VLEN=32` using intrinsics when `vscale` is not used and there is no spill/reload of vectors. Supporting `VLEN=32` would require twice as many instruction selection patterns in `RISCVGenDAGISel.inc` which is already a very large table so the community hasn't done it. With that being said, I can present the chart of how RISC-V vector types are mapped to LLVM types for integers: ``` @@ -113,7 +113,7 @@ i8 nxv1i8 nxv2i8 nxv4i8 nxv8i8 nxv16i8 nxv32i8 nxv64i8 ``` The complete chart can be found in [this `RISCV/RISCVRegisterInfo.td` file](https://github.com/llvm/llvm-project/blob/75d6795e420274346b14aca8b6bd49bfe6030eeb/llvm/lib/Target/RISCV/RISCVRegisterInfo.td). And note that `MF` stands for fractional `LMUL` and `M`s are integer `LMUL`s. -Some values are `None` because currently RISC-V vectors assume `VLEN=64`. Take the combination (`MF8`, `i16`) as an example. If we were to write it in terms of LLVM scalable vectors, it would be `nx1/2i16` ((64 x 1/8) / 16 = 1/2), which is illegal. Now consider a legal (`LMUL`, `SEW`) combination: (`i32`, `M4`). Since `VLEN` = 64 and `SEW` = 32, there are 2 basic block elements in a single vector element. And since the grouping factor is 4, there are 2*4 = 8 multiples of elements, hence `nxv8i32 == `. +Some values are `None` because currently RISC-V vectors assume `VLEN=64`. Take the combination (`MF8`, `i16`) as an example. If we were to write it in terms of LLVM scalable vectors, it would be `nx1/2i16` ((64 x 1/8) / 16 = 1/2), which is illegal. Now consider a legal (`LMUL`, `SEW`) combination: (`i32`, `M4`). Since `VLEN` = 64 and `SEW` = 32, there are 64/32 = 2 elements that can fit in a single vector element. And since the grouping factor is 4, there are 2*4 = 8 multiples of elements, hence `nxv8i32 == `. The legal scalable vector types in the chart should all be legalized in the `legalize` pass. To implement this, we use the `getActionDefinitionsBuilder` function in [the `LegalizerInfo` class](https://llvm.org/doxygen/classllvm_1_1LegalizerInfo.html). In addition, we utilize [the `LegalityQuery` structure](https://llvm.org/doxygen/structllvm_1_1LegalityQuery.html) to query and filter the input LLTs. From fae32ac77b4e2bd0dc26a72decbc1649b299d0df Mon Sep 17 00:00:00 2001 From: Jiahan Xie <765130715@qq.com> Date: Sun, 7 Jan 2024 11:00:23 +0800 Subject: [PATCH 09/19] PseudoVADD_VV_MF8 is RISCV specific --- content/blog/2023-12-11-rvv-llvm-gisel/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/2023-12-11-rvv-llvm-gisel/index.md b/content/blog/2023-12-11-rvv-llvm-gisel/index.md index fbdd71b88..c16f5447c 100644 --- a/content/blog/2023-12-11-rvv-llvm-gisel/index.md +++ b/content/blog/2023-12-11-rvv-llvm-gisel/index.md @@ -136,7 +136,7 @@ Remarkably, we need a function to map operands values to register banks by using ## Instruction Select Now that we have assigned the correct register banks, we are ready to implement the last pass, [InstructionSelect](https://llvm.org/docs/GlobalISel/InstructionSelect.html), to select the target MIR using the gMIR! -Let's recall the result produced by the Register Bank Select pass: `%vc:vrb() = G_ADD %va:vrb(), %vb:vrb()`. We'd like to use the corresponding MIR of RISC-V vector add instruction to replace the generic add `G_ADD` instruction. Please note that I said "the corresponding MIR" because we will not be generating the actual RISC-V `vadd` or `vsetvli` in the current pass. It's because the process of instruction selection involves transforming code into target-specific MIR/machine instructions. Later down the pipeline, the `RISCVInsertVSETVLI` function, for example, will execute. Additionally, the `RISCVAsmPrinter` will translate MIR into MCInst at later stage, representing the final assembly language form. With that being said, what we actually want to get out of instruction selection pass is in this form: `%vc:vr = PseudoVADD_VV_MF8 %va, %vb, -1, 3 /* e8 */, 3 /* ta, ma */`, where `PseudoVADD_VV_MF8` is vector instruction pseudos for vector-vector add with `LMUL` = 1/8, the position where -1 stands is for the `VL` operand and -1 means `VLMAX`, the first 3 stands for `SEW` as log2(8) = 3, and the second 3 is the encoding for the policy tail agnostic and mask agnostic. RISC-V vector instruction pseudos in LLVM are essentially used for efficiently handling the complex, `vtype`-dependent behavior of vector instructions, such as in register allocation. +Let's recall the result produced by the Register Bank Select pass: `%vc:vrb() = G_ADD %va:vrb(), %vb:vrb()`. We'd like to use the corresponding MIR of RISC-V vector add instruction to replace the generic add `G_ADD` instruction. Please note that I said "the corresponding MIR" because we will not be generating the actual RISC-V `vadd` or `vsetvli` in the current pass. It's because the process of instruction selection involves transforming code into target-specific MIR/machine instructions. Later down the pipeline, the `RISCVInsertVSETVLI` function, for example, will execute. Additionally, the `RISCVAsmPrinter` will translate MIR into MCInst at later stage, representing the final assembly language form. With that being said, what we actually want to get out of instruction selection pass is in this form: `%vc:vr = PseudoVADD_VV_MF8 %va, %vb, -1, 3 /* e8 */, 3 /* ta, ma */`, where `PseudoVADD_VV_MF8` is a RISCV specific vector instruction pseudo for vector-vector add with `LMUL` = 1/8, the position where -1 stands is for the `VL` operand and -1 means `VLMAX`, the first 3 stands for `SEW` as log2(8) = 3, and the second 3 is the encoding for the policy tail agnostic and mask agnostic. RISC-V vector instruction pseudos in LLVM are essentially used for efficiently handling the complex, `vtype`-dependent behavior of vector instructions, such as in register allocation. Implementation-wise, the [`select` function](https://llvm.org/doxygen/classllvm_1_1InstructionSelector.html#a50058a922d4f75ed765c34742c5066c6) is invoked, which in turns call [the corresponding RISC-V `selectImpl` function](https://github.com/llvm/llvm-project/blob/d96f46dd20157be9c11e16d8bdd3ebf900df41fc/llvm/lib/Target/RISCV/GISel/RISCVInstructionSelector.cpp#L56). To achieve this final phase, there are essentially four steps to take. First is to identify the vectorized opcode/gMIR; then we create the lowered version of that gMIR using the vector instruction pseudos; and we need to erase the old instruction once the lowered version has been picked; finally we choose a register from the register bank. For this final phase in GlobalISel, LLVM TableGen might generate `selectImpl` and we can use it out-of-the-box; otherwise, we need to implement extra logics to customize the selection pass outlined above. Luckily, TableGen does pick up and we only need implement some helper functions to mesh everything together. From 40d4edfec86889e77d8a0ce21384360370ec3481 Mon Sep 17 00:00:00 2001 From: Jiahan Xie <765130715@qq.com> Date: Sun, 7 Jan 2024 11:45:14 +0800 Subject: [PATCH 10/19] rephrase the instruction selection implementation part --- content/blog/2023-12-11-rvv-llvm-gisel/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/2023-12-11-rvv-llvm-gisel/index.md b/content/blog/2023-12-11-rvv-llvm-gisel/index.md index c16f5447c..8f5e56eda 100644 --- a/content/blog/2023-12-11-rvv-llvm-gisel/index.md +++ b/content/blog/2023-12-11-rvv-llvm-gisel/index.md @@ -138,7 +138,7 @@ Now that we have assigned the correct register banks, we are ready to implement Let's recall the result produced by the Register Bank Select pass: `%vc:vrb() = G_ADD %va:vrb(), %vb:vrb()`. We'd like to use the corresponding MIR of RISC-V vector add instruction to replace the generic add `G_ADD` instruction. Please note that I said "the corresponding MIR" because we will not be generating the actual RISC-V `vadd` or `vsetvli` in the current pass. It's because the process of instruction selection involves transforming code into target-specific MIR/machine instructions. Later down the pipeline, the `RISCVInsertVSETVLI` function, for example, will execute. Additionally, the `RISCVAsmPrinter` will translate MIR into MCInst at later stage, representing the final assembly language form. With that being said, what we actually want to get out of instruction selection pass is in this form: `%vc:vr = PseudoVADD_VV_MF8 %va, %vb, -1, 3 /* e8 */, 3 /* ta, ma */`, where `PseudoVADD_VV_MF8` is a RISCV specific vector instruction pseudo for vector-vector add with `LMUL` = 1/8, the position where -1 stands is for the `VL` operand and -1 means `VLMAX`, the first 3 stands for `SEW` as log2(8) = 3, and the second 3 is the encoding for the policy tail agnostic and mask agnostic. RISC-V vector instruction pseudos in LLVM are essentially used for efficiently handling the complex, `vtype`-dependent behavior of vector instructions, such as in register allocation. -Implementation-wise, the [`select` function](https://llvm.org/doxygen/classllvm_1_1InstructionSelector.html#a50058a922d4f75ed765c34742c5066c6) is invoked, which in turns call [the corresponding RISC-V `selectImpl` function](https://github.com/llvm/llvm-project/blob/d96f46dd20157be9c11e16d8bdd3ebf900df41fc/llvm/lib/Target/RISCV/GISel/RISCVInstructionSelector.cpp#L56). To achieve this final phase, there are essentially four steps to take. First is to identify the vectorized opcode/gMIR; then we create the lowered version of that gMIR using the vector instruction pseudos; and we need to erase the old instruction once the lowered version has been picked; finally we choose a register from the register bank. For this final phase in GlobalISel, LLVM TableGen might generate `selectImpl` and we can use it out-of-the-box; otherwise, we need to implement extra logics to customize the selection pass outlined above. Luckily, TableGen does pick up and we only need implement some helper functions to mesh everything together. +Implementation-wise, the [`select` function](https://llvm.org/doxygen/classllvm_1_1InstructionSelector.html#a50058a922d4f75ed765c34742c5066c6) is invoked, which in turns call [the corresponding RISC-V `selectImpl` function](https://github.com/llvm/llvm-project/blob/d96f46dd20157be9c11e16d8bdd3ebf900df41fc/llvm/lib/Target/RISCV/GISel/RISCVInstructionSelector.cpp#L56). To achieve this final phase, there are essentially four steps to take. First is to identify the vectorized opcode/gMIR; then we create the lowered version of that gMIR using the vector instruction pseudos; and we need to erase the old instruction once the lowered version has been picked; finally we constrain the type of the virtual register so that register allocation has enough information to convert this virtual register into a physical register. For this final phase in GlobalISel, if there exist LLVM TableGen patterns that can map to RISC-V opcode by going through SelectionDAG, we can just use it out-of-the-box; otherwise, we need to implement extra logics to customize the selection pass outlined above. Luckily, TableGen does have this pattern and we only need to implement some helper functions to mesh everything together. [This patch](https://github.com/llvm/llvm-project/pull/74114) implements both Register Bank Select and Instruction Select passes. From e20aa27b170f90aaf642311a0f305323055ed7e6 Mon Sep 17 00:00:00 2001 From: Jiahan Xie <765130715@qq.com> Date: Mon, 8 Jan 2024 10:40:08 +0800 Subject: [PATCH 11/19] provide an overview for globalisel --- content/blog/2023-12-11-rvv-llvm-gisel/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/blog/2023-12-11-rvv-llvm-gisel/index.md b/content/blog/2023-12-11-rvv-llvm-gisel/index.md index 8f5e56eda..6df560ead 100644 --- a/content/blog/2023-12-11-rvv-llvm-gisel/index.md +++ b/content/blog/2023-12-11-rvv-llvm-gisel/index.md @@ -17,7 +17,7 @@ name = "Michael Maitland" The open [RISC-V instruction set architecture (ISA)](https://riscv.org/technical/specifications/) has an interesting extension, [the RISC-V "V" Vector Extension](https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc). The unique part of RISC-V Vector Extension is that its vector instructions can deal with flexible vector lengths, VL, which makes programming in RISC-V Vector Extension agnostic to the vector register sizes. This feature really distinguishes the RISC-V Vector Extension from the traditional SIMD extensions, such as [x86 SSE](https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions) (with a fixed size 128-bit vector length)/[AVX](https://en.wikipedia.org/wiki/Advanced_Vector_Extensions) (256-bit), and [Arm NEON](https://developer.arm.com/Architectures/Neon) (128-bit). Traditional SIMD extensions with fixed vector lengths face challenges when dealing with the changing data sizes. They must maintain compatibility and support all existing fixed-size vector lengths in their instruction set architectures. This often leads to inefficiencies, especially in loop operations where the data size/loop stride may not align perfectly with the fixed vector size, necessitating additional scalar processing for the remaining elements. And the most suitable size for the number of elements to be processed in the vector loop is hard to decide ahead of time. In contrast, the RISC-V Vector Extension eliminate this concern with its vector length agnostic principle. Particularly in loop scenarios, the RISC-V's ability to adaptively handle varying data sizes stands out. For instance, in a simple loop adding two arrays, the RISC-V can dynamically adjust the vector length for each iteration by dynamically setting the vector length. This means it can process as many elements as possible in each pass, depending on the hardware capabilities and the remaining data. This adaptive approach really simplifies the code by eliminating the need for separate scalar loops for the leftover elements. # What Was the Goal? -The goal was to support LLVM Global Instruction Selection for RISC-V Vector Extensions on some ALU operations, such as `vadd`, `vsub`, `vand`, `vor`, and `vxor`. +The goal was to support LLVM Global Instruction Selection, a framework that operates on whole function for instruction selection, for the RISC-V Vector Extension on some ALU operations, such as `vadd`, `vsub`, `vand`, `vor`, and `vxor`. # A Primer on the RISC-V Vector Extension @@ -155,7 +155,7 @@ Learning the RISC-V vector extension was also a headache at the beginning becaus # Were You Successful? -This project is a success and we have become one of the first developers to support GlobalISel for the RISC-V vector extension. +This project is a success and we have become one of the first developers to support GlobalISel for the RISC-V vector extension, as well as the first developers to support scalable vectors in GlobalISel for any target. We evaluate our work using LLVM [Regression tests](https://llvm.org/docs/TestingGuide.html#regression-tests). The regression tests are driven by [lit](https://llvm.org/docs/CommandGuide/lit.html), LLVM Integrated Tester. Each pass of GlobalISel is testable (that's also one of the advantages of GlobalISel over SelectionDAG). The root test directory for RISC-V GlobalISel is located in [`llvm/test/CodeGen/RISCV/GlobalISel`](https://github.com/llvm/llvm-project/tree/main/llvm/test/CodeGen/RISCV/GlobalISel), in which it has `irtranslator`, `legalizer`, `regbankselect`, and `instruction-select` directories to test each pass. We first make sure that our implementation still pass all the existing regression tests. Then, we generate more regression test assertions using Python scripts `update_llc_test_checks.py` and `update_mir_test_checks.py` located under `llvm/utils/`. We test for every pass, for all the opcodes we intend to support, and for all the scalable vector `LLT` types available in the RISC-V vector extension. And as a result, we achieve 100% correctness. Although didn't "optimizie" anything explicitly, when I compare our GlobalISel outputs with the outputs from SelectionDAG, which is typically used as the ground truth for now, and they turn out to be the same, meaning we have an "optimal" code generation implementation. From b34d68f1f75a1448ca0c2d009d7e88324821ba06 Mon Sep 17 00:00:00 2001 From: Jiahan Xie <765130715@qq.com> Date: Mon, 8 Jan 2024 10:47:57 +0800 Subject: [PATCH 12/19] clarify on the vector element and single element part --- content/blog/2023-12-11-rvv-llvm-gisel/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/2023-12-11-rvv-llvm-gisel/index.md b/content/blog/2023-12-11-rvv-llvm-gisel/index.md index 6df560ead..db9a915d3 100644 --- a/content/blog/2023-12-11-rvv-llvm-gisel/index.md +++ b/content/blog/2023-12-11-rvv-llvm-gisel/index.md @@ -26,7 +26,7 @@ There are a lot of instructions and cool features in the [RISC-V "V" Vector Exte The most important parameters are undoubtly `SEW`, `VLEN`, `VL`, and `LMUL`; and one of the most interesting and powerful instructions is `vset{i}vl{i}`. Let's begin with the crucial parameters: -- `SEW`: Selected Element Width (in bits), set dynamically by the programmers. It sets the width/length of a single element in a vector element. Each vector element can compose multiple single element. +- `SEW`: Selected Element Width (in bits), set dynamically by the programmers. It sets the width/length of a single element in a vector element/register. Each vector element can compose `VLEN`/`SEW` single elements. - `VLEN`: Vector register LENgth (in bits). The number of bits in a single vector register. It is hardware dependent. - `VL`: Vector element Length (in bits) that the programmers actually deal with, which can be treated as the vector operation building blocks. It defines how many elements the vector operations will execute. - `LMUL`: The vector Length MULtiplier. It is used for grouping vector registers. It is a power of 2 and it ranges from 1/8 to 8. For instance, when `LMUL=8`, the ABI imposes that only `v0`, `v8`, `v16`, and `v24` indices are allowed to used, as for example, group `v8` encodes 8 vector elments `v8v9`...`v15`. Note it can also be fraction numbers because sometimes we want to use only parts of the vector registers. From 1ceb01155487ee63edf09f561c436366386bb25c Mon Sep 17 00:00:00 2001 From: Jiahan Xie <765130715@qq.com> Date: Mon, 8 Jan 2024 11:18:23 +0800 Subject: [PATCH 13/19] clarify on the VL part regarding its actual quantity and its quantity compared to VLEN --- content/blog/2023-12-11-rvv-llvm-gisel/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/blog/2023-12-11-rvv-llvm-gisel/index.md b/content/blog/2023-12-11-rvv-llvm-gisel/index.md index db9a915d3..e4c03da9d 100644 --- a/content/blog/2023-12-11-rvv-llvm-gisel/index.md +++ b/content/blog/2023-12-11-rvv-llvm-gisel/index.md @@ -28,12 +28,12 @@ The most important parameters are undoubtly `SEW`, `VLEN`, `VL`, and `LMUL`; and Let's begin with the crucial parameters: - `SEW`: Selected Element Width (in bits), set dynamically by the programmers. It sets the width/length of a single element in a vector element/register. Each vector element can compose `VLEN`/`SEW` single elements. - `VLEN`: Vector register LENgth (in bits). The number of bits in a single vector register. It is hardware dependent. -- `VL`: Vector element Length (in bits) that the programmers actually deal with, which can be treated as the vector operation building blocks. It defines how many elements the vector operations will execute. +- `VL`: Vector element Length (in bits) that the programmers actually deal with, which can be treated as the vector operation building blocks. It implies how many vector registers/elements the vector operations will execute. As will be discussed below, `VL = min(AVL, VLMAX)`, which means there's no fixed relationship between `VL` and `VLEN`. `VL` might be greater than, less than, or equal to `VLEN` depending on the value of `AVL`, `LMUL`, and `SEW`. - `LMUL`: The vector Length MULtiplier. It is used for grouping vector registers. It is a power of 2 and it ranges from 1/8 to 8. For instance, when `LMUL=8`, the ABI imposes that only `v0`, `v8`, `v16`, and `v24` indices are allowed to used, as for example, group `v8` encodes 8 vector elments `v8v9`...`v15`. Note it can also be fraction numbers because sometimes we want to use only parts of the vector registers. After introducing these basic and the most important parameters, there are still two paramters we will be dealing with, `AVL` and `VLMAX`: - `AVL`: Application Vector Length. The application specifies the total number of elements to be processed as a candidate for `VL`. -- `VLMAX`: MAXimum Vector Length. Although programmers can dynamically select vector register lengths, they cannot be set to arbitrary numbers because they might be larger than the hardware constraints, which is imposed by `VLMAX`. Specifically, `VLMAX=(LMUL × VLEN) / SEW`. For example, if the length of a single basic elment is 32 bit, and this specific hardware supports `VLEN`=256 bit, there are 8 elements that can fit in vector register. And we want to group every `LMUL`=2 vector elements, `VLMAX`=(2 × 256) / 32 bits = 16 bits. As a result, the actual value `VL` is the smaller value of the desired application vector length `AVL` and the vector length value constrained by the hardware `VLMAX`: `VL = min(AVL, VLMAX)`. +- `VLMAX`: MAXimum Vector Length. Although programmers can dynamically select vector register lengths, they cannot be set to arbitrary numbers because they might be larger than the hardware constraints, which is imposed by `VLMAX`. Specifically, `VLMAX = (LMUL × VLEN) / SEW`. For example, if the length of a single basic elment is 32 bit, and this specific hardware supports `VLEN`=256 bit, there are 8 elements that can fit in vector register. And we want to group every `LMUL`=2 vector elements, `VLMAX`=(2 × 256) / 32 bits = 16 bits. As a result, the actual value `VL` is the smaller value of the desired application vector length `AVL` and the vector length value constrained by the hardware `VLMAX`: `VL = min(AVL, VLMAX)`. The visualization of vector registers is shown below: ![](vec-regs.png) From b45a98fedc7ea8cda5bdf9e733de1c62e663e0fe Mon Sep 17 00:00:00 2001 From: Jiahan Xie <765130715@qq.com> Date: Mon, 8 Jan 2024 11:36:09 +0800 Subject: [PATCH 14/19] include a one-sentence summary of combiner --- content/blog/2023-12-11-rvv-llvm-gisel/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/2023-12-11-rvv-llvm-gisel/index.md b/content/blog/2023-12-11-rvv-llvm-gisel/index.md index e4c03da9d..10f4dba16 100644 --- a/content/blog/2023-12-11-rvv-llvm-gisel/index.md +++ b/content/blog/2023-12-11-rvv-llvm-gisel/index.md @@ -61,7 +61,7 @@ GlobalISel is intended to be a replacement for [SelectionDAG](https://llvm.org/d A visualization of the pipeline is shown below: ![](pipeline.png) -Please note that Combiner is not in the scope of this blog. +Please note that Combiner, which is an optional optimization in GlobalISel that replaces patterns of instructions with a better (faster or smaller code size) alternative, is not in the scope of this blog. # What Did I Do? Let's start with a minimum code generation example that we want to support in LLVM GlobalISel: From e0f0a96ce45550c2559280c95c9ad182bdd38a20 Mon Sep 17 00:00:00 2001 From: Jiahan Xie <765130715@qq.com> Date: Mon, 8 Jan 2024 11:50:37 +0800 Subject: [PATCH 15/19] clarify on the llvm scalable vectors vscale part --- content/blog/2023-12-11-rvv-llvm-gisel/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/2023-12-11-rvv-llvm-gisel/index.md b/content/blog/2023-12-11-rvv-llvm-gisel/index.md index 10f4dba16..035d28fba 100644 --- a/content/blog/2023-12-11-rvv-llvm-gisel/index.md +++ b/content/blog/2023-12-11-rvv-llvm-gisel/index.md @@ -75,7 +75,7 @@ Here, we define a vector-vector add function that takes in two vector arguments, ``` ``` -where `M` is the minimum number of elements in the vector; a primitive data type; and `vscale` is a constant multiple of the specified number of vector elements, and `vscale` is unknown at compile time. For example, `` represents a scalable vector, which is a multiple of 4 32-bit integer values. +where `M` is the minimum number of elements in the vector; a primitive data type; and `vscale` is a positive constant multiple of the specified number of vector elements, and `vscale` is unknown at compile time. For example, `` represents a scalable vector, which can be _any_ positive multiple (for example, 1, 4, 16, etc.) of 4 32-bit integer values. Although it's unknown at compile time, it remains constant during runtime (for example, the user passes `vscale` as the program input). Since there are four passes in the LLVM GlobalISel core pipeline, my design and implmentation are also based on these four passes. From 54b8e761ec8fb5e8f0179a2af8abafc83e6e1c94 Mon Sep 17 00:00:00 2001 From: Jiahan Xie <765130715@qq.com> Date: Mon, 8 Jan 2024 13:26:42 +0800 Subject: [PATCH 16/19] add more clarifications on the elen and vlen part --- content/blog/2023-12-11-rvv-llvm-gisel/index.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/content/blog/2023-12-11-rvv-llvm-gisel/index.md b/content/blog/2023-12-11-rvv-llvm-gisel/index.md index 035d28fba..d6adf2877 100644 --- a/content/blog/2023-12-11-rvv-llvm-gisel/index.md +++ b/content/blog/2023-12-11-rvv-llvm-gisel/index.md @@ -27,7 +27,8 @@ The most important parameters are undoubtly `SEW`, `VLEN`, `VL`, and `LMUL`; and Let's begin with the crucial parameters: - `SEW`: Selected Element Width (in bits), set dynamically by the programmers. It sets the width/length of a single element in a vector element/register. Each vector element can compose `VLEN`/`SEW` single elements. -- `VLEN`: Vector register LENgth (in bits). The number of bits in a single vector register. It is hardware dependent. +- `ELEN`: The maximum size in bits of a vector element that any operation can produce or consume. +- `VLEN`: Vector register LENgth (in bits). The number of bits in a single vector register. It is hardware dependent and `VLEN >= ELEN`. - `VL`: Vector element Length (in bits) that the programmers actually deal with, which can be treated as the vector operation building blocks. It implies how many vector registers/elements the vector operations will execute. As will be discussed below, `VL = min(AVL, VLMAX)`, which means there's no fixed relationship between `VL` and `VLEN`. `VL` might be greater than, less than, or equal to `VLEN` depending on the value of `AVL`, `LMUL`, and `SEW`. - `LMUL`: The vector Length MULtiplier. It is used for grouping vector registers. It is a power of 2 and it ranges from 1/8 to 8. For instance, when `LMUL=8`, the ABI imposes that only `v0`, `v8`, `v16`, and `v24` indices are allowed to used, as for example, group `v8` encodes 8 vector elments `v8v9`...`v15`. Note it can also be fraction numbers because sometimes we want to use only parts of the vector registers. @@ -101,10 +102,10 @@ Before explaining our work, let's define what does "legal" mean in LLVM GlobalIS Prior to our support, the `G_ADD` operation is legal for scalar types. Scalable vectors as Low Level Types are theoretically legal in GlobalISel, but it has not been legalized, so we focused on legalizing the LLTs. Just as a note, [Low Level Type (LLT)](https://llvm.org/doxygen/classllvm_1_1LLT.html) is intended to replace the usage of Extended Vector Type (EVT) in SelectionDAG. LLTs are specified in terms of whether they are scalar or vector, and their widths; but they don't differentiate between integer and floating values. For example, `LLT s16` is simply defined as `LLT::scalar(16)`. For scalable vector types, if we want to define `nx4s32` (``), it's nothing but `LLT::scalable_vector(4, s32)`. -Since we just brought up LLT, I'd like to introduce how to concretely associate the `VLEN`, `LMUL` things we discussed before with LLVM scalable vector types. Please note that as the date of this blog post, the LLVM community only has comprehensive support when `vscale == VLEN/64`, and that we only have partial support for `VLEN=32` using intrinsics when `vscale` is not used and there is no spill/reload of vectors. Supporting `VLEN=32` would require twice as many instruction selection patterns in `RISCVGenDAGISel.inc` which is already a very large table so the community hasn't done it. With that being said, I can present the chart of how RISC-V vector types are mapped to LLVM types for integers: +Since we just brought up LLT, I'd like to introduce how to concretely associate the `VLEN`, `LMUL` things we discussed before with LLVM scalable vector types. Please note that as the date of this blog post, the LLVM community only has comprehensive support when `vscale == VLEN/64`, where 64 is the magic constant for the minimum vector register length (assumed by LLVM not RISC-V), that is to say, we currently require that `VLEN >= 64`. We only have partial support for `VLEN=32` using intrinsics when `vscale` is not used and there is no spill/reload of vectors. Supporting `VLEN=32` would require twice as many instruction selection patterns in `RISCVGenDAGISel.inc` which is already a very large table so the community hasn't done it. With that being said, I can present the chart of how RISC-V vector types are mapped to LLVM types for integers: ``` LMUL -/ MF8 MF4 MF2 M1 M2 M4 M8 +/ 1/8 1/4 1/2 1 2 4 8 SEW i64 N/A N/A N/A nxv1i64 nxv2i64 nxv4i64 nxv8i64 i32 N/A N/A nxv1i32 nxv2i32 nxv4i32 nxv8i32 nxv16i32 @@ -113,7 +114,7 @@ i8 nxv1i8 nxv2i8 nxv4i8 nxv8i8 nxv16i8 nxv32i8 nxv64i8 ``` The complete chart can be found in [this `RISCV/RISCVRegisterInfo.td` file](https://github.com/llvm/llvm-project/blob/75d6795e420274346b14aca8b6bd49bfe6030eeb/llvm/lib/Target/RISCV/RISCVRegisterInfo.td). And note that `MF` stands for fractional `LMUL` and `M`s are integer `LMUL`s. -Some values are `None` because currently RISC-V vectors assume `VLEN=64`. Take the combination (`MF8`, `i16`) as an example. If we were to write it in terms of LLVM scalable vectors, it would be `nx1/2i16` ((64 x 1/8) / 16 = 1/2), which is illegal. Now consider a legal (`LMUL`, `SEW`) combination: (`i32`, `M4`). Since `VLEN` = 64 and `SEW` = 32, there are 64/32 = 2 elements that can fit in a single vector element. And since the grouping factor is 4, there are 2*4 = 8 multiples of elements, hence `nxv8i32 == `. +Some values are `None` because currently the LLVM community assumes the RISC-V vectors to have `VLEN=64`. Take the combination (`1/8`, `i16`) as an example. If we were to write it in terms of LLVM scalable vectors, it would be `nx1/2i16` ((64 x 1/8) / 16 = 1/2), which is illegal. Now consider a legal (`LMUL`, `SEW`) combination: (`i32`, `4`). Since `VLEN` = 64 and `SEW` = 32, there are 64/32 = 2 elements that can fit in a single vector element. And since the grouping factor is 4, there are 2*4 = 8 multiples of elements, hence `nxv8i32 == `. The legal scalable vector types in the chart should all be legalized in the `legalize` pass. To implement this, we use the `getActionDefinitionsBuilder` function in [the `LegalizerInfo` class](https://llvm.org/doxygen/classllvm_1_1LegalizerInfo.html). In addition, we utilize [the `LegalityQuery` structure](https://llvm.org/doxygen/structllvm_1_1LegalityQuery.html) to query and filter the input LLTs. From 16eb5bff4152155324164a3bb7c4888d34be236e Mon Sep 17 00:00:00 2001 From: Jiahan Xie <765130715@qq.com> Date: Mon, 8 Jan 2024 14:14:57 +0800 Subject: [PATCH 17/19] clarify on the elen 32/64 part; rephrase 'what were the hardest parts' --- content/blog/2023-12-11-rvv-llvm-gisel/index.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/content/blog/2023-12-11-rvv-llvm-gisel/index.md b/content/blog/2023-12-11-rvv-llvm-gisel/index.md index d6adf2877..92e4fa88f 100644 --- a/content/blog/2023-12-11-rvv-llvm-gisel/index.md +++ b/content/blog/2023-12-11-rvv-llvm-gisel/index.md @@ -118,7 +118,7 @@ Some values are `None` because currently the LLVM community assumes the RISC-V v The legal scalable vector types in the chart should all be legalized in the `legalize` pass. To implement this, we use the `getActionDefinitionsBuilder` function in [the `LegalizerInfo` class](https://llvm.org/doxygen/classllvm_1_1LegalizerInfo.html). In addition, we utilize [the `LegalityQuery` structure](https://llvm.org/doxygen/structllvm_1_1LegalityQuery.html) to query and filter the input LLTs. -It is noteworthy that some target hardwares only support `ELEN` = 32; on the other hand, `nxv1i64`, `nxv2i64`, `nxv4i64`, and `nxv8i64` require `hasVInstructionsI64` as we want to support max 64-bit vector elements in these cases. For example, in [Zve, Vector Extensions for Embedded Processors](https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc#182-zve-vector-extensions-for-embedded-processors), `Zvex32` does not provide support for `SEW` = 64. To this end, we need to have extra separate files when the target hardwares are different, which will be discussed further in the evaluation part. +It is noteworthy that some target hardwares only support `ELEN` = 32; on the other hand, `nxv1i64`, `nxv2i64`, `nxv4i64`, and `nxv8i64` require the maximum size in bits of a vector element is 64. For example, in [Zve, Vector Extensions for Embedded Processors](https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc#182-zve-vector-extensions-for-embedded-processors), `Zvex32` does not provide support for `SEW` = 64. To this end, we need to have extra separate files when the target hardwares are different, which will be discussed further in the evaluation part. [This patch](https://github.com/llvm/llvm-project/pull/71400) implements the legalize pass. @@ -132,7 +132,7 @@ Therefore, the goal in this pass is to take the input as the results of the lega At the end of the day, to assign the instructions with proper register banks, we will utilize the function [`getInstructionMapping`](https://llvm.org/doxygen/classllvm_1_1RegisterBankInfo.html#a5b7e84a2ea3cdb118f44543cdb33f670) and call it on the opcodes we are working on. To make sure we are mapping our instructions to their correct register banks, we still need more helper functions to achieve that. -Remarkably, we need a function to map operands values to register banks by using the [`ValueMapping` structure](https://llvm.org/doxygen/structllvm_1_1RegisterBankInfo_1_1ValueMapping.html). And we will create the mapping based on the size of the incoming operands. The rule here is we have 4 different sizes in the mapping for the 4 different integer `LMUL` register size cases. We pick based on the known minimum size of the register type, 64, 128, 256, and 512. We map any size less than 64 to 64 as well. And the reason being is `MF8`, `MF4`, and `MF2` have similar behaviors as `M1`; but `M2`, `M4`, and `M8` do not. Consider we have two instructions that use `vsetvli` to set `LMUL` to 1/2 (`MF2`) and 1 (`M1`) respectively. Assume we want to read a vector register in the first instruction. We can only read/extract the first half of that vector register, say `v1`, out of it since we have fractional `LMUL` `MF2`. In that sense, regardless of using `MF2` or `M1`, we are essentially using the whole registers so they all take one cycle to process even in the case of fractional `LMUL`s. However, if we set `LMUL` to 2, if we were reading `v1`, we end up reading a group of 2 registers: `{v1, v2}`. And this behavior is fundamentally different from the former case. +Particularly, we need a function to map operands values to register banks by using the [`ValueMapping` structure](https://llvm.org/doxygen/structllvm_1_1RegisterBankInfo_1_1ValueMapping.html) because that is the function that bridges the LLVM world and the RISC-V world. And we will create the mapping based on the size of the incoming operands. The rule here is we have 4 different sizes in the mapping for the 4 different integer `LMUL` register size cases. We pick based on the known minimum size of the register type, 64, 128, 256, and 512. We map any size less than 64 to 64 as well. And the reason being is `MF8`, `MF4`, and `MF2` have similar behaviors as `M1`; but `M2`, `M4`, and `M8` do not. Consider we have two instructions that use `vsetvli` to set `LMUL` to 1/2 (`MF2`) and 1 (`M1`) respectively. Assume we want to read a vector register in the first instruction. We can only read/extract the first half of that vector register, say `v1`, out of it since we have fractional `LMUL` `MF2`. In that sense, regardless of using `MF2` or `M1`, we are essentially using the whole registers so they all take one cycle to process even in the case of fractional `LMUL`s. However, if we set `LMUL` to 2, if we were reading `v1`, we end up reading a group of 2 registers: `{v1, v2}`. And this behavior is fundamentally different from the former case. ## Instruction Select Now that we have assigned the correct register banks, we are ready to implement the last pass, [InstructionSelect](https://llvm.org/docs/GlobalISel/InstructionSelect.html), to select the target MIR using the gMIR! @@ -144,11 +144,9 @@ Implementation-wise, the [`select` function](https://llvm.org/doxygen/classllvm_ [This patch](https://github.com/llvm/llvm-project/pull/74114) implements both Register Bank Select and Instruction Select passes. - - # What Were the Hardest Parts? -Definitely learning the whole LLVM and its GlobalISel infrastructure, and it was also hard to understand the vector length agnostic features/instructions in the RISC-V vector extension. +Learning the whole LLVM and its GlobalISel infrastructure were the hardest parts to support GlobalISel for the RISC-V Vector Extension, especially for someone who was new to the LLVM world. It was also hard to understand the vector length agnostic features/instructions in the RISC-V vector extension in particular. LLVM is a huge project and it was hard to navigate at the beginning. They have the TableGen file, all the CodeGen GlobalISel source code, and the target-specific (RISC-V in our case) implementations. They also have all the regression tests infrastructure that I had to learn at the beginning. Besides, the GlobalISel infrastructure is also rather new and under active development as well. And since we are one of the earliest people start supporting RISC-V vector extension in LLVM GlobalISel, there had been some extensive research and discussion going on. And we didn't have that many existing work to refer to, so we had to start pretty much from scratch. My initial strategy was to look at AArch64 GlobalISel for their vectors because AArch64 is one of the pioneers in GlobalISel and their work is pretty mature. From 87e85edd63ecb4289a371ab24f09e09fc626c0dc Mon Sep 17 00:00:00 2001 From: Jiahan Xie <765130715@qq.com> Date: Mon, 8 Jan 2024 14:23:05 +0800 Subject: [PATCH 18/19] retitle some sections --- content/blog/2023-12-11-rvv-llvm-gisel/index.md | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/content/blog/2023-12-11-rvv-llvm-gisel/index.md b/content/blog/2023-12-11-rvv-llvm-gisel/index.md index 92e4fa88f..365d3a0c2 100644 --- a/content/blog/2023-12-11-rvv-llvm-gisel/index.md +++ b/content/blog/2023-12-11-rvv-llvm-gisel/index.md @@ -16,8 +16,7 @@ name = "Michael Maitland" The open [RISC-V instruction set architecture (ISA)](https://riscv.org/technical/specifications/) has an interesting extension, [the RISC-V "V" Vector Extension](https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc). The unique part of RISC-V Vector Extension is that its vector instructions can deal with flexible vector lengths, VL, which makes programming in RISC-V Vector Extension agnostic to the vector register sizes. This feature really distinguishes the RISC-V Vector Extension from the traditional SIMD extensions, such as [x86 SSE](https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions) (with a fixed size 128-bit vector length)/[AVX](https://en.wikipedia.org/wiki/Advanced_Vector_Extensions) (256-bit), and [Arm NEON](https://developer.arm.com/Architectures/Neon) (128-bit). Traditional SIMD extensions with fixed vector lengths face challenges when dealing with the changing data sizes. They must maintain compatibility and support all existing fixed-size vector lengths in their instruction set architectures. This often leads to inefficiencies, especially in loop operations where the data size/loop stride may not align perfectly with the fixed vector size, necessitating additional scalar processing for the remaining elements. And the most suitable size for the number of elements to be processed in the vector loop is hard to decide ahead of time. In contrast, the RISC-V Vector Extension eliminate this concern with its vector length agnostic principle. Particularly in loop scenarios, the RISC-V's ability to adaptively handle varying data sizes stands out. For instance, in a simple loop adding two arrays, the RISC-V can dynamically adjust the vector length for each iteration by dynamically setting the vector length. This means it can process as many elements as possible in each pass, depending on the hardware capabilities and the remaining data. This adaptive approach really simplifies the code by eliminating the need for separate scalar loops for the leftover elements. -# What Was the Goal? -The goal was to support LLVM Global Instruction Selection, a framework that operates on whole function for instruction selection, for the RISC-V Vector Extension on some ALU operations, such as `vadd`, `vsub`, `vand`, `vor`, and `vxor`. +In this project, our goal was to support LLVM Global Instruction Selection, a framework that operates on whole function for instruction selection, for the RISC-V Vector Extension on some ALU operations, such as `vadd`, `vsub`, `vand`, `vor`, and `vxor`. # A Primer on the RISC-V Vector Extension @@ -64,7 +63,7 @@ A visualization of the pipeline is shown below: ![](pipeline.png) Please note that Combiner, which is an optional optimization in GlobalISel that replaces patterns of instructions with a better (faster or smaller code size) alternative, is not in the scope of this blog. -# What Did I Do? +# The Core Pipeline and My Implementation Let's start with a minimum code generation example that we want to support in LLVM GlobalISel: ``` define @vadd_vv_nxv1i8( %va, %b) { @@ -144,7 +143,7 @@ Implementation-wise, the [`select` function](https://llvm.org/doxygen/classllvm_ [This patch](https://github.com/llvm/llvm-project/pull/74114) implements both Register Bank Select and Instruction Select passes. -# What Were the Hardest Parts? +# Challenges and Triumphs Learning the whole LLVM and its GlobalISel infrastructure were the hardest parts to support GlobalISel for the RISC-V Vector Extension, especially for someone who was new to the LLVM world. It was also hard to understand the vector length agnostic features/instructions in the RISC-V vector extension in particular. @@ -152,15 +151,13 @@ LLVM is a huge project and it was hard to navigate at the beginning. They have t Learning the RISC-V vector extension was also a headache at the beginning because I had to figure out the difference between RISC-V vector extension with standard SIMD vector instructions. Learning the semantic meaning of `vsetvli`, differentiating the concepts of `ELEN`, `VLEN`, and how `SEW`, `LMUL`, `VLMAX` come into play was also confusing. -# Were You Successful? - -This project is a success and we have become one of the first developers to support GlobalISel for the RISC-V vector extension, as well as the first developers to support scalable vectors in GlobalISel for any target. +Nevertheless, this project turns out to be a success and we have become one of the first developers to support GlobalISel for the RISC-V vector extension, as well as the first developers to support scalable vectors in GlobalISel for any target. We evaluate our work using LLVM [Regression tests](https://llvm.org/docs/TestingGuide.html#regression-tests). The regression tests are driven by [lit](https://llvm.org/docs/CommandGuide/lit.html), LLVM Integrated Tester. Each pass of GlobalISel is testable (that's also one of the advantages of GlobalISel over SelectionDAG). The root test directory for RISC-V GlobalISel is located in [`llvm/test/CodeGen/RISCV/GlobalISel`](https://github.com/llvm/llvm-project/tree/main/llvm/test/CodeGen/RISCV/GlobalISel), in which it has `irtranslator`, `legalizer`, `regbankselect`, and `instruction-select` directories to test each pass. We first make sure that our implementation still pass all the existing regression tests. Then, we generate more regression test assertions using Python scripts `update_llc_test_checks.py` and `update_mir_test_checks.py` located under `llvm/utils/`. We test for every pass, for all the opcodes we intend to support, and for all the scalable vector `LLT` types available in the RISC-V vector extension. And as a result, we achieve 100% correctness. Although didn't "optimizie" anything explicitly, when I compare our GlobalISel outputs with the outputs from SelectionDAG, which is typically used as the ground truth for now, and they turn out to be the same, meaning we have an "optimal" code generation implementation. There are numerous benefits of this work. As we have mentioned before, GlobalISel is intended to replace SelectionDAG and FastISel to solve some major problems. Since GlobalISel operates on the whole function, supporting GlobalISel for RISC-V vector extension can allow for more efficient code generation globally tailored to the unique features of this extension, such as variable vector lengths and diverse operation types. GlobalISel also eliminates the use of dedicated IRs as in SelectionDAG, it streamlines the compilation process by providing this more unified and efficient approach to instruction selection, which can be particularly beneficial for the complex operations involved in vector processing. Last but not least, as GlobalISel is built in a way that enables code reuses, our work also provides a foundation of the framework that can be extended and customized for future work, enabling long term reusability and adaptability. -# Future Work? +# Future Work It's absolutely been a fun and rewarding experience, and I plan to keep supporting more opcodes, such as vector load/store, in LLVM GlobalISel for the RISC-V vector extension. When more opcodes are supported and we are ready to write actual interesting high-level language programs, I will also try to write some, for example, C programs, and run them on simulators like [Spike](https://github.com/riscv-software-src/riscv-isa-sim). From 218544bb3aad21d6af0be8cc49fd6a83c182bf18 Mon Sep 17 00:00:00 2001 From: Jiahan Xie <765130715@qq.com> Date: Mon, 8 Jan 2024 14:46:25 +0800 Subject: [PATCH 19/19] add discussion regarding what makes this project interesting/challenging --- content/blog/2023-12-11-rvv-llvm-gisel/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/blog/2023-12-11-rvv-llvm-gisel/index.md b/content/blog/2023-12-11-rvv-llvm-gisel/index.md index 365d3a0c2..bd9d79e8c 100644 --- a/content/blog/2023-12-11-rvv-llvm-gisel/index.md +++ b/content/blog/2023-12-11-rvv-llvm-gisel/index.md @@ -16,7 +16,7 @@ name = "Michael Maitland" The open [RISC-V instruction set architecture (ISA)](https://riscv.org/technical/specifications/) has an interesting extension, [the RISC-V "V" Vector Extension](https://github.com/riscv/riscv-v-spec/blob/master/v-spec.adoc). The unique part of RISC-V Vector Extension is that its vector instructions can deal with flexible vector lengths, VL, which makes programming in RISC-V Vector Extension agnostic to the vector register sizes. This feature really distinguishes the RISC-V Vector Extension from the traditional SIMD extensions, such as [x86 SSE](https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions) (with a fixed size 128-bit vector length)/[AVX](https://en.wikipedia.org/wiki/Advanced_Vector_Extensions) (256-bit), and [Arm NEON](https://developer.arm.com/Architectures/Neon) (128-bit). Traditional SIMD extensions with fixed vector lengths face challenges when dealing with the changing data sizes. They must maintain compatibility and support all existing fixed-size vector lengths in their instruction set architectures. This often leads to inefficiencies, especially in loop operations where the data size/loop stride may not align perfectly with the fixed vector size, necessitating additional scalar processing for the remaining elements. And the most suitable size for the number of elements to be processed in the vector loop is hard to decide ahead of time. In contrast, the RISC-V Vector Extension eliminate this concern with its vector length agnostic principle. Particularly in loop scenarios, the RISC-V's ability to adaptively handle varying data sizes stands out. For instance, in a simple loop adding two arrays, the RISC-V can dynamically adjust the vector length for each iteration by dynamically setting the vector length. This means it can process as many elements as possible in each pass, depending on the hardware capabilities and the remaining data. This adaptive approach really simplifies the code by eliminating the need for separate scalar loops for the leftover elements. -In this project, our goal was to support LLVM Global Instruction Selection, a framework that operates on whole function for instruction selection, for the RISC-V Vector Extension on some ALU operations, such as `vadd`, `vsub`, `vand`, `vor`, and `vxor`. +In this project, our goal was to support LLVM Global Instruction Selection (GlobalISel), a framework that operates on whole function for instruction selection, for the RISC-V Vector Extension on some ALU operations, such as `vadd`, `vsub`, `vand`, `vor`, and `vxor`. Apart from adding support for RISC-V vector types and operations for GlobalISel by going down GlobalISel's pipeline, it's a challenge to bridge the LLVM world (concepts like scalable vector) and the RISC-V world (concepts like vector length and vector register grouping factor) together. And we will showcase how we address the challenge in the following sections. # A Primer on the RISC-V Vector Extension