f0rki/mapping-high-level-constructs-to-llvm-ir

A guide that explains how high level programming language constructs are mapped to the LLVM intermediate language.

LLVM

675

132 commits

updated Aug 19, 2026

See the code

See what people are saying

SourceMessageScoreDate

Mapping High Level Constructs to LLVM IR

2

Jul 17, 2024

README

[!CAUTION] The LLVM code listing in this repository are pretty much out-of-date and do not work with recent LLVM versions (e.g., this was written before opaque pointers became a thing in LLVM). Treat everything with caution. Feel free to fork and send PRs, but do not expect any major updates to this guide.

Mapping High Level Constructs to LLVM IR

About

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.

Reading the Book

Read the book online at ReadTheDocs.

Relevant External Resources on LLVM IR

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.

Contributing

All contributions are welcome!

The repository is on GitHub.

If you find an error, file an issue or create a pull request.

Building

You can build the book in one of two ways: Using Ubuntu Linux or Docker on Linux.

Fetching the Project

  1. Change to your home directory: cd ~
  2. Clone the repository: git clone https://github.com/f0rki/mapping-high-level-constructs-to-llvm-ir llvm-ir
  3. Enter the project directory: cd llvm-ir

Setting Up Ubuntu Linux

  1. Install Make and some friends (~244 MB): sudo apt install -y build-essential
  2. Install the Python pip tool (~38 MB): sudo apt install -y python3-pip
  3. Install Sphinx for Python (~15 MB): sudo apt install -y python3-sphinx
  4. Install ReadTheDocs theme for Sphinx (~15 MB): sudo apt install -y python3-sphinx-rtd-theme

You can now build the documentation locally:

  1. Build the documentation locally: make html.
  2. You can now browse the documentation in the _build/html folder.

Building using Docker

  1. Install Docker. DO NOT INSTALL USING THE STANDARD UBUNTU REPOSITORIES. IT WON'T WORK!
  2. Create the docker image: sudo make docker-build.
  3. Make the book: sudo make docker-make O=html.
  4. The book can now be found in the _build/html folder.

License

UNLESS OTHERWISE NOTED, THE CONTENTS OF THIS REPOSITORY/DOCUMENT ARE LICENSED UNDER THE CREATIVE COMMONS ATTRIBUTION - SHARE ALIKE 4.0 INTERNATIONAL LICENSE

f0rki/mapping-high-level-constructs-to-llvm-ir

A guide that explains how high level programming language constructs are mapped to the LLVM intermediate language.

LLVM

675

132 commits

updated Aug 19, 2026

See the code

See what people are saying

SourceMessageScoreDate

Mapping High Level Constructs to LLVM IR

2

Jul 17, 2024

README

[!CAUTION] The LLVM code listing in this repository are pretty much out-of-date and do not work with recent LLVM versions (e.g., this was written before opaque pointers became a thing in LLVM). Treat everything with caution. Feel free to fork and send PRs, but do not expect any major updates to this guide.

Mapping High Level Constructs to LLVM IR

About

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.

Reading the Book

Read the book online at ReadTheDocs.

Relevant External Resources on LLVM IR

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.

Contributing

All contributions are welcome!

The repository is on GitHub.

If you find an error, file an issue or create a pull request.

Building

You can build the book in one of two ways: Using Ubuntu Linux or Docker on Linux.

Fetching the Project

  1. Change to your home directory: cd ~
  2. Clone the repository: git clone https://github.com/f0rki/mapping-high-level-constructs-to-llvm-ir llvm-ir
  3. Enter the project directory: cd llvm-ir

Setting Up Ubuntu Linux

  1. Install Make and some friends (~244 MB): sudo apt install -y build-essential
  2. Install the Python pip tool (~38 MB): sudo apt install -y python3-pip
  3. Install Sphinx for Python (~15 MB): sudo apt install -y python3-sphinx
  4. Install ReadTheDocs theme for Sphinx (~15 MB): sudo apt install -y python3-sphinx-rtd-theme

You can now build the documentation locally:

  1. Build the documentation locally: make html.
  2. You can now browse the documentation in the _build/html folder.

Building using Docker

  1. Install Docker. DO NOT INSTALL USING THE STANDARD UBUNTU REPOSITORIES. IT WON'T WORK!
  2. Create the docker image: sudo make docker-build.
  3. Make the book: sudo make docker-make O=html.
  4. The book can now be found in the _build/html folder.

License

UNLESS OTHERWISE NOTED, THE CONTENTS OF THIS REPOSITORY/DOCUMENT ARE LICENSED UNDER THE CREATIVE COMMONS ATTRIBUTION - SHARE ALIKE 4.0 INTERNATIONAL LICENSE

Significant stargazers

(top 24 of 43)

Tao He

463 followers · starred Apr 2019

Rochus Keller

369 followers · starred Nov 2021

Rémy Rakic

195 followers · starred May 2020

Marshall Bowers

848 followers · starred Jun 2023