
编译器
文章平均质量分 60
llongint
这个作者很懒,什么都没留下…
展开
-
SplitFunctions (BOLT) - 优化阅读笔记
将函数拆分成更小的代码片段,从而执行更激进的代码段重排的优化在文件 bolt/lib/Passes/SplitFunctions.cpp。原创 2024-03-11 16:31:21 · 543 阅读 · 0 评论 -
SimplifyRODataLoads - 优化阅读笔记
【代码】SimplifyRODataLoads - 优化阅读笔记。原创 2024-03-11 16:22:13 · 333 阅读 · 0 评论 -
ReorderData - 优化阅读笔记
测试用例: bolt/test/reorder-data-writable-ptload.c。主要实现文件: bolt/lib/Passes/ReorderData.cpp。支持 X86/Arm。原创 2024-03-11 16:17:13 · 284 阅读 · 0 评论 -
MachineSink - 优化阅读笔记
该优化过程并非旨在替代或完全替代 LLVM IR 级别的下沉优化。它仅设计用于下沉简单的结构,这些结构在 lowering 和指令选择之前不会显现.该优化过程将指令移动到后继基本块中,以便它们不会在不需要其结果的路径上执行。原创 2024-03-11 16:08:42 · 409 阅读 · 0 评论 -
ThreeWayBranch 优化阅读笔记
优化后的 BB 5 跳转变成 fallthrough 性能会更好吗?通过重排三分支的 BB 块减少比较指令的执行次数。原创 2024-03-11 15:54:32 · 331 阅读 · 0 评论 -
Early if-conversion - 优化阅读笔记
按支配树的后序遍历访问块。后序遍历允许在单次遍历中进行嵌套的if转换。tryConvertIf() 函数可能会擦除块,但仅擦除由头块支配的块。这使得在后序遍历迭代器仍然活动时更新支配树是安全的。用于对于没有很多可预测指令的乱序CPU。目标是消除可能误预测的条件分支。来自分支两侧的指令都会被推测性地执行,并使用 cmov 指令选择结果。原创 2024-03-11 15:37:00 · 600 阅读 · 0 评论 -
5. 函数调用过程汇编分析
翻译: 在 x86-32 目标机上,fastcall 属性会导致编译器在寄存器 ECX 中传递第一个参数(如果是 INT 类型),在寄存器 EDX 中传递第二个参数(如果是INT类型)。后面的参数和其他类型的参数会传递到堆栈中。被调用函数将参数从堆栈中弹出。如果参数个数不固定,所有参数都会被推入堆栈。原创 2024-01-21 21:57:00 · 671 阅读 · 1 评论 -
LLVM 生成 CFG/Dominator tree 图
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传。原创 2023-12-07 10:58:08 · 789 阅读 · 0 评论 -
LLVM lit测试用例出错: AttributeError: ‘NoneType‘ object has no attribute ‘use_lit_shell‘
【代码】LLVM lit测试用例出错: AttributeError: ‘NoneType‘ object has no attribute ‘use_lit_shell‘原创 2023-11-27 20:37:56 · 748 阅读 · 0 评论 -
Linux内核中对大页支持的简要概述
这个文件的目的是提供Linux内核中对大页支持的简要概述. 这种支持是建立在大多数现代体系结构提供的多页大小支持之上的. 例如, x86 CPU通常支持4K和2M(如果有架构支持则支持1G)的页面大小, ia64架构支持多种页面大小, 包括4K、8K、64K、256K、1M、4M、16M、256M, ppc64支持4K和16M.. 通常, 这是处理器上非常有限的资源. 操作系统会尽量充分利用有限数量的TLB资源. 这种优化现在更加关键, 因为越来越大的物理内存(几GB)更容易获得.翻译 2023-10-20 15:24:31 · 629 阅读 · 0 评论 -
如何在 C 代码中使用内联汇编语言
使用asm关键字可以在 C 代码中嵌入汇编语言指令. GCC 提供两种形式的内联asm语句. 基本asm语句不带操作数(请参阅 “基本asm- 不带操作数的汇编指令”), 而扩展asm语句(请参阅 “扩展asm- 带 C 表达式操作数的汇编指令”)包含一个或多个操作数. 如果要在函数中混合使用 C 语言和汇编语言, 最好使用扩展形式, 但如果要在顶层包含汇编语言, 则必须使用基本asm您还可以使用asm关键字覆盖 C 符号的汇编程序名称, 或将 C 变量置于特定寄存器中.asmasmasmasm基本asm。翻译 2023-08-07 00:16:47 · 1811 阅读 · 0 评论 -
llvm程序手册
有两种不同的设计模式在 C++ 程序中常常导致 使用虚函数调度 来处理 类型层次结构中的方法。第一种是真正的类型层次结构,其中层次结构中的不同类型 模拟了特定功能 和 语义的子集,并且这些类型严格嵌套在彼此之内。Value 或 Type 类型层次结构中可以看到很好的例子。第二种情况是希望。这种后一种用例可以通过定义一个所有实现都从中派生并重写的抽象接口基类来使用虚函数调度和继承来建模。然而,这种实现策略强制存在一个实际上并不有意义的 “is-a” 关系。翻译 2023-06-18 12:04:25 · 666 阅读 · 0 评论 -
使用 mold 加速 clang 构建
是一个多线程的链接器,比 gold/ld/lld 快不只一个数量级原创 2023-03-26 22:30:00 · 502 阅读 · 0 评论 -
BOLT: 一个实用的二进制优化器 - 笔记
FDO 都面临两个权衡:更早注入配置数据允许沿管道进行更多优化,映射级别越接近记录级别,结果越准确。链接后二进制优化允许perf采样以最高精度使用配置文件。IR 级别的数据映射常见问题是 函数在两个 caller 都内联。原创 2023-01-15 23:24:34 · 1884 阅读 · 0 评论 -
理解 ELF
ELF 即 Executable and Linking Format,可执行 可链接格式。可重定位文件共享目标文件可执行文件前面知道它在节头表中被登记, 且目标文件有很多节,节头表每个表项是个 Elf32_Shdr 的结构,就是说节头表其实是一个结构体数组。位置、数量、表项大小 分别有文件头中的表示什么是节索引: 文字为给出具体定义,只说明了节头表中保留的索引值都位于 SHN_LORESERVE(0xff00) ~ SHN_HIRESERVE(0xffff) 之间。原创 2023-01-02 21:55:21 · 525 阅读 · 0 评论 -
[llvm cookbook] 1、LLVM设计与使用
了解如何把C语言代码编译为LLVM IR(Intermediate representation)及其他多种形式。与其他编译器(如 GNU Compiler Collection) 不同,LLVM 设计目标是成为一系列的库。原创 2022-06-20 23:31:06 · 649 阅读 · 0 评论