LLVM Intermediate Representation is better than assembly
The crucial part is IR. It's a common language that sits between the high-level program and the low-level backend . IR is used to express high level concepts and is specific enough that any backend can produce a fast machine code.