【发布时间】:2021-07-12 02:11:01
【问题描述】:
rustc 会优化这样的表达式吗?
- 2*x -> x
- x/2 -> x>>1
- x % 8 -> x&7
- 等等
【问题讨论】:
-
是的,这是 LLVM 在没有 rustc 前端帮助的情况下例行执行的优化。
-
他们甚至能够优化更复杂的情况,例如
x*13和x%13。请注意,需要为此启用优化。 -
更复杂的示例:
pub fn sum(i: u32) -> u32 { (0..i).sum() }(0 到给定数字之间的所有数字的总和)针对其封闭形式的解决方案进行了优化。虽然代码说“遍历所有数字并将它们相加”,但 LLVM 认为有一个等效的解决方案可以在恒定时间内运行并消除循环。
标签: math optimization rust expression compiler-optimization