AST -> HIR -> MIR -> LLVM IR -> binary
RPython's technique also only works for JITs, and neither Swift nor Rust use a JIT in their normal compilation pipeline. Generation of compilers by partial evaluation of an interpreter is interesting, but as far as I know it has never been used in an industrial strength implementation of a language.
This would be akin to asking why do we need a C++-specific AST and a Swift-specific AST.
edit: I would have been very interested to see perf with SIL opts turned off - to see how well LLVM can do without SIL optimizing before it.