![llvm doxygen llvm doxygen](https://clang.llvm.org/doxygen/classclang_1_1driver_1_1toolchains_1_1Linux__inherit__graph.png)
![llvm doxygen llvm doxygen](https://www.llvm.org/docs/doxygen/StringSwitch_8h__incl.png)
To implement assemblers and linkers, LLVM uses a fourth intermediary data structure (the MCModule class) to hold the program representation in the context of object filesīesides other forms of program representation in LLVM, the LLVM IR is the most important one.When translating the LLVM IR to a machine-specific assembly language, LLVM will first convert the program to a Directed Acyclic Graph ( DAG) form to allow easy instruction selection (the SelectionDAG class) and then it will convert it back to a three-address representation to allow the instruction scheduling to happen (the MachineFunction class).When translating C or C++ to the LLVM IR, Clang will represent the program in the memory by using an Abstract Syntax Tree ( AST) structure (the TranslationUnitDecl class).LLVM employs the following additional data structures across different compilation stages:
#Llvm doxygen code
Code is organized as three-address instructions.It uses Single-Static Assignments ( SSA), with two important characteristics: Today, a central aspect of the design of LLVM is its IR. Throughout, LLVM emphasizes the philosophy that everything is a library ,leaving a relatively small amount of code that is not immediately reusable and is exclusive of a particular tool. The LLVM project consists of several libraries and tools that, together, make a large compiler infrastructure. 1.2 Delving into the LLVM internal designģ.2 Introducing the LLVM IR in-memory model