LLVM

LLVM is a huge topic on its own, you can read the docs at the LLVM's main website or check out the alternative resources listed at the bottom of the page.

LLVM is a set of modular Toolchain components such as Compilers, optimizers, linkers, assemblers, code-generators.

Originally, it began as a Compiler-builder/ compiler-framework for any language... But now it has transformed from being just a compiler-framework, to being a toolchain comprising of many components with different functions.
The unique features across the board are that :

  1. The components can be tweaked to suit different languages and execution environments.
  2. The components are independent of each other.

LLVM components

  1. LLVM core libraries : the core libraries include an IR-optimizer and a couple of pre-made code generators for popular CPUs. This module does not include an IR-to-machinecode code-generator.

  2. Clang: this is a compiler front-end for C, C++ and Objective C. It is not a full-fledged compiler. It converts source code into an AST, does semantic analysis and typechecking before converting it into LLVM-IR. Clang DOES NOT do optimization, code generation or linking.

  3. LLDB: this is the LLVM Debugger

  4. LLD: this is the LLVM linker

  5. libclc: an implementation of the OpenCL standard library. (OpenCL == Open Computer Language)

Learning Resources.