编译器是否优化数学表达式?

Does the compiler optimize math expressions?

rustc 是否优化了这样的表达式?

这种微不足道的优化属于 LLVM optimization passes,实际上生成的程序集更好更正确。

2*x 被编译为单指令 lea rax, [rdi + rdi],在所有现代 x86 处理器上都是单 uop(相关

x/2 用于带符号的数字被编译为最快和正确的方式,在 -1 的情况下给出正确答案(相关 question

mov     rax, rdi
shr     rax, 63
add     rax, rdi 
sar     rax 

但编译为无符号数右移

mov     rax, rdi
shr     rax

同样的故事 x % 8 它编译为带符号数的长汇编(对于负数)

mov     rax, rdi
lea     rcx, [rdi + 7]
test    rdi, rdi
cmovns  rcx, rdi
and     rcx, -8
sub     rax, rcx
ret

and无符号数指令(相关question

 mov     rax, rdi
 and     eax, 7
 ret

Godbolt link