Rust's borrow checker could probably be used for alias analysis, and avoid emitting redundant load instructions. That would give it a competitive advantage to C++. Does something like this exist yet?
https://github.com/rust-lang/rust/issues/16515
There are also soundness issues around async/await:
https://github.com/rust-lang/rust/issues/63818
LLVM’s aliasing model isn’t really optimal for a language like Rust with very precise memory dependence information, but using anything else would mean making a whole new optimizer/backend from scratch.