Rust's problem with aliasing in LLVM is caused exactly by limited usefulness of C's restrict.
LLVM implements only coarse per-function aliasing information needed by C, and doesn't properly preserve fine-grained aliasing information that Rust can provide.