ThreeWayBranch 优化阅读笔记

1. 优化目的

通过重排三分支的 BB 块减少比较指令的执行次数

代码路径:

bash 复制代码
bolt/lib/Passes/ThreeWayBranch.cpp

2. 效果

优化前:
注: 黄色数字表示BB块编号, 紫色表示该分支跳转的次数,绿色是代码里BB块的变量名

ThreeWayBranch 优化后:

注: BB块1.5 会在后面的优化删除

ThreeWayBranch + reorder-block 优化后:

测试用例:

bolt/test/runtime/X86/three-way-branch-pass.s

asm 复制代码
    .text
    .globl main
    .type main, %function
    .size main, .Lend-main
main:
    mov $0x0, %eax
    cmp $0x1, %eax
    jge .BB1
    mov $0xf, %eax
    xor %eax, %eax
    retq
.BB1:
    jg .BB2
    retq
.BB2:
    mov $0x7, %eax
    retq
.Lend:

遗留问题:

优化后的 BB 5 跳转变成 fallthrough 性能会更好吗 ?

相关推荐
moringlightyn4 天前
基础开发工具--编译器g++/gcc 自动化构建make/Makefile
linux·运维·笔记·自动化·c·编译器·make/makefile
Moonbit4 天前
月报 Vol.05:alias系统更新,新增 ReadOnlyArray 与 external iterator
后端·编程语言·编译器
序属秋秋秋6 天前
《Linux系统编程之开发工具》【编译器 + 自动化构建器】
linux·运维·服务器·c语言·c++·自动化·编译器
沢田纲吉12 天前
《LLVM IR 学习手记(七):逻辑运算与位运算的实现与解析》
前端·c++·编译器
朝与暮17 天前
《深入浅出编译原理 -- 编译原理总述(一)》
前端·编译原理·编译器
zhuyasen24 天前
在某些 Windows 版本,Go 1.25.x 编译出来的 exe 运行报错:此应用无法在你的电脑上运行
windows·go·编译器
得物技术25 天前
线程池ThreadPoolExecutor源码深度解析|得物技术
java·编译器·dns
颜酱1 个月前
实现一个mini编译器,来感受编译器的各个流程
前端·javascript·编译器
小孔龙1 个月前
K2 编译器 - Symbol(符号系统)
kotlin·编译器
Moonbit2 个月前
用MoonBit开发一个C编译器
后端·编程语言·编译器