1. 优化目的
通过重排三分支的 BB 块减少比较指令的执行次数
代码路径:
bolt/lib/Passes/ThreeWayBranch.cpp
2. 效果
优化前:
注: 黄色数字表示BB块编号, 紫色表示该分支跳转的次数,绿色是代码里BB块的变量名
ThreeWayBranch 优化后:
注: BB块1.5 会在后面的优化删除
ThreeWayBranch + reorder-block 优化后:
测试用例:
bolt/test/runtime/X86/three-way-branch-pass.s
.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 性能会更好吗 ?