LLVM Cookbook (Mayur Pandey, Suyog Sarda) (z-library.sk, 1lib.sk, z-lib.sk)

Author: Mayur Pandey, Suyog Sarda

后端

The book is for compiler programmers who are familiar with concepts of compilers and want to indulge in understanding, exploring, and using LLVM infrastructure in a meaningful way in their work. This book is also for programmers who are not directly involved in compiler projects but are often involved in development phases where they write thousands of lines of code. With knowledge of how compilers work, they will be able to code in an optimal way and improve performance with clean code.

📄 File Format: PDF
💾 File Size: 2.9 MB
3
Views
0
Downloads
0.00
Total Donations

📄 Text Preview (First 20 pages)

ℹ️

Registered users can read the full content for free

Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.

📄 Page 1
(This page has no text content)
📄 Page 2
LLVM Cookbook
📄 Page 3
Table of Contents LLVM Cookbook Credits About the Authors About the Reviewers www.PacktPub.com Support files, eBooks, discount offers, and more Why Subscribe? Free Access for Packt account holders Preface What this book covers What you need for this book Who this book is for Sections Getting ready How to do it… How it works… There's more… See also Conventions Reader feedback Customer support Downloading the example code Downloading the color images of this book Errata Piracy Questions 1. LLVM Design and Use Introduction Understanding modular design Getting ready How to do it... How it works... There's more... See also Cross-compiling Clang/LLVM Getting ready How to do it... How it works... Converting a C source code to LLVM assembly
📄 Page 4
Getting ready How to do it... How it works... See also Converting IR to LLVM bitcode Getting Ready How to do it... How it works... There's more... See also Converting LLVM bitcode to target machine assembly Getting ready How to do it... How it works... There's more... Converting LLVM bitcode back to LLVM assembly Getting ready How to do it... How it works... Transforming LLVM IR Getting ready How to do it... How it works... There's more... Linking LLVM bitcode Getting ready How to do it... How it works... Executing LLVM bitcode Getting ready How to do it... How it works... See also Using the C frontend Clang Getting ready How to do it… How it works... See also Using the GO frontend Getting ready How to do it… How it works… See also
📄 Page 5
Using DragonEgg Getting ready How to do It… See also 2. Steps in Writing a Frontend Introduction Defining a TOY language How to do it… Implementing a lexer Getting ready How to do it… How it works… See also Defining Abstract Syntax Tree Getting ready How to do it… How it works… See also Implementing a parser Getting ready How to do it… How it works… See also Parsing simple expressions Getting ready How to do it… How it works… Parsing binary expressions Getting ready How to do it… See also Invoking a driver for parsing How to do it… How it works… See also Running lexer and parser on our TOY language Getting ready How to do it… How it works… See also Defining IR code generation methods for each AST class Getting ready How to do it…
📄 Page 6
How it works… Generating IR code for expressions How to do it… See also Generating IR code for functions How to do it… How it works… See also Adding IR optimization support How to do it… See also 3. Extending the Frontend and Adding JIT Support Introduction Handling decision making paradigms – if/then/else constructs Getting ready How to do it... How it works… See also Generating code for loops Getting ready How to do it... How it works... See also Handling user-defined operators – binary operators Getting ready How to do it... How it works... See also Handling user-defined operators – unary operators Getting ready How to do it... How it works... See also Adding JIT support How to do it... How it works… 4. Preparing Optimizations Introduction Various levels of optimization Getting ready... How to do it… How it works… See Also
📄 Page 7
Writing your own LLVM pass Getting ready How to do it… How it works See also Running your own pass with the opt tool How to do it… How it works… See also Using another pass in a new pass Getting ready How to do it… How it works… There's more… Registering a pass with pass manager Getting ready How to do it… How it works… See Also Writing an analysis pass Getting ready How to do it… How it works… Writing an alias analysis pass Getting ready How to do it... How it works… See also Using other analysis passes Getting ready… How to do it… How it works… See also 5. Implementing Optimizations Introduction Writing a dead code elimination pass Getting ready How to do it… How it works… See also Writing an inlining transformation pass Getting ready How to do it…
📄 Page 8
How it works... Writing a pass for memory optimization Getting ready How to do it… How it works… See also Combining LLVM IR Getting started How to do it… How it works… See also Transforming and optimizing loops Getting ready How to do it… How it works… Reassociating expressions Getting Ready How to do it… How it works … Vectorizing IR Getting ready How to do it... How it works… See also… Other optimization passes Getting ready… How to do it… How it works… See also 6. Target-independent Code Generator Introduction The life of an LLVM IR instruction C Code to LLVM IR IR optimization LLVM IR to SelectionDAG SelectionDAG legalization Conversion from target-independent DAG to machine DAG Scheduling instructions Register allocation Code emission Visualizing LLVM IR CFG using GraphViz Getting ready How to do it…
📄 Page 9
See also Describing targets using TableGen Getting ready How to do it How it works See also Defining an instruction set Getting ready How to do it… How it works… See also Adding a machine code descriptor How it's done… How it works… Implementing the MachineInstrBuilder class How to do it… How it works… Implementing the MachineBasicBlock class How to do it… How it works… See also Implementing the MachineFunction class How to do it… How it works… See also Writing an instruction selector How to do it… How it works… Legalizing SelectionDAG How to do it… How it works… Optimizing SelectionDAG How to do it… How it works… See also Selecting instruction from the DAG How to do it… How it works… See also Scheduling instructions in SelectionDAG How to do it… How it works… See also
📄 Page 10
7. Optimizing the Machine Code Introduction Eliminating common subexpression from machine code How to do it… How it works… See more Analyzing live intervals Getting ready How to do it… How it works… See also Allocating registers Getting ready How to do it… How it works… See also Inserting the prologue-epilogue code How to do it… How it works… Code emission How to do it… Tail call optimization Getting ready How to do it… How it works… Sibling call optimisation Getting ready How to do it… How it works… 8. Writing an LLVM Backend Introduction A sample backend Defining registers and registers sets Getting ready How to do it… How it works… See also Defining the calling convention How to do it… How it works… See also Defining the instruction set How to do it…
📄 Page 11
How it works… See also Implementing frame lowering Getting ready How to do it… How it works… See also Printing an instruction Getting ready How to do it… How it works… Selecting an instruction Getting ready How to do it… How it works… See also Adding instruction encoding How to do it… How it works… See also Supporting a subtarget How to do it… See also Lowering to multiple instructions How to do it… How it works… See also Registering a target How to do it… How it works… See also 9. Using LLVM for Various Useful Projects Introduction Exception handling in LLVM Getting ready... How to do it… How it works… See also Using sanitizers Getting ready How to do it… How it works… See also…
📄 Page 12
Writing the garbage collector with LLVM Getting ready How to do it… How it works… See also Converting LLVM IR to JavaScript Getting ready How to do it… See more Using the Clang Static Analyzer Getting ready How to do it… How it works… See also Using bugpoint Getting ready How to do it… How it works… See also Using LLDB Getting ready How to do it… See also Using LLVM utility passes Getting ready How to do it... See also Index
📄 Page 13
LLVM Cookbook
📄 Page 14
LLVM Cookbook Copyright © 2015 Packt Publishing All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews. Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the authors, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book. Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information. First published: May 2015 Production reference: 1270515 Published by Packt Publishing Ltd. Livery Place 35 Livery Street Birmingham B3 2PB, UK. ISBN 978-1-78528-598-1 www.packtpub.com
📄 Page 15
Credits Authors Mayur Pandey Suyog Sarda Reviewers Logan Chien Michael Haidl Dave (Jing) Tian Commissioning Editor Nadeem N. Bagban Acquisition Editor Vivek Anantharaman Content Development Editor Shweta Pant Technical Editors Prajakta Mhatre Rohith Rajan Rupali Shrawane Copy Editors Vikrant Phadke Sameen Siddiqui Project Coordinator Shipra Chawhan
📄 Page 16
Proofreader Stephen Copestake Safis Editing Indexer Tejal Soni Graphics Disha Haria Production Coordinator Melwyn D'sa Cover Work Melwyn D'sa
📄 Page 17
About the Authors Mayur Pandey is a professional software engineer and an open source enthusiast. He focuses on compiler development and compiler tools. He is an active contributor to the LLVM open source community. He has been part of the compiler team for the Tizen project, and has hands-on experience with other proprietary compilers. Mayur earned a bachelor's degree in information technology from Motilal Nehru National Institute of Technology Allahabad, India. Currently, he lives in Bengaluru, India. I would like to thank my family and friends. They made it possible for me to complete the book by taking care of my other commitments and always encouraging me. Suyog Sarda is a professional software engineer and an open source enthusiast. He focuses on compiler development and compiler tools. He is an active contributor to the LLVM open source community. He has been part of the compiler team for the Tizen project. Suyog was also involved in code performance improvements for the ARM and the x86 architecture. He has hands-on experience in other proprietary compilers. His interest in compiler development lies more in code optimization and vectorization. Apart from compilers, Suyog is also interested in Linux kernel development. He has published a technical paper titled Secure Co-resident Virtualization in Multicore Systems by VM Pinning and Page Coloring at the IEEE Proceedings of the 2012 International Conference on Cloud Computing, Technologies, Applications, and Management at Birla Institute of Technology, Dubai. He earned a bachelor's degree in computer technology from College of Engineering, Pune, India. Currently, he lives in Bengaluru, India. I would like to thank my family and friends. I would also like to thank the LLVM open-source community for always being helpful.
📄 Page 18
About the Reviewers Logan Chien received his master's degree in computer science from National Taiwan University. His research interests include compiler design, compiler optimization, and virtual machines. He is a full- time software engineer. In his free time, he works on several open source projects, such as LLVM and Android. Logan has participated in the LLVM project since 2012. Michael Haidl is a high performance computing engineer with focus on many core architectures that consist of Graphics Processing Units (GPUs) and Intel Xeon Phi accelerators. He has been a C++ developer for more than 14 years, and has gained many skills in parallel programming, exploiting various programming models (CUDA) over the years. He has a diploma in computer science and physics. Currently, Michael is employed as a research associate at the University of Münster, Germany, and is writing his PhD thesis with focus on compilation techniques for GPUs utilizing the LLVM infrastructure. I would like to thank my wife for supporting me every day with her smiles and love. I would also like to thank the entire LLVM community for all the hard work they have put into LLVM/Clang and other LLVM projects. It is amazing to see how fast LLVM evolves. Dave (Jing) Tian is a graduate research fellow and PhD student in the Department of Computer & Information Science & Engineering (CISE) at the University of Florida. He is a founding member of the SENSEI center. His research direction involves system security, embedded system security, trusted computing, static code analysis for security, and virtualization. He is interested in Linux kernel hacking and compiler hacking. Dave spent a year on AI and machine learning, and taught Python and operating systems at the University of Oregon. Before that, he worked as a software developer in the LCP (Linux control platform) group in research and development at Alcatel-Lucent (formerly Lucent Technologies), for approximately 4 years. He holds a bachelor's degree in science and a master's degree in electronics engineering in China. You can reach him at <root@davejingtian.org> and visit his website http://davejingtian.org. I would like to thank the author of this book, who has done a good job. Thanks to the editors of the book at Packt Publishing, who made this book perfect and offered me the opportunity to review such a nice book.
📄 Page 19
www.PacktPub.com Support files, eBooks, discount offers, and more For support files and downloads related to your book, please visit www.PacktPub.com. Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.PacktPub.com and as a print book customer, you are entitled to a discount on the eBook copy. Get in touch with us at <service@packtpub.com> for more details. At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks. https://www2.packtpub.com/books/subscription/packtlib Do you need instant solutions to your IT questions? PacktLib is Packt's online digital book library. Here, you can search, access, and read Packt's entire library of books. Why Subscribe? Fully searchable across every book published by Packt Copy and paste, print, and bookmark content On demand and accessible via a web browser Free Access for Packt account holders If you have an account with Packt at www.PacktPub.com, you can use this to access PacktLib today and view 9 entirely free books. Simply use your login credentials for immediate access.
📄 Page 20
Preface A programmer might have come across compilers at some or the other point when programming. Simply speaking, a compiler converts a human-readable, high-level language into machine-executable code. But have you ever wondered what goes on under the hood? A compiler does lot of processing before emitting optimized machine code. Lots of complex algorithms are involved in writing a good compiler. This book travels through all the phases of compilation: frontend processing, code optimization, code emission, and so on. And to make this journey easy, LLVM is the simplest compiler infrastructure to study. It's a modular, layered compiler infrastructure where every phase is dished out as a separate recipe. Written in object-oriented C++, LLVM gives programmers a simple interface and lots of APIs to write their own compiler. As authors, we maintain that simple solutions frequently work better than complex solutions; throughout this book, we'll look at a variety of recipes that will help develop your skills, make you consider all the compiling options, and understand that there is more to simply compiling code than meets the eye. We also believe that programmers who are not involved in compiler development will benefit from this book, as knowledge of compiler implementation will help them code optimally next time they write code. We hope you will find the recipes in this book delicious, and after tasting all the recipes, you will be able to prepare your own dish of compilers. Feeling hungry? Let's jump into the recipes!
The above is a preview of the first 20 pages. Register to read the complete e-book.

💝 Support Author

0.00
Total Amount (¥)
0
Donation Count

Login to support the author

Login Now

Recommended for You

Loading recommended books...
Failed to load, please try again later
Back to List