SlideShare uma empresa Scribd logo
1 de 74
Baixar para ler offline
8 2 301 C
-
1
• ) ),
• ) ( ( , (
2
-
•
•
•
3
(
• - - ( ) ) -
• ( - - ) - - - - )
• ) - - - -
• - - ) - - - - ) -
4
1 2 3
• B
• F B IS VDMA
• E F B
• 13 4 : 8 : 6 : 2
• 13 , 4 : 8 : 6 : 2
• 13 4 : 8 : 6 : 2
• 13 4 : 8 : 6 : 2
• QR C B
• -
5
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
6https://github.com/lowRISC/riscv-llvm
3 M CL M
• 0 1 0 - . 1
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
7https://github.com/lowRISC/riscv-llvm
3 M CL M
• 4 O M LM 4 5 8 C L M C
• - 3.206- 06 2 06 02 04 - 4 602 4
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
8https://github.com/lowRISC/riscv-llvm
6GA 4 E DAIAED
• //80 6GA
• 4 -.6 674 8 1 4 4 6.1 6 0
• L C EHL
• AD C 6 6GA
9
class Triple {
public:
enum ArchType {
...,
riscv32, // RISC-V (32-bit): riscv32
riscv64, // RISC-V (64-bit): riscv64
...,
};
...
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• -- -. . 3 0
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
10https://github.com/lowRISC/riscv-llvm
3 BEBIBFEH
• D =ABE
• 4 718, )
• 718, 8 =B B= C H
• 718, 7 ,
• 718, 36 1
• 718, 36 1 86
•
• 7 CF= IBFE IJ
• 3 7 36, 7 718, 7 ,
• 3 7 36, 7 718, 2 3
• 3 7 36, 7 718, , 33 (
• 11
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• . 0 -
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
12https://github.com/lowRISC/riscv-llvm
• ..
13
RISCVTargetMachine::RISCVTargetMachine(
const Target &T, // riscv32
const Triple &TT, // riscv32---elf
StringRef CPU, // generic-rv32
StringRef FS, // Feature String: +a,+m, …
const TargetOptions &Options, // FloatABIType = FloatABI::Default
Optional<Reloc::Model> RM, // Static, PIC_, etc.
Optional<CodeModel::Model> CM, // Small, Large, Medlow, Medany, Pic
CodeGenOpt::Level OL, // -O0 -O1 -O2 -Os -O3
bool JIT)
: LLVMTargetMachine(T, computeDataLayout(TT), TT, CPU, FS, Options,
getEffectiveRelocModel(TT, RM),
getEffectiveCodeModel(CM), OL),
TLOF(make_unique<TargetLoweringObjectFileELF>()) {
initAsmInfo();
}
F 2 C - 1 MDI
• B) E) ) ) C 4 ( DF F
• ) A A C: C
• B) ) .1 B C A C ) 3F MB8DA 1 EF L
• E) ) ) 8 ED C F 8 A CB C
• ) ) A CB C D 8
• C ) D C C F : DF F
36 C 8
• 4 ( ) C IF A A CB C D ( 8 14
static std::string computeDataLayout(const Triple &TT) {
if (TT.isArch64Bit()) {
return "e-m:e-p:64:64-i64:64-i128:128-n64-S128";
} else {
assert(TT.isArch32Bit() && "only RV32 and RV64 are currently supported");
return "e-m:e-p:32:32-i64:64-n32-S128";
}
}
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• . - - 5 0
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
15https://github.com/lowRISC/riscv-llvm
+ .
•
• ) + ( .
16
------------- Classes -----------------
class ALU<bits<5> ALU:opcode = { ?, ?, ?, ?, ? }, string ALU:op = ?> {
bits<5> Opcode = { ALU:opcode{4}, ALU:opcode{3}, ALU:opcode{2}, ALU:opcode{1},
ALU:opcode{0} };
string Op = ALU:op;
string NAME = ?;
}
------------- Defs -----------------
def ADD { // ALU
bits<5> Opcode = { 1, 0, 1, 0, 1 };
string Op = "add";
string NAME = ?;
}
def SUB { // ALU
bits<5> Opcode = { 1, 0, 1, 1, 1 };
string Op = "sub";
string NAME = ?;
}
class ALU<bits<5> opcode, string op> {
bits<5> Opcode = opcode;
string Op = op;
}
def ADD : ALU<0b10101, "add">;
def SUB : ALU<0b10111, "sub">;
- / .
• B . . /
• . . . / -
• B
• . -
• B /
• . / -
17
RISCV.td
Assembler
Disassembler
Compiler
- -.
• -
18
let Namespace = "RISCV" in {
class RISCVReg<bits<5> Enc, string n, list<string> alt = []> : Register<n> {
let HWEncoding{4-0} = Enc;
let AltNames = alt;
}
def ABIRegAltName : RegAltNameIndex;
} // Namespace = "RISCV"
// Integer registers
let RegAltNameIndices = [ABIRegAltName] in {
// RegNum RegName ABIName
def X0 : RISCVReg<0, "x0", ["zero"]>, DwarfRegNum<[0]>;
def X1 : RISCVReg<1, "x1", ["ra"]>, DwarfRegNum<[1]>;
def X2 : RISCVReg<2, "x2", ["sp"]>, DwarfRegNum<[2]>;
...
def X31 : RISCVReg<31, "x31", ["t6"]>, DwarfRegNum<[31]>;
}
// GPR: {X0, X1, …, X31}
def GPR : RegisterClass< "RISCV", [i32],
32, (add (sequence "X%u", 0, 31))>
. -
19
// R-type (e.g. add rd, rs1, rs2) I-type, S-type, etc.
class RVInstR<bits<7> funct7, bits<3> funct3, RISCVOpcode opcode, dag outs,
dag ins, string opcodestr, string argstr>
: RVInst<outs, ins, opcodestr, argstr, []> {
bits<5> rs2; //
bits<5> rs1;
bits<5> rd;
let Inst{31-25} = funct7; //
let Inst{24-20} = rs2;
let Inst{19-15} = rs1;
let Inst{14-12} = funct3;
let Inst{11-7} = rd;
let Opcode = opcode.Value;
}
-
• . .
20
include "RISCVInstrFormats.td"
// Instruction Class Templates
class ALU_rr<bits<7> funct7, bits<3> funct3, string opcodestr>
: RVInstR<funct7, funct3, OPC_OP, (outs GPR:$rd),
(ins GPR:$rs1, GPR:$rs2),
opcodestr, "$rd, $rs1, $rs2">;
def ADD : ALU_rr<0b0000000, 0b000, "add">; // add rd, rs1, rs2
.-
• $ llvm-tblgen ./RISCV.td -I ../../../include/
21
def ADD { // Instruction RVInst RVInstR ALU_rr
field bits<32> Inst = { 0, 0, 0, 0, 0, 0, 0, // funct7
rs2{4}, rs2{3}, rs2{2}, rs2{1}, rs2{0}, // rs2
rs1{4}, rs1{3}, rs1{2}, rs1{1}, rs1{0}, // rs1
0, 0, 0, // funct3
rd{4}, rd{3}, rd{2}, rd{1}, rd{0}, // rd
0, 1, 1, 0, 0, 1, 1 }; // opcode
string Namespace = "RISCV";
dag OutOperandList = (outs GPR:$rd);
dag InOperandList = (ins GPR:$rs1, GPR:$rs2);
string AsmString = "add $rd, $rs1, $rs2"; // AsmParser, InstrPrinter
list<dag> Pattern = []; // pattern
...
int Size = 4; // 4-byte
bit isReturn = 0; // return
bit isBranch = 0; // branch
bits<7> Opcode = { 0, 1, 1, 0, 0, 1, 1 };
bits<5> rs2 = { ?, ?, ?, ?, ? };
bits<5> rs1 = { ?, ?, ?, ?, ? };
bits<5> rd = { ?, ?, ?, ?, ? };
}
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• .. 6 0 6- -
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
22https://github.com/lowRISC/riscv-llvm
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• .. 7 - 7 7 8-0
• .. 78 8 . 7 - 77 8 8-0
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
23https://github.com/lowRISC/riscv-llvm
& . & .
• &
• .
• add x1, x2, x3 -> MCInst
• . & .
• .
• MCInst -> add x1, x2, x3
•
•
• [0xb3,0x00,0x31,0x00] -> MCInst
•
• MCInst -> [0xb3,0x00,0x31,0x00]
24
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 332 -2 00 2 3 .
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
25https://github.com/lowRISC/riscv-llvm
- 3
• 3 -3
• 3 3 - 3
• /
• 3 3 - 3
• / /
• - 3
• - 3 3
•
• 3 3 -2
• /
• - 3
•
•
•
• 26
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• - 1 0 .
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
27https://github.com/lowRISC/riscv-llvm
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 00 1 . 1 . 1 -
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
28https://github.com/lowRISC/riscv-llvm
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 221 1 2 - 00 - .- 2 2 .
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
29https://github.com/lowRISC/riscv-llvm
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 3 -.0. . 1
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
30https://github.com/lowRISC/riscv-llvm
(( ) ) )- )
• (( ) ) )- ) a
e C a
• :
• :
•
((
•
((
31
// Callee-save
callee:
sw s0, 12(sp)
...
mv s0, a1 # s0
...
lw s0, 12(sp)
// Caller-save
caller:
sw ra, 12(sp)
...
call callee
...
lw ra, 12(sp)
.
• . .
32
// x10(a0) x11(a1)
int add(int a, int b) {
return a + b; // x10(a0)
}
void caller() {
// x10(a0) x11(a1)
int result = add(3, 5);
} // x10(a0)
.
33
• .
// X10 X11
def RetCC_RISCV32 : CallingConv<[CCIfType<[i32], CCAssignToReg<[X10, X11]>>]>;
// RISCV 32-bit C Calling convention.
def CC_RISCV32 : CallingConv<[
// Promote i1/i8/i16 args to i32
CCIfType<[ i1, i8, i16 ], CCPromoteToType<i32>>,
// X10~X17
CCIfType<[i32], CCAssignToReg<[ X10, X11, X12, X13, X14, X15, X16, X17]>>,
// size 4 bytes, alignment 4 bytes
CCAssignToStack<4, 4>
]>;
// Callee-save
def CSR : CalleeSavedRegs<(add X1, X3, X4, X8, X9, (sequence "X%u", 18, 27))>;
34
LLVM IR
Map IR instructions
to DAG
SelectionDAGBuilder
Target
Lowering
Instruction
Selection
))- ( :
• :
• ))- ( :
• : :
• : :
35
a
add
b
c
add
36
int add(int a, int b) {
return a + b;
}
define i32 @add(i32 signext %a,
i32 signext %b) #0 {
entry:
%add = add nsw i32 %a, %b
ret i32 %add
}
t0: ch = EntryToken
t4: i32,ch = CopyFromReg t0, Register:i32 %1
t2: i32,ch = CopyFromReg t0, Register:i32 %0
t5: i32 = add nsw t4, t2
t7: ch,glue = CopyToReg t0, Register:i32 %x10_32, t5
t8: ch = RISCVISD::RET_FLAG t7, Register:i32 %x10_32, t7:1
37
LLVM IR
Map IR instructions
to DAG
SelectionDAGBuilder
Target
Lowering
Instruction
Selection
) 3 - 2 -3
• ) 3 - SI T
) 3 - SI
• ) 3 - S
• ) 3 -
• 4 36 2 (- - 2
) 3 - SI
• void setOperationAction(
unsigned Op, // S
MVT VT, //
LegalizeAction Action) // TL Target
// I S
38
3
• 3
• O T
• L T
• 3 LA T PC L
• L
• 3
39
setOperationAction(ISD::ADD, MVT::i32, Legal)
setOperationAction(ISD::ADD, MVT::i8, Promote)
AddPromotedToType(ISD::ADD, MVT::i8, MVT::i32)
// P T L shift T PC L E
setOperationAction(ISD::MUL, MVT::i32, Expand);
setOperationAction(ISD::GlobalAddress, i32, Custom);
.
• .
40
RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM,
const RISCVSubtarget &STI)
: TargetLowering(TM), Subtarget(STI) {
// Set up the register classes.
addRegisterClass(MVT::i32, &RISCV::GPRRegClass);
// 32-bit promote 32-bit
// 32-bit 32-bit
computeRegisterProperties(STI.getRegisterInfo());
setStackPointerRegisterToSaveRestore(RISCV::X2);
// TODO: add all necessary setOperationAction calls.
setOperationAction(ISD::MUL, XLenVT, Expand);
...
setOperationAction(ISD::GlobalAddress, i32, Custom);
...
}
•
•
•
41
SDValue LowerFormalArguments(SDValue Chain, CallingConv::ID CallConv,
bool IsVarArg,
const SmallVectorImpl<ISD::InputArg> &Ins,
const SDLoc &DL, SelectionDAG &DAG,
SmallVectorImpl<SDValue> &InVals) const override;
SDValue LowerReturn(SDValue Chain, CallingConv::ID CallConv, bool IsVarArg,
const SmallVectorImpl<ISD::OutputArg> &Outs,
const SmallVectorImpl<SDValue> &OutVals, const SDLoc &DL,
SelectionDAG &DAG) const override;
SDValue LowerCall(TargetLowering::CallLoweringInfo &CLI,
SmallVectorImpl<SDValue> &InVals) const override;
42
LLVM IR
Map IR instructions
to DAG
SelectionDAGBuilder
Target
Lowering
Instruction
Selection
• -
• -
43
// RISCVInstrInto.td
def Pat<(add GPR:$rs1, GPR:$rs2), (ADD GPR:$rs1, GPR:$rs2)>;
- - - -
44
// RISCVInstrInto.td
def Pat<(add GPR:$rs1, simm12:$imm12), (ADDI GPR:$rs1, simm12:$imm12)>;
. . - .
• -
45
void RISCVDAGToDAGISel::Select(SDNode *Node) {
// If we have a custom node, we have already selected
if (Node->isMachineOpcode()) {
DEBUG(dbgs() << "== "; Node->dump(CurDAG); dbgs() << "n");
Node->setNodeId(-1);
return;
}
// C
if (Node->getOpcode() == ISD::AND) {
...
return;
}
// A .td pattern
SelectCode(Node);
}
// RISCVInstrInto.td
def Pat<(add GPR:$rs1, GPR:$rs2), (ADD GPR:$rs1, GPR:$rs2)>;
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• - 44 1 0 - 4 .
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
46https://github.com/lowRISC/riscv-llvm
• 2 3
- -
47
// 3 12-bit sign-extension
def LO12Sext : SDNodeXForm<imm, [{
return CurDAG->getTargetConstant(SignExtend64<12>(N->getZExtValue()),
SDLoc(N), N->getValueType(0));
}]>;
// 32-bit 20-bit 11 1 1
def HI20 : SDNodeXForm<imm, [{
return CurDAG->getTargetConstant(((N->getZExtValue()+0x800) >> 12) & 0xfffff,
SDLoc(N), N->getValueType(0));
}]>;
def simm32 : ImmLeaf<XLenVT, [{return isInt<32>(Imm);}]>;
// simm12 -> addi rd, x0, simm12
def : Pat<(simm12:$imm), (ADDI X0, simm12:$imm)>;
// simm32 -> lui rd, uimm20 + addi rd, rd, simm12
def : Pat<(simm32:$imm), (ADDI (LUI (HI20 imm:$imm)), (LO12Sext imm:$imm))>;
# 0xabcd5566 a0, simm32 = (uimm20 << 12) + simm12
lui a0, 0xabcd5 # a0 = 0xabcd5
addi a0, a0, 0x566 # a0 = 0xabcd5566
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• - 1 5 0 0 15 .
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
48https://github.com/lowRISC/riscv-llvm
49
def : Pat<(load (add GPR:$rs1, simm12:$imm12)), (LW GPR:$rs1, simm12:$imm12)>;
LW rd, rs, simm12
50
/// Loads
multiclass LdPat<PatFrag LoadOp, RVInst Inst> {
def : Pat<(LoadOp GPR:$rs1), (Inst GPR:$rs1, 0)>;
def : Pat<(LoadOp (add GPR:$rs1, simm12:$imm12)),
(Inst GPR:$rs1, simm12:$imm12)>;
}
defm : LdPat<sextloadi8, LB>;
defm : LdPat<extloadi8, LB>;
defm : LdPat<sextloadi16, LH>;
defm : LdPat<extloadi16, LH>;
defm : LdPat<load, LW>;
defm : LdPat<zextloadi8, LBU>;
defm : LdPat<zextloadi16, LHU>;
/// Stores
multiclass StPat<PatFrag StoreOp, RVInst Inst> {
def : Pat<(StoreOp GPR:$rs2, GPR:$rs1), (Inst GPR:$rs2, GPR:$rs1, 0)>;
def : Pat<(StoreOp GPR:$rs2, (add GPR:$rs1, simm12:$imm12)),
(Inst GPR:$rs2, GPR:$rs1, simm12:$imm12)>;
}
defm : StPat<truncstorei8, SB>;
defm : StPat<truncstorei16, SH>;
defm : StPat<store, SW>;
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• . 6 - 6 6 6 0 .1
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
51https://github.com/lowRISC/riscv-llvm
:
52
@G = global i32 0
define i32 @lw_global(i32 %a) {
%1 = load volatile i32, i32* @G
ret i32 %1
}
lui a0, %hi(G)
addi a0, a0, %lo(G)
lw a0, 0(a0)
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• . - 070 1 7
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
53https://github.com/lowRISC/riscv-llvm
54
define void @condbr(i32 %a, i32 %b, i32 *%c) {
%tst = icmp ne i32 %a, %b
br i1 %tst, label %end, label %equal
equal:
store i32 1, i32* %c
br label %end
end:
ret void
}
def : Pat<(brcond (i32 (setne GPR:$rs1, GPR:$rs2)), bb:$imm12)
(BEQ GPR:$rs1, GPR:$rs2, simm13_lsb0:$imm12)>;
BEQ rs1, rs2, simm13_lsb0
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 00 1 1 . . -- 0
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
55https://github.com/lowRISC/riscv-llvm
• RISCVTargetLowering::LowerCall
• 0
• 7
• 0
56
57
let isCall = 1, Defs=[X1] in
def PseudoCALL : Pseudo<(outs), (ins GPR:$rs1), [(Call GPR:$rs1)]>,
PseudoInstExpansion<(JALR X1, GPR:$rs1, 0)>;
lui a0, %hi(external_function)
addi a3, a0, %lo(external_function)
// a0~a7
addi a0, zero, 1
addi a1, zero, 2
addi a2, zero, 3
// /
jalr ra, a3, 0
declare i32 @external_function(i32, i32, i32)
define i32 @test_call_external() nounwind {
%1 = call i32 @external_function(i32 1, i32 2, i32 3)
ret i32 %1
}
JALR rd, rs1, simm12
• target address: rs1 + simm12
• rd = pc + 4
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• . . 9 . 0 9-1
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
58https://github.com/lowRISC/riscv-llvm
59
:
define i32 @bare_select(i1 %a, i32 %b, i32 %c) {
%1 = select i1 %a, i32 %b, i32 %c
ret i32 %1
}
bare_select:
# %bb.0:
andi a0, a0, 1
addi a3, zero, 0
bne a0, a3, .LBB0_2
# %bb.1:
addi a1, a2, 0
.LBB0_2:
addi a0, a1, 0
jalr zero, ra, 0
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 02 02 2- 0 - -0 .
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
60https://github.com/lowRISC/riscv-llvm
29 I
• 3 L I 9D 3 4 7 9E I 9
• 3 4 7 3 F EAI AI L 9E AI L AE A C 9 IAE 9
• 3 4 7 3 4 7 -0. AE I 9
• 3 4 7 I 9 E 9
• 3 4 7 9IA 3 4 7 EI .F D9 I EI E F 3 AI 9
• 3 4 7 9 FE I 3 4 7 1 59 I 9
• 3 4 7 9IA 3 4 7 ID29 I 9
• 3 4 7 3 4 7 EI 2 AE 9E 9IA 1 9II D C 9
• 3 4 7 I F F 9CC 37 AEI AFEI 9
• 3 4 7 I F F AI9II D C 9
• 3 4 7 FDDFE A I 9E CF 9 AFEI 9
• 3 4 7 I F F 9 8CC 8 I 8 I 9
• 3 4 7 EA A9C F E I F F 06 F 9 AFEI 9
• 3 4 7 F E I F F D9 A9CAPAE FEI 9E I 9
• 3 4 7 F E I F F D DF F 9 AFEI 9
• 3 4 7 F E I F F D DF F 9 AFEI FE CF 9 9
• 3 4 7 F E F FE A AFE9C 9E I 9
• 3 4 7 4 F F E AFE 9CCI 9
• 3 4 7 D C D E CFM AE F 4 4-0- 5 9
• 3 4 7 4 F 9E I I F 9 L9 A F 9 A AFE9C 9
• 1 0 . - - .2
• 3 4 7 4 F CFM AE . 9D E 9
• 3 4 7 D C D E FCF 9E ACF AEI AFE 9
• 3 4 7 CCFM CFM AE F E9DA 8I 9 9CCF I 9 I9L 9
• 3 4 7 I FD 83 4 7 9CCAE FEL E AFE 9E AD 9
• 3 4 7 4 F F L9 9 I 9
• 3 4 7 4 F I 9 9D I 9E F I I F A I 9
• 3 4 7 9IA I F F AECAE 9ID FEI 9AE I 9
• 3 4 7 I F F CCLD 9D 9 II E9 9
• 3 4 7 D C D E 9E 9E9C IAI 9
61https://github.com/lowRISC/riscv-llvm
addi a1, zero, 0
sub a0, a1, a0
sub a0, zero, a0
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 2 2 . 0 -
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
62https://github.com/lowRISC/riscv-llvm
63
// Replace FrameIndex with Offset
void RISCVRegisterInfo::eliminateFrameIndex
// Calculate Offset by FrameIndex
int RISCVFrameLowering::getFrameIndexReference
OffsetHigh Address
Low Address
fp/s0
sp
ra
s0/fp
s1
s2
s3
.
.
.
FrameIndex
0
1
2
3
4
sp + 12
sp + 16
sp + 20
sp + 24
sp + 28
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 03 0 3 2 2 3. 2 . .2 3 -
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
64https://github.com/lowRISC/riscv-llvm
0 / 0 / ) -/
• /
• I
• ( - ( //
•
• P ( // -
E (
• I
• -/
• ( ( //
- P E
•
•
•
65
func:
// Prologue
addi sp, sp, -32
sw ra, 28(sp)
sw s0/fp, 24(sp)
sw s1, 20(sp)
sw s2, 16(sp)
sw s3, 12(sp)
addi s0/fp, sp, 32
...
// callee-save
// register
...
// Epilog
lw s3, 12(sp)
lw s2, 16(sp)
lw s1, 20(sp)
lw s0/fp, 24(sp)
lw ra, 28(sp)
addi sp, sp, 32
ret
. .
• .
66
void RISCVFrameLowering::emitPrologue(MachineFunction &MF,
MachineBasicBlock &MBB) const {
...
uint64_t StackSize = MFI.getStackSize();
...
// addi sp, sp, -StackSize
adjustReg(MBB, MBBI, DL, SPReg, SPReg, -StackSize, MachineInstr::FrameSetup);
...
// addi fp, sp, StackSize
adjustReg(MBB, MBBI, DL, FPReg, SPReg, StackSize, MachineInstr::FrameSetup);
}
void RISCVFrameLowering::emitEpilogue(MachineFunction &MF,
MachineBasicBlock &MBB) const {
...
uint64_t StackSize = MFI.getStackSize();
...
// Deallocate stack: addi sp, sp, StackSize
adjustReg(MBB, MBBI, DL, SPReg, SPReg, StackSize, MachineInstr::FrameDestroy);
}
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• - . 4 2 2 - 0
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
67https://github.com/lowRISC/riscv-llvm
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 2 0 . - 0 025 5
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
68https://github.com/lowRISC/riscv-llvm
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 2..- - 0 .
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
69https://github.com/lowRISC/riscv-llvm
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 7 . 2-7 3 ..7- 7 0 7
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
70https://github.com/lowRISC/riscv-llvm
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 0 8 . 0 0 - 2 8 0 8 8
• 4 5 8 L I M AI FFO A LL M M C
• 4 5 8 F M C FRLDL M C
71https://github.com/lowRISC/riscv-llvm
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 2 -2 0 - 0 .
• 4 5 8 F M C FRLDL M C
72https://github.com/lowRISC/riscv-llvm
3 M CL M
• 4 O M LM 4 5 8 C L M C
• 4 5 8 4 I DL DL O DL O D M D F LD M C
• 4 5 8 4 5 8 -0. AD L M C
• 4 5 8 LM E M C
• 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C
• 4 5 8 I L 4 5 8 1 6 M L M C
• 4 5 8 LD 4 5 8 L 3 L M C
• 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C
• 4 5 8 L I M AI FF 48 D LM MDI L M C
• 4 5 8 L I M AI DL LL FR M C
• 4 5 8 I I AD L FI MDI L M C
• 4 5 8 L I M MI M FF M LM C EL R M C
• 4 5 8 DMD F I L I M AI 07 I MDI L M C
• 4 5 8 I L I M AI M D FDSD I LM ML M C
• 4 5 8 I L I M AI I R I MDI L M C
• 4 5 8 I L I M AI I R I MDI L I FI M C
• 4 5 8 I AI I DMDI F C L M C
• 4 5 8 5 I M AI A MDI FFL M C
• 4 5 8 F M FIP D IA 5 5-0- 6 M C
• 4 5 8 5 I M M LML AI O D MR IA DMDI F M C
• 4 5 8 7L DLM 9 -42 AI I LM M M C
• 4 5 8 5 I M FIP D . M C
• 4 5 8 F M IFI DFI D L MDI M C
• 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C
• 4 5 8 LMI 4 5 8 FFD I O MDI D M C
• 4 5 8 5 I M AI O L M C
• 4 5 8 5 I M LM E A L IAAL ML MI DML M C
• 4 5 8 LD L I M AI D FD L I LM D ML M C
• 4 5 8 L I M AI FFO A LL M M C
• .0- . 3 - 0 3
73https://github.com/lowRISC/riscv-llvm
: .
• :
• : . :
• : / .
• : / : -: :
•
74

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Play with FILE Structure - Yet Another Binary Exploit Technique
Play with FILE Structure - Yet Another Binary Exploit TechniquePlay with FILE Structure - Yet Another Binary Exploit Technique
Play with FILE Structure - Yet Another Binary Exploit Technique
 
Instruction Combine in LLVM
Instruction Combine in LLVMInstruction Combine in LLVM
Instruction Combine in LLVM
 
Heap exploitation
Heap exploitationHeap exploitation
Heap exploitation
 
Opaque Pointers Are Coming
Opaque Pointers Are ComingOpaque Pointers Are Coming
Opaque Pointers Are Coming
 
快快樂樂SIMD
快快樂樂SIMD快快樂樂SIMD
快快樂樂SIMD
 
Sigreturn Oriented Programming
Sigreturn Oriented ProgrammingSigreturn Oriented Programming
Sigreturn Oriented Programming
 
台科逆向簡報
台科逆向簡報台科逆向簡報
台科逆向簡報
 
LLVM Register Allocation (2nd Version)
LLVM Register Allocation (2nd Version)LLVM Register Allocation (2nd Version)
LLVM Register Allocation (2nd Version)
 
ROP 輕鬆談
ROP 輕鬆談ROP 輕鬆談
ROP 輕鬆談
 
LLVM Instruction Selection
LLVM Instruction SelectionLLVM Instruction Selection
LLVM Instruction Selection
 
Anti Debugging
Anti DebuggingAnti Debugging
Anti Debugging
 
Windows 10 Nt Heap Exploitation (English version)
Windows 10 Nt Heap Exploitation (English version)Windows 10 Nt Heap Exploitation (English version)
Windows 10 Nt Heap Exploitation (English version)
 
Gcc porting
Gcc portingGcc porting
Gcc porting
 
Binary exploitation - AIS3
Binary exploitation - AIS3Binary exploitation - AIS3
Binary exploitation - AIS3
 
ret2dl resolve
ret2dl resolveret2dl resolve
ret2dl resolve
 
LLVM 總是打開你的心:從電玩模擬器看編譯器應用實例
LLVM 總是打開你的心:從電玩模擬器看編譯器應用實例LLVM 總是打開你的心:從電玩模擬器看編譯器應用實例
LLVM 總是打開你的心:從電玩模擬器看編譯器應用實例
 
0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと0章 Linuxカーネルを読む前に最低限知っておくべきこと
0章 Linuxカーネルを読む前に最低限知っておくべきこと
 
JIT のコードを読んでみた
JIT のコードを読んでみたJIT のコードを読んでみた
JIT のコードを読んでみた
 
katagaitai CTF workshop #10 AESに対する相関電力解析
katagaitai CTF workshop #10 AESに対する相関電力解析katagaitai CTF workshop #10 AESに対する相関電力解析
katagaitai CTF workshop #10 AESに対する相関電力解析
 
Tcache Exploitation
Tcache ExploitationTcache Exploitation
Tcache Exploitation
 

Semelhante a llvm basic porting for risc v

Argoによる機械学習実行基盤の構築・運用からみえてきたこと
Argoによる機械学習実行基盤の構築・運用からみえてきたことArgoによる機械学習実行基盤の構築・運用からみえてきたこと
Argoによる機械学習実行基盤の構築・運用からみえてきたこと
Shinsaku Kono
 

Semelhante a llvm basic porting for risc v (12)

Hackarade #05 IoT tutorial
Hackarade #05 IoT tutorialHackarade #05 IoT tutorial
Hackarade #05 IoT tutorial
 
OpenStack Summit & KubeConからみるコンテナ技術の最新トレンド (更新版) - OpenStack Day Tokyo 2018講演資料
OpenStack Summit & KubeConからみるコンテナ技術の最新トレンド (更新版) - OpenStack Day Tokyo 2018講演資料OpenStack Summit & KubeConからみるコンテナ技術の最新トレンド (更新版) - OpenStack Day Tokyo 2018講演資料
OpenStack Summit & KubeConからみるコンテナ技術の最新トレンド (更新版) - OpenStack Day Tokyo 2018講演資料
 
交通事故削減支援サービス DRIVE CHARTにおけるAI技術
交通事故削減支援サービスDRIVE CHARTにおけるAI技術交通事故削減支援サービスDRIVE CHARTにおけるAI技術
交通事故削減支援サービス DRIVE CHARTにおけるAI技術
 
CVPR 2020 報告
CVPR 2020 報告CVPR 2020 報告
CVPR 2020 報告
 
Makinarocks demoday (2019.05.30)
Makinarocks demoday (2019.05.30)Makinarocks demoday (2019.05.30)
Makinarocks demoday (2019.05.30)
 
[DL輪読会]Addressing Failure Prediction by Learning Model Confidence
[DL輪読会]Addressing Failure Prediction by Learning Model Confidence[DL輪読会]Addressing Failure Prediction by Learning Model Confidence
[DL輪読会]Addressing Failure Prediction by Learning Model Confidence
 
Argoによる機械学習実行基盤の構築・運用からみえてきたこと
Argoによる機械学習実行基盤の構築・運用からみえてきたことArgoによる機械学習実行基盤の構築・運用からみえてきたこと
Argoによる機械学習実行基盤の構築・運用からみえてきたこと
 
Facilities for Agile
Facilities for AgileFacilities for Agile
Facilities for Agile
 
Programming != Writing Code
Programming != Writing CodeProgramming != Writing Code
Programming != Writing Code
 
Power transmission Rubber V Belts and Flat Belting
Power transmission Rubber V Belts and Flat BeltingPower transmission Rubber V Belts and Flat Belting
Power transmission Rubber V Belts and Flat Belting
 
Google Polymer in Action
Google Polymer in ActionGoogle Polymer in Action
Google Polymer in Action
 
Ppt On Hardware
Ppt On HardwarePpt On Hardware
Ppt On Hardware
 

Último

%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
masabamasaba
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
chiefasafspells
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 

Último (20)

Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni%in Benoni+277-882-255-28 abortion pills for sale in Benoni
%in Benoni+277-882-255-28 abortion pills for sale in Benoni
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security Program
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 

llvm basic porting for risc v

  • 1. 8 2 301 C - 1
  • 2. • ) ), • ) ( ( , ( 2
  • 4. ( • - - ( ) ) - • ( - - ) - - - - ) • ) - - - - • - - ) - - - - ) - 4
  • 5. 1 2 3 • B • F B IS VDMA • E F B • 13 4 : 8 : 6 : 2 • 13 , 4 : 8 : 6 : 2 • 13 4 : 8 : 6 : 2 • 13 4 : 8 : 6 : 2 • QR C B • - 5
  • 6. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 6https://github.com/lowRISC/riscv-llvm
  • 7. 3 M CL M • 0 1 0 - . 1 • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 7https://github.com/lowRISC/riscv-llvm
  • 8. 3 M CL M • 4 O M LM 4 5 8 C L M C • - 3.206- 06 2 06 02 04 - 4 602 4 • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 8https://github.com/lowRISC/riscv-llvm
  • 9. 6GA 4 E DAIAED • //80 6GA • 4 -.6 674 8 1 4 4 6.1 6 0 • L C EHL • AD C 6 6GA 9 class Triple { public: enum ArchType { ..., riscv32, // RISC-V (32-bit): riscv32 riscv64, // RISC-V (64-bit): riscv64 ..., }; ...
  • 10. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • -- -. . 3 0 • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 10https://github.com/lowRISC/riscv-llvm
  • 11. 3 BEBIBFEH • D =ABE • 4 718, ) • 718, 8 =B B= C H • 718, 7 , • 718, 36 1 • 718, 36 1 86 • • 7 CF= IBFE IJ • 3 7 36, 7 718, 7 , • 3 7 36, 7 718, 2 3 • 3 7 36, 7 718, , 33 ( • 11
  • 12. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • . 0 - • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 12https://github.com/lowRISC/riscv-llvm
  • 13. • .. 13 RISCVTargetMachine::RISCVTargetMachine( const Target &T, // riscv32 const Triple &TT, // riscv32---elf StringRef CPU, // generic-rv32 StringRef FS, // Feature String: +a,+m, … const TargetOptions &Options, // FloatABIType = FloatABI::Default Optional<Reloc::Model> RM, // Static, PIC_, etc. Optional<CodeModel::Model> CM, // Small, Large, Medlow, Medany, Pic CodeGenOpt::Level OL, // -O0 -O1 -O2 -Os -O3 bool JIT) : LLVMTargetMachine(T, computeDataLayout(TT), TT, CPU, FS, Options, getEffectiveRelocModel(TT, RM), getEffectiveCodeModel(CM), OL), TLOF(make_unique<TargetLoweringObjectFileELF>()) { initAsmInfo(); }
  • 14. F 2 C - 1 MDI • B) E) ) ) C 4 ( DF F • ) A A C: C • B) ) .1 B C A C ) 3F MB8DA 1 EF L • E) ) ) 8 ED C F 8 A CB C • ) ) A CB C D 8 • C ) D C C F : DF F 36 C 8 • 4 ( ) C IF A A CB C D ( 8 14 static std::string computeDataLayout(const Triple &TT) { if (TT.isArch64Bit()) { return "e-m:e-p:64:64-i64:64-i128:128-n64-S128"; } else { assert(TT.isArch32Bit() && "only RV32 and RV64 are currently supported"); return "e-m:e-p:32:32-i64:64-n32-S128"; } }
  • 15. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • . - - 5 0 • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 15https://github.com/lowRISC/riscv-llvm
  • 16. + . • • ) + ( . 16 ------------- Classes ----------------- class ALU<bits<5> ALU:opcode = { ?, ?, ?, ?, ? }, string ALU:op = ?> { bits<5> Opcode = { ALU:opcode{4}, ALU:opcode{3}, ALU:opcode{2}, ALU:opcode{1}, ALU:opcode{0} }; string Op = ALU:op; string NAME = ?; } ------------- Defs ----------------- def ADD { // ALU bits<5> Opcode = { 1, 0, 1, 0, 1 }; string Op = "add"; string NAME = ?; } def SUB { // ALU bits<5> Opcode = { 1, 0, 1, 1, 1 }; string Op = "sub"; string NAME = ?; } class ALU<bits<5> opcode, string op> { bits<5> Opcode = opcode; string Op = op; } def ADD : ALU<0b10101, "add">; def SUB : ALU<0b10111, "sub">;
  • 17. - / . • B . . / • . . . / - • B • . - • B / • . / - 17 RISCV.td Assembler Disassembler Compiler
  • 18. - -. • - 18 let Namespace = "RISCV" in { class RISCVReg<bits<5> Enc, string n, list<string> alt = []> : Register<n> { let HWEncoding{4-0} = Enc; let AltNames = alt; } def ABIRegAltName : RegAltNameIndex; } // Namespace = "RISCV" // Integer registers let RegAltNameIndices = [ABIRegAltName] in { // RegNum RegName ABIName def X0 : RISCVReg<0, "x0", ["zero"]>, DwarfRegNum<[0]>; def X1 : RISCVReg<1, "x1", ["ra"]>, DwarfRegNum<[1]>; def X2 : RISCVReg<2, "x2", ["sp"]>, DwarfRegNum<[2]>; ... def X31 : RISCVReg<31, "x31", ["t6"]>, DwarfRegNum<[31]>; } // GPR: {X0, X1, …, X31} def GPR : RegisterClass< "RISCV", [i32], 32, (add (sequence "X%u", 0, 31))>
  • 19. . - 19 // R-type (e.g. add rd, rs1, rs2) I-type, S-type, etc. class RVInstR<bits<7> funct7, bits<3> funct3, RISCVOpcode opcode, dag outs, dag ins, string opcodestr, string argstr> : RVInst<outs, ins, opcodestr, argstr, []> { bits<5> rs2; // bits<5> rs1; bits<5> rd; let Inst{31-25} = funct7; // let Inst{24-20} = rs2; let Inst{19-15} = rs1; let Inst{14-12} = funct3; let Inst{11-7} = rd; let Opcode = opcode.Value; }
  • 20. - • . . 20 include "RISCVInstrFormats.td" // Instruction Class Templates class ALU_rr<bits<7> funct7, bits<3> funct3, string opcodestr> : RVInstR<funct7, funct3, OPC_OP, (outs GPR:$rd), (ins GPR:$rs1, GPR:$rs2), opcodestr, "$rd, $rs1, $rs2">; def ADD : ALU_rr<0b0000000, 0b000, "add">; // add rd, rs1, rs2
  • 21. .- • $ llvm-tblgen ./RISCV.td -I ../../../include/ 21 def ADD { // Instruction RVInst RVInstR ALU_rr field bits<32> Inst = { 0, 0, 0, 0, 0, 0, 0, // funct7 rs2{4}, rs2{3}, rs2{2}, rs2{1}, rs2{0}, // rs2 rs1{4}, rs1{3}, rs1{2}, rs1{1}, rs1{0}, // rs1 0, 0, 0, // funct3 rd{4}, rd{3}, rd{2}, rd{1}, rd{0}, // rd 0, 1, 1, 0, 0, 1, 1 }; // opcode string Namespace = "RISCV"; dag OutOperandList = (outs GPR:$rd); dag InOperandList = (ins GPR:$rs1, GPR:$rs2); string AsmString = "add $rd, $rs1, $rs2"; // AsmParser, InstrPrinter list<dag> Pattern = []; // pattern ... int Size = 4; // 4-byte bit isReturn = 0; // return bit isBranch = 0; // branch bits<7> Opcode = { 0, 1, 1, 0, 0, 1, 1 }; bits<5> rs2 = { ?, ?, ?, ?, ? }; bits<5> rs1 = { ?, ?, ?, ?, ? }; bits<5> rd = { ?, ?, ?, ?, ? }; }
  • 22. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • .. 6 0 6- - • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 22https://github.com/lowRISC/riscv-llvm
  • 23. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • .. 7 - 7 7 8-0 • .. 78 8 . 7 - 77 8 8-0 • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 23https://github.com/lowRISC/riscv-llvm
  • 24. & . & . • & • . • add x1, x2, x3 -> MCInst • . & . • . • MCInst -> add x1, x2, x3 • • • [0xb3,0x00,0x31,0x00] -> MCInst • • MCInst -> [0xb3,0x00,0x31,0x00] 24
  • 25. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 332 -2 00 2 3 . • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 25https://github.com/lowRISC/riscv-llvm
  • 26. - 3 • 3 -3 • 3 3 - 3 • / • 3 3 - 3 • / / • - 3 • - 3 3 • • 3 3 -2 • / • - 3 • • • • 26
  • 27. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • - 1 0 . • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 27https://github.com/lowRISC/riscv-llvm
  • 28. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 00 1 . 1 . 1 - • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 28https://github.com/lowRISC/riscv-llvm
  • 29. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 221 1 2 - 00 - .- 2 2 . • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 29https://github.com/lowRISC/riscv-llvm
  • 30. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 3 -.0. . 1 • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 30https://github.com/lowRISC/riscv-llvm
  • 31. (( ) ) )- ) • (( ) ) )- ) a e C a • : • : • (( • (( 31 // Callee-save callee: sw s0, 12(sp) ... mv s0, a1 # s0 ... lw s0, 12(sp) // Caller-save caller: sw ra, 12(sp) ... call callee ... lw ra, 12(sp)
  • 32. . • . . 32 // x10(a0) x11(a1) int add(int a, int b) { return a + b; // x10(a0) } void caller() { // x10(a0) x11(a1) int result = add(3, 5); } // x10(a0)
  • 33. . 33 • . // X10 X11 def RetCC_RISCV32 : CallingConv<[CCIfType<[i32], CCAssignToReg<[X10, X11]>>]>; // RISCV 32-bit C Calling convention. def CC_RISCV32 : CallingConv<[ // Promote i1/i8/i16 args to i32 CCIfType<[ i1, i8, i16 ], CCPromoteToType<i32>>, // X10~X17 CCIfType<[i32], CCAssignToReg<[ X10, X11, X12, X13, X14, X15, X16, X17]>>, // size 4 bytes, alignment 4 bytes CCAssignToStack<4, 4> ]>; // Callee-save def CSR : CalleeSavedRegs<(add X1, X3, X4, X8, X9, (sequence "X%u", 18, 27))>;
  • 34. 34 LLVM IR Map IR instructions to DAG SelectionDAGBuilder Target Lowering Instruction Selection
  • 35. ))- ( : • : • ))- ( : • : : • : : 35 a add b c add
  • 36. 36 int add(int a, int b) { return a + b; } define i32 @add(i32 signext %a, i32 signext %b) #0 { entry: %add = add nsw i32 %a, %b ret i32 %add } t0: ch = EntryToken t4: i32,ch = CopyFromReg t0, Register:i32 %1 t2: i32,ch = CopyFromReg t0, Register:i32 %0 t5: i32 = add nsw t4, t2 t7: ch,glue = CopyToReg t0, Register:i32 %x10_32, t5 t8: ch = RISCVISD::RET_FLAG t7, Register:i32 %x10_32, t7:1
  • 37. 37 LLVM IR Map IR instructions to DAG SelectionDAGBuilder Target Lowering Instruction Selection
  • 38. ) 3 - 2 -3 • ) 3 - SI T ) 3 - SI • ) 3 - S • ) 3 - • 4 36 2 (- - 2 ) 3 - SI • void setOperationAction( unsigned Op, // S MVT VT, // LegalizeAction Action) // TL Target // I S 38
  • 39. 3 • 3 • O T • L T • 3 LA T PC L • L • 3 39 setOperationAction(ISD::ADD, MVT::i32, Legal) setOperationAction(ISD::ADD, MVT::i8, Promote) AddPromotedToType(ISD::ADD, MVT::i8, MVT::i32) // P T L shift T PC L E setOperationAction(ISD::MUL, MVT::i32, Expand); setOperationAction(ISD::GlobalAddress, i32, Custom);
  • 40. . • . 40 RISCVTargetLowering::RISCVTargetLowering(const TargetMachine &TM, const RISCVSubtarget &STI) : TargetLowering(TM), Subtarget(STI) { // Set up the register classes. addRegisterClass(MVT::i32, &RISCV::GPRRegClass); // 32-bit promote 32-bit // 32-bit 32-bit computeRegisterProperties(STI.getRegisterInfo()); setStackPointerRegisterToSaveRestore(RISCV::X2); // TODO: add all necessary setOperationAction calls. setOperationAction(ISD::MUL, XLenVT, Expand); ... setOperationAction(ISD::GlobalAddress, i32, Custom); ... }
  • 41. • • • 41 SDValue LowerFormalArguments(SDValue Chain, CallingConv::ID CallConv, bool IsVarArg, const SmallVectorImpl<ISD::InputArg> &Ins, const SDLoc &DL, SelectionDAG &DAG, SmallVectorImpl<SDValue> &InVals) const override; SDValue LowerReturn(SDValue Chain, CallingConv::ID CallConv, bool IsVarArg, const SmallVectorImpl<ISD::OutputArg> &Outs, const SmallVectorImpl<SDValue> &OutVals, const SDLoc &DL, SelectionDAG &DAG) const override; SDValue LowerCall(TargetLowering::CallLoweringInfo &CLI, SmallVectorImpl<SDValue> &InVals) const override;
  • 42. 42 LLVM IR Map IR instructions to DAG SelectionDAGBuilder Target Lowering Instruction Selection
  • 43. • - • - 43 // RISCVInstrInto.td def Pat<(add GPR:$rs1, GPR:$rs2), (ADD GPR:$rs1, GPR:$rs2)>;
  • 44. - - - - 44 // RISCVInstrInto.td def Pat<(add GPR:$rs1, simm12:$imm12), (ADDI GPR:$rs1, simm12:$imm12)>;
  • 45. . . - . • - 45 void RISCVDAGToDAGISel::Select(SDNode *Node) { // If we have a custom node, we have already selected if (Node->isMachineOpcode()) { DEBUG(dbgs() << "== "; Node->dump(CurDAG); dbgs() << "n"); Node->setNodeId(-1); return; } // C if (Node->getOpcode() == ISD::AND) { ... return; } // A .td pattern SelectCode(Node); } // RISCVInstrInto.td def Pat<(add GPR:$rs1, GPR:$rs2), (ADD GPR:$rs1, GPR:$rs2)>;
  • 46. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • - 44 1 0 - 4 . • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 46https://github.com/lowRISC/riscv-llvm
  • 47. • 2 3 - - 47 // 3 12-bit sign-extension def LO12Sext : SDNodeXForm<imm, [{ return CurDAG->getTargetConstant(SignExtend64<12>(N->getZExtValue()), SDLoc(N), N->getValueType(0)); }]>; // 32-bit 20-bit 11 1 1 def HI20 : SDNodeXForm<imm, [{ return CurDAG->getTargetConstant(((N->getZExtValue()+0x800) >> 12) & 0xfffff, SDLoc(N), N->getValueType(0)); }]>; def simm32 : ImmLeaf<XLenVT, [{return isInt<32>(Imm);}]>; // simm12 -> addi rd, x0, simm12 def : Pat<(simm12:$imm), (ADDI X0, simm12:$imm)>; // simm32 -> lui rd, uimm20 + addi rd, rd, simm12 def : Pat<(simm32:$imm), (ADDI (LUI (HI20 imm:$imm)), (LO12Sext imm:$imm))>; # 0xabcd5566 a0, simm32 = (uimm20 << 12) + simm12 lui a0, 0xabcd5 # a0 = 0xabcd5 addi a0, a0, 0x566 # a0 = 0xabcd5566
  • 48. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • - 1 5 0 0 15 . • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 48https://github.com/lowRISC/riscv-llvm
  • 49. 49 def : Pat<(load (add GPR:$rs1, simm12:$imm12)), (LW GPR:$rs1, simm12:$imm12)>; LW rd, rs, simm12
  • 50. 50 /// Loads multiclass LdPat<PatFrag LoadOp, RVInst Inst> { def : Pat<(LoadOp GPR:$rs1), (Inst GPR:$rs1, 0)>; def : Pat<(LoadOp (add GPR:$rs1, simm12:$imm12)), (Inst GPR:$rs1, simm12:$imm12)>; } defm : LdPat<sextloadi8, LB>; defm : LdPat<extloadi8, LB>; defm : LdPat<sextloadi16, LH>; defm : LdPat<extloadi16, LH>; defm : LdPat<load, LW>; defm : LdPat<zextloadi8, LBU>; defm : LdPat<zextloadi16, LHU>; /// Stores multiclass StPat<PatFrag StoreOp, RVInst Inst> { def : Pat<(StoreOp GPR:$rs2, GPR:$rs1), (Inst GPR:$rs2, GPR:$rs1, 0)>; def : Pat<(StoreOp GPR:$rs2, (add GPR:$rs1, simm12:$imm12)), (Inst GPR:$rs2, GPR:$rs1, simm12:$imm12)>; } defm : StPat<truncstorei8, SB>; defm : StPat<truncstorei16, SH>; defm : StPat<store, SW>;
  • 51. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • . 6 - 6 6 6 0 .1 • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 51https://github.com/lowRISC/riscv-llvm
  • 52. : 52 @G = global i32 0 define i32 @lw_global(i32 %a) { %1 = load volatile i32, i32* @G ret i32 %1 } lui a0, %hi(G) addi a0, a0, %lo(G) lw a0, 0(a0)
  • 53. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • . - 070 1 7 • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 53https://github.com/lowRISC/riscv-llvm
  • 54. 54 define void @condbr(i32 %a, i32 %b, i32 *%c) { %tst = icmp ne i32 %a, %b br i1 %tst, label %end, label %equal equal: store i32 1, i32* %c br label %end end: ret void } def : Pat<(brcond (i32 (setne GPR:$rs1, GPR:$rs2)), bb:$imm12) (BEQ GPR:$rs1, GPR:$rs2, simm13_lsb0:$imm12)>; BEQ rs1, rs2, simm13_lsb0
  • 55. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 00 1 1 . . -- 0 • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 55https://github.com/lowRISC/riscv-llvm
  • 57. 57 let isCall = 1, Defs=[X1] in def PseudoCALL : Pseudo<(outs), (ins GPR:$rs1), [(Call GPR:$rs1)]>, PseudoInstExpansion<(JALR X1, GPR:$rs1, 0)>; lui a0, %hi(external_function) addi a3, a0, %lo(external_function) // a0~a7 addi a0, zero, 1 addi a1, zero, 2 addi a2, zero, 3 // / jalr ra, a3, 0 declare i32 @external_function(i32, i32, i32) define i32 @test_call_external() nounwind { %1 = call i32 @external_function(i32 1, i32 2, i32 3) ret i32 %1 } JALR rd, rs1, simm12 • target address: rs1 + simm12 • rd = pc + 4
  • 58. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • . . 9 . 0 9-1 • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 58https://github.com/lowRISC/riscv-llvm
  • 59. 59 : define i32 @bare_select(i1 %a, i32 %b, i32 %c) { %1 = select i1 %a, i32 %b, i32 %c ret i32 %1 } bare_select: # %bb.0: andi a0, a0, 1 addi a3, zero, 0 bne a0, a3, .LBB0_2 # %bb.1: addi a1, a2, 0 .LBB0_2: addi a0, a1, 0 jalr zero, ra, 0
  • 60. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 02 02 2- 0 - -0 . • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 60https://github.com/lowRISC/riscv-llvm
  • 61. 29 I • 3 L I 9D 3 4 7 9E I 9 • 3 4 7 3 F EAI AI L 9E AI L AE A C 9 IAE 9 • 3 4 7 3 4 7 -0. AE I 9 • 3 4 7 I 9 E 9 • 3 4 7 9IA 3 4 7 EI .F D9 I EI E F 3 AI 9 • 3 4 7 9 FE I 3 4 7 1 59 I 9 • 3 4 7 9IA 3 4 7 ID29 I 9 • 3 4 7 3 4 7 EI 2 AE 9E 9IA 1 9II D C 9 • 3 4 7 I F F 9CC 37 AEI AFEI 9 • 3 4 7 I F F AI9II D C 9 • 3 4 7 FDDFE A I 9E CF 9 AFEI 9 • 3 4 7 I F F 9 8CC 8 I 8 I 9 • 3 4 7 EA A9C F E I F F 06 F 9 AFEI 9 • 3 4 7 F E I F F D9 A9CAPAE FEI 9E I 9 • 3 4 7 F E I F F D DF F 9 AFEI 9 • 3 4 7 F E I F F D DF F 9 AFEI FE CF 9 9 • 3 4 7 F E F FE A AFE9C 9E I 9 • 3 4 7 4 F F E AFE 9CCI 9 • 3 4 7 D C D E CFM AE F 4 4-0- 5 9 • 3 4 7 4 F 9E I I F 9 L9 A F 9 A AFE9C 9 • 1 0 . - - .2 • 3 4 7 4 F CFM AE . 9D E 9 • 3 4 7 D C D E FCF 9E ACF AEI AFE 9 • 3 4 7 CCFM CFM AE F E9DA 8I 9 9CCF I 9 I9L 9 • 3 4 7 I FD 83 4 7 9CCAE FEL E AFE 9E AD 9 • 3 4 7 4 F F L9 9 I 9 • 3 4 7 4 F I 9 9D I 9E F I I F A I 9 • 3 4 7 9IA I F F AECAE 9ID FEI 9AE I 9 • 3 4 7 I F F CCLD 9D 9 II E9 9 • 3 4 7 D C D E 9E 9E9C IAI 9 61https://github.com/lowRISC/riscv-llvm addi a1, zero, 0 sub a0, a1, a0 sub a0, zero, a0
  • 62. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 2 2 . 0 - • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 62https://github.com/lowRISC/riscv-llvm
  • 63. 63 // Replace FrameIndex with Offset void RISCVRegisterInfo::eliminateFrameIndex // Calculate Offset by FrameIndex int RISCVFrameLowering::getFrameIndexReference OffsetHigh Address Low Address fp/s0 sp ra s0/fp s1 s2 s3 . . . FrameIndex 0 1 2 3 4 sp + 12 sp + 16 sp + 20 sp + 24 sp + 28
  • 64. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 03 0 3 2 2 3. 2 . .2 3 - • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 64https://github.com/lowRISC/riscv-llvm
  • 65. 0 / 0 / ) -/ • / • I • ( - ( // • • P ( // - E ( • I • -/ • ( ( // - P E • • • 65 func: // Prologue addi sp, sp, -32 sw ra, 28(sp) sw s0/fp, 24(sp) sw s1, 20(sp) sw s2, 16(sp) sw s3, 12(sp) addi s0/fp, sp, 32 ... // callee-save // register ... // Epilog lw s3, 12(sp) lw s2, 16(sp) lw s1, 20(sp) lw s0/fp, 24(sp) lw ra, 28(sp) addi sp, sp, 32 ret
  • 66. . . • . 66 void RISCVFrameLowering::emitPrologue(MachineFunction &MF, MachineBasicBlock &MBB) const { ... uint64_t StackSize = MFI.getStackSize(); ... // addi sp, sp, -StackSize adjustReg(MBB, MBBI, DL, SPReg, SPReg, -StackSize, MachineInstr::FrameSetup); ... // addi fp, sp, StackSize adjustReg(MBB, MBBI, DL, FPReg, SPReg, StackSize, MachineInstr::FrameSetup); } void RISCVFrameLowering::emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const { ... uint64_t StackSize = MFI.getStackSize(); ... // Deallocate stack: addi sp, sp, StackSize adjustReg(MBB, MBBI, DL, SPReg, SPReg, StackSize, MachineInstr::FrameDestroy); }
  • 67. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • - . 4 2 2 - 0 • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 67https://github.com/lowRISC/riscv-llvm
  • 68. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 2 0 . - 0 025 5 • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 68https://github.com/lowRISC/riscv-llvm
  • 69. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 2..- - 0 . • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 69https://github.com/lowRISC/riscv-llvm
  • 70. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 7 . 2-7 3 ..7- 7 0 7 • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 70https://github.com/lowRISC/riscv-llvm
  • 71. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 0 8 . 0 0 - 2 8 0 8 8 • 4 5 8 L I M AI FFO A LL M M C • 4 5 8 F M C FRLDL M C 71https://github.com/lowRISC/riscv-llvm
  • 72. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 2 -2 0 - 0 . • 4 5 8 F M C FRLDL M C 72https://github.com/lowRISC/riscv-llvm
  • 73. 3 M CL M • 4 O M LM 4 5 8 C L M C • 4 5 8 4 I DL DL O DL O D M D F LD M C • 4 5 8 4 5 8 -0. AD L M C • 4 5 8 LM E M C • 4 5 8 LD 4 5 8 LM .I ML LM AI 4 DLM M C • 4 5 8 I L 4 5 8 1 6 M L M C • 4 5 8 LD 4 5 8 L 3 L M C • 4 5 8 4 5 8 LM3 D M LD 1 LL F M M C • 4 5 8 L I M AI FF 48 D LM MDI L M C • 4 5 8 L I M AI DL LL FR M C • 4 5 8 I I AD L FI MDI L M C • 4 5 8 L I M MI M FF M LM C EL R M C • 4 5 8 DMD F I L I M AI 07 I MDI L M C • 4 5 8 I L I M AI M D FDSD I LM ML M C • 4 5 8 I L I M AI I R I MDI L M C • 4 5 8 I L I M AI I R I MDI L I FI M C • 4 5 8 I AI I DMDI F C L M C • 4 5 8 5 I M AI A MDI FFL M C • 4 5 8 F M FIP D IA 5 5-0- 6 M C • 4 5 8 5 I M M LML AI O D MR IA DMDI F M C • 4 5 8 7L DLM 9 -42 AI I LM M M C • 4 5 8 5 I M FIP D . M C • 4 5 8 F M IFI DFI D L MDI M C • 4 5 8 FFIP FIP D IA R D LM E FFI LM EL O M C • 4 5 8 LMI 4 5 8 FFD I O MDI D M C • 4 5 8 5 I M AI O L M C • 4 5 8 5 I M LM E A L IAAL ML MI DML M C • 4 5 8 LD L I M AI D FD L I LM D ML M C • 4 5 8 L I M AI FFO A LL M M C • .0- . 3 - 0 3 73https://github.com/lowRISC/riscv-llvm
  • 74. : . • : • : . : • : / . • : / : -: : • 74