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, %eaxcmp $0x1, %eaxjge .BB1mov $0xf, %eaxxor %eax, %eaxretq
.BB1:jg .BB2retq
.BB2:mov $0x7, %eaxretq
.Lend:
遗留问题:
优化后的 BB 5 跳转变成 fallthrough 性能会更好吗 ?