It’s not based on LLVM, that’s way too heavy for the use case.
The same backend is used for AoT and JIT compilation. It uses a custom lightweight IR that’s really close to x86 itself, with a big focus towards reducing translation times.
Rosetta 2/Cambria was fully written in-house.