rustc 会优化这些表达式吗?
最佳答案
此类微不足道的优化在 LLVM optimization passes 的领域内,实际上生成的程序集甚至更好,更正确。2*x
编译为单条指令 lea rax, [rdi + rdi]
,在所有现代 x86 处理器上都是单 uop(相关 question)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
关于math - 编译器是否优化数学表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67135579/