1 option
Learn LLVM 17 : a beginner's guide to learning LLVM compiler tools and core libraries with C++ / Kai Nacke, Amy Kwan.
- Format:
- Book
- Author/Creator:
- Nacke, Kai, author.
- Kwan, Amy, author.
- Language:
- English
- Subjects (All):
- Compilers (Computer programs).
- C++ (Computer program language).
- Physical Description:
- 1 online resource (416 pages) : illustrations
- Edition:
- Second edition.
- Place of Publication:
- Birmingham, UK : Packt Publishing Ltd., 2024.
- Summary:
- LLVM was built to bridge the gap between the theoretical knowledge found in compiler textbooks and the practical demands of compiler development. With a modular codebase and advanced tools, LLVM empowers developers to build compilers with ease. This book serves as a practical introduction to LLVM, guiding you progressively through complex scenarios and ensuring that you navigate the challenges of building and working with compilers like a pro. The book starts by showing you how to configure, build, and install LLVM libraries, tools, and external projects. You’ll then be introduced to LLVM's design, unraveling its applications in each compiler stage: frontend, optimizer, and backend. Using a real programming language subset, you'll build a frontend, generate LLVM IR, optimize it through the pipeline, and generate machine code. Advanced chapters extend your expertise, covering topics such as extending LLVM with a new pass, using LLVM tools for debugging, and enhancing the quality of your code. You'll also focus on just-in-time compilation issues and the current state of JIT-compilation support with LLVM. Finally, you’ll develop a new backend for LLVM, gaining insights into target description and how instruction selection works. By the end of this book, you'll have hands-on experience with the LLVM compiler development framework through real-world examples and source code snippets.
- Contents:
- Cover
- Title Page
- Copyright and Credits
- Contributors
- Table of Contents
- Preface
- Part 1: The Basics of Compiler Construction with LLVM
- Chapter 1: Installing LLVM
- Compiling LLVM versus installing binaries
- Getting the prerequisites ready
- Ubuntu
- Fedora and RedHat
- FreeBSD
- OS X
- Windows
- Cloning the repository and building from source
- Configuring Git
- Cloning the repository
- Creating a build directory
- Generating the build system files
- Compiling and installing LLVM
- Customizing the build process
- Variables defined by CMake
- Using LLVM-defined build configuration variables
- Summary
- Chapter 2: The Structure of a Compiler
- Building blocks of a compiler
- An arithmetic expression language
- Formalism for specifying the syntax of a programming language
- How does grammar help the compiler writer?
- Lexical analysis
- A hand-written lexer
- Syntactical analysis
- A hand-written parser
- The abstract syntax tree
- Semantic analysis
- Generating code with the LLVM backend
- Textual representation of LLVM IR
- Generating the IR from the AST
- The missing pieces
- the driver and the runtime library
- Learning about the load-and-store approach
- Mapping the control flow to basic blocks
- Using AST numbering to generate IR code in SSA form
- Defining the data structure to hold values
- Reading and writing values local to a basic block
- Searching the predecessor blocks for a value
- Optimizing the generated phi instructions
- Sealing a block
- Creating the IR code for expressions
- Emitting the IR code for a function
- Controlling visibility with linkage and name mangling
- Converting a type from an AST description into LLVM types
- Creating the LLVM IR function
- Emitting the function body
- Setting up the module and the driver
- Wrapping all in the code generator
- Initializing the target machine class
- Emitting assembler text and object code
- Chapter 5: IR Generation for High-Level Language Constructs
- Technical requirements
- Working with arrays, structs, and pointers
- Getting the application binary interface right
- Creating IR code for classes and virtual functions
- Implementing single inheritance
- Extending single inheritance with interfaces
- Adding support for multiple inheritance
- Summary
- Notes:
- Includes index.
- OCLC-licensed vendor bibliographic record.
- OCLC:
- 1418761019
The Penn Libraries is committed to describing library materials using current, accurate, and responsible language. If you discover outdated or inaccurate language, please fill out this feedback form to report it and suggest alternative language.