- 博客(25)
- 收藏
- 关注
原创 LLVM后端 td文件 tablegen 模式匹配 寄存器 指令集 calling convention
tablegen 模式匹配 寄存器 指令集 calling convention
2024-06-16 19:31:18
1391
原创 LLVM笔记4 LLVM各个工具总结(更新中)
LLVM后端编译器,将main.opt.bc(LLVM IR)转化成main.s(汇编文件)或者main.o(目标文件)。LLVM中端优化器,将main.bc(LLVM IR)优化成main.opt.bc(LLVM IR)。将LLVM二进制文件(.bc)转化成可阅读的LLVM IR文件(.ll)。将可阅读的LLVM IR文件(.ll)转化成LLVM二进制文件(.bc)。LLVM的链接器,将目标文件、动态库、静态库等链接成可执行文件。可以将多个LLVM二进制文件(.bc)链接到一起。
2023-12-18 23:19:07
755
原创 LLVM笔记2 LLVM Debug 技巧
搭配filter-print-funcs选项我们可以指定打印的函数。例如filter-print-funcs和print-after-all搭配使用,我们可以打印出每次优化后这个函数的现场,然后通过二分查找能够快速找到出问题的pass。opt-bisect-limit可以控制打印优化pass的执行流程,当指定-1时打印并执行所有优化,我们也可以指定一个数字让其执行前多少个优化。
2023-12-16 22:08:41
755
原创 LLVM笔记1 LLVM Pass Manager
第二类的开发者是对LLVM需要深度的改造,他们需要甚至需要扩展、定制自己PassManager,AnalysisManager等关键的数据结构,基于LegacyPassManager从技术门槛上会比较低,但是会引入非常复杂的依赖,调用关系,例如,各个PMDataManager子类的管理,特别是PMTopLevelManager对PMDataManager及其中的Pass的调度复杂度会很高,并且问题很难排查。此外,LegacyPM继承关系深伴随着众多的虚函数,代码的维护性和静态分析都带来了困难。
2023-12-16 21:36:20
1091
原创 C++ CRTP介绍
继承自模板类;派生类将自身作为参数传给模板类。// 我们先定义一个模板类作为基类class Base...// 定义一个派生类,这个类继承以自身作为参数的基类...
2023-12-16 19:50:12
2065
原创 X86_64 寄存器介绍(不断补充中)
一、通用寄存器RAX:accumulator register, 累加寄存器,通常用于存储函数的返回值,它主要用于输入/输出和大规模的指令运算,AX 寄存器可以说是使用频率最高的寄存器。也可以用于存储其他值,只是通过RAX存储函数返回值属于惯例。 RBX:base register,基址寄存器,一般用于访问内存的基址。BX也被称为数据寄存器,即表明其能够暂存一般数据,同样也可以将BX当做两个独立的 8位寄存器使用即 BH 和BL。BX除了具有暂存数据的功能之外,还用于寻址(即寻找物理地址),这
2023-12-16 15:38:25
930
原创 AArch64 ARM64 寄存器介绍
除了上述通用寄存器,还有FPSR(浮点状态寄存器)和 FPCR(浮点控制寄存器)等。X29寄存器和X30寄存器在函数调用和堆栈帧的管理中扮演着关键角色。AArch64架构提供了31个通用寄存器,每个寄存器都可以用作64位X寄存器(X0~X30)或32位W寄存器(W0~W30)。使用X寄存器将导致64位的计算,使用W寄存器将导致32位的计算。EL0、EL1、EL2和EL3是AArch64架构中定义的四个特权级别(Exception Levels),用于支持不同的执行环境和特权级别。
2023-12-15 22:47:05
8122
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人