LLVM on the high level could be separated into:
-
- Core (operations which work on the LLVM IR AST)
-
- Optimisers
-
- Backends/targets - these generate the instructions for a given CPU (i.e. x86, ARM, WebAssembly, etc.)
There are many projects creating frontends for LLVM, which are actual compilers outputting LLVM IR.
Some of these include:
- clang (C and C++)
- llgo (Go)
- kaleidoscope (Haskell) - https://github.com/sdiehl/kaleidoscope
- flang (Fortran) - https://github.com/llvm-flang/flang
- dragonegg (LLVM backend for GCC)
- rust
- emscripten (Javascript)
- rubinius (Ruby)
- ilwasm (CIL (C#)) - https://github.com/WebAssembly/ilwasm
@cowlicks
source: https://emscripten.org