现在的主流编译器基本都不怎么分配条件转移指令了。本书的12.1.2节、12.3节和19.5.2节的编译结果都体现了这一特性。
虽然目前的分支预测功能并不完美,但是编译器还是在向这一方向发展。
ARM平台出现的条件执行指令(例如ADRcc)及x86平台出现的CMOVcc指令,都是这一趋势的明证。
当代的CPU多数都能并行执行指令(OOE/乱序执行技术)。但是,要充分利用CPV的乱序执行功能、尽可能频繁地同期执行多条指令,首先就要降低各指令之间的数据相关性。所以,编译器尽可能地分配那些不怎么影响CPU标识的指令。
因为LEA指令并不像其他数学运算指令那样影响标识位,所以编译器越来越多地使用这种指令。