This is a gitbook dedicated to providing a description on how LLVM based compilers map high-level language constructs into the LLVM intermediate representation (IR).
This document targets people interested in how modern compilers work and want to learn how high-level language constructs can be implemented. Currently the books focuses on C and C++, but contributions about other languages targeting LLVM are highly welcome. This document should help to make the learning curve less steep for aspiring LLVM users.
For the sake of simplicity, we'll be working with a 32-bit target machine so that pointers and word-sized operands are 32-bits. Also, for the sake of readability we do not mangle (encode) names. Rather, they are given simple, easy-to-read names that reflect their purpose. A production compiler for any language that supports overloading would generally need to mangle the names so as to avoid conflicts between symbols.
Read the book online at ReadTheDocs.
This section presents various external links of relevance to those studying LLVM IR:
If you have other relevant links, please open an issue or submit a pull request with the link added to the list above.
All contributions are welcome!
The repository is on GitHub.
If you find an error, file an issue or create a pull request.
You can build the book in one of two ways: Using Ubuntu Linux or Docker on Linux.
cd ~
git clone https://github.com/f0rki/mapping-high-level-constructs-to-llvm-ir llvm-ir
cd llvm-ir
sudo apt install -y build-essential
sudo apt install -y python3-pip
sudo apt install -y python3-sphinx
sudo apt install -y python3-sphinx-rtd-theme
You can now build the documentation locally:
make html
._build/html
folder.sudo make docker-build
.sudo make docker-make O=html
._build/html
folder.UNLESS OTHERWISE NOTED, THE CONTENTS OF THIS REPOSITORY/DOCUMENT ARE LICENSED UNDER THE CREATIVE COMMONS ATTRIBUTION - SHARE ALIKE 4.0 INTERNATIONAL LICENSE