自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 javascript v8编译器的使用记录

javascript v8编译器的构建与使用

2024-06-30 22:55:26 758

原创 LLVM AliasAnalysis别名分析 TBAA TypeBasedAliasAnalysis

llvm别名分析概述

2024-06-30 00:19:17 1527

原创 LLVM后端 td文件 tablegen 模式匹配 寄存器 指令集 calling convention

tablegen 模式匹配 寄存器 指令集 calling convention

2024-06-16 19:31:18 1391

原创 LLVM Cpu0 新后端 系列课程总结

LLVM手动开发一个新后端的系列课程的记录分享

2024-06-09 15:40:51 883

原创 LLVM Cpu0 新后端10

LLVM手动开发一个新后端的系列课程的记录分享

2024-06-09 13:17:16 1172

原创 LLVM Cpu0 新后端9 objdump readelf

LLVM手动开发一个新后端的系列课程的记录分享

2024-06-09 12:27:07 1468

原创 LLVM Cpu0 新后端8 尾调用优化 Stack Overflow Exception异常

LLVM手动开发一个新后端的系列课程的记录分享

2024-06-08 23:08:14 1261

原创 LLVM Cpu0 新后端7 第二部分 窥孔优化

LLVM手动开发一个新后端的系列课程的记录分享

2024-06-08 19:01:43 1067

原创 LLVM Cpu0 新后端7 第一部分 DAG调试 dot文件 Machine Pass

LLVM手动开发一个新后端的系列课程的记录分享

2024-06-08 18:30:40 1375 1

原创 LLVM Cpu0 新后端6

LLVM手动开发一个新后端的系列课程的记录分享

2024-06-08 00:55:42 1006

原创 LLVM Cpu0 新后端5 静态重定位 动态重定位

LLVM手动开发一个新后端的系列课程的记录分享

2024-06-07 00:43:03 1294

原创 LLVM Cpu0 新后端4

LLVM手动开发一个新后端的系列课程的记录分享

2024-06-05 00:16:31 754

原创 LLVM Cpu0 新后端3

LLVM手动开发一个新后端的系列课程的记录分享

2024-06-03 22:27:30 1079

原创 LLVM Cpu0 新后端2 第三部分 (包括mips扩栈 回栈策略)

LLVM手动开发一个新后端的系列课程的记录分享

2024-06-02 15:53:59 1087

原创 LLVM Cpu0 新后端2 第二部分

LLVM手动开发一个新后端的系列课程的记录分享

2024-06-02 14:24:57 1031

原创 LLVM Cpu0 新后端2 第一部分

LLVM手动开发一个新后端的系列课程的记录分享

2024-05-30 00:39:51 869

原创 LLVM Cpu0 新后端1

LLVM手动开发一个新后端的系列课程的记录分享

2024-05-29 23:10:53 1271 2

原创 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笔记3 LLVM编译流程

缺点:前端和后端没有完全分离,耦合在了一起,因而如果要支持一门新的语言或硬件平台,需要做大量的工作。

2023-12-18 22:54:07 759

原创 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

原创 LLVM LTO与ThinLTO总结

LLVMLTO与ThinLTO总结

2023-03-04 19:21:16 600

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除