|  | Overview | 
|  | ======== | 
|  |  | 
|  | The LLVM compiler infrastructure supports a wide range of projects, from | 
|  | industrial strength compilers to specialized JIT applications to small | 
|  | research projects. | 
|  |  | 
|  | Similarly, documentation is broken down into several high-level groupings | 
|  | targeted at different audiences: | 
|  |  | 
|  | LLVM Design & Overview | 
|  | ====================== | 
|  |  | 
|  | Several introductory papers and presentations. | 
|  |  | 
|  | .. toctree:: | 
|  | :hidden: | 
|  |  | 
|  | LangRef | 
|  |  | 
|  | :doc:`LangRef` | 
|  | Defines the LLVM intermediate representation. | 
|  |  | 
|  | `Introduction to the LLVM Compiler`__ | 
|  | Presentation providing a users introduction to LLVM. | 
|  |  | 
|  | .. __: http://llvm.org/pubs/2008-10-04-ACAT-LLVM-Intro.html | 
|  |  | 
|  | `Intro to LLVM`__ | 
|  | Book chapter providing a compiler hacker's introduction to LLVM. | 
|  |  | 
|  | .. __: http://www.aosabook.org/en/llvm.html | 
|  |  | 
|  |  | 
|  | `LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation`__ | 
|  | Design overview. | 
|  |  | 
|  | .. __: http://llvm.org/pubs/2004-01-30-CGO-LLVM.html | 
|  |  | 
|  | `LLVM: An Infrastructure for Multi-Stage Optimization`__ | 
|  | More details (quite old now). | 
|  |  | 
|  | .. __: http://llvm.org/pubs/2002-12-LattnerMSThesis.html | 
|  |  | 
|  | `Publications mentioning LLVM <http://llvm.org/pubs>`_ | 
|  | .. | 
|  |  | 
|  | User Guides | 
|  | =========== | 
|  |  | 
|  | For those new to the LLVM system. | 
|  |  | 
|  | NOTE: If you are a user who is only interested in using LLVM-based | 
|  | compilers, you should look into `Clang <http://clang.llvm.org>`_ or | 
|  | `DragonEgg <http://dragonegg.llvm.org>`_ instead. The documentation here is | 
|  | intended for users who have a need to work with the intermediate LLVM | 
|  | representation. | 
|  |  | 
|  | .. toctree:: | 
|  | :hidden: | 
|  |  | 
|  | CMake | 
|  | CMakePrimer | 
|  | AdvancedBuilds | 
|  | HowToBuildOnARM | 
|  | HowToCrossCompileBuiltinsOnArm | 
|  | HowToCrossCompileLLVM | 
|  | CommandGuide/index | 
|  | GettingStarted | 
|  | GettingStartedVS | 
|  | FAQ | 
|  | Lexicon | 
|  | HowToAddABuilder | 
|  | yaml2obj | 
|  | HowToSubmitABug | 
|  | SphinxQuickstartTemplate | 
|  | Phabricator | 
|  | TestingGuide | 
|  | tutorial/index | 
|  | ReleaseNotes | 
|  | Passes | 
|  | YamlIO | 
|  | GetElementPtr | 
|  | Frontend/PerformanceTips | 
|  | MCJITDesignAndImplementation | 
|  | CodeOfConduct | 
|  | CompileCudaWithLLVM | 
|  | ReportingGuide | 
|  | Benchmarking | 
|  | Docker | 
|  |  | 
|  | :doc:`GettingStarted` | 
|  | Discusses how to get up and running quickly with the LLVM infrastructure. | 
|  | Everything from unpacking and compilation of the distribution to execution | 
|  | of some tools. | 
|  |  | 
|  | :doc:`CMake` | 
|  | An addendum to the main Getting Started guide for those using the `CMake | 
|  | build system <http://www.cmake.org>`_. | 
|  |  | 
|  | :doc:`HowToBuildOnARM` | 
|  | Notes on building and testing LLVM/Clang on ARM. | 
|  |  | 
|  | :doc:`HowToCrossCompileBuiltinsOnArm` | 
|  | Notes on cross-building and testing the compiler-rt builtins for Arm. | 
|  |  | 
|  | :doc:`HowToCrossCompileLLVM` | 
|  | Notes on cross-building and testing LLVM/Clang. | 
|  |  | 
|  | :doc:`GettingStartedVS` | 
|  | An addendum to the main Getting Started guide for those using Visual Studio | 
|  | on Windows. | 
|  |  | 
|  | :doc:`tutorial/index` | 
|  | Tutorials about using LLVM. Includes a tutorial about making a custom | 
|  | language with LLVM. | 
|  |  | 
|  | :doc:`LLVM Command Guide <CommandGuide/index>` | 
|  | A reference manual for the LLVM command line utilities ("man" pages for LLVM | 
|  | tools). | 
|  |  | 
|  | :doc:`Passes` | 
|  | A list of optimizations and analyses implemented in LLVM. | 
|  |  | 
|  | :doc:`FAQ` | 
|  | A list of common questions and problems and their solutions. | 
|  |  | 
|  | :doc:`Release notes for the current release <ReleaseNotes>` | 
|  | This describes new features, known bugs, and other limitations. | 
|  |  | 
|  | :doc:`HowToSubmitABug` | 
|  | Instructions for properly submitting information about any bugs you run into | 
|  | in the LLVM system. | 
|  |  | 
|  | :doc:`SphinxQuickstartTemplate` | 
|  | A template + tutorial for writing new Sphinx documentation. It is meant | 
|  | to be read in source form. | 
|  |  | 
|  | :doc:`LLVM Testing Infrastructure Guide <TestingGuide>` | 
|  | A reference manual for using the LLVM testing infrastructure. | 
|  |  | 
|  | `How to build the C, C++, ObjC, and ObjC++ front end`__ | 
|  | Instructions for building the clang front-end from source. | 
|  |  | 
|  | .. __: http://clang.llvm.org/get_started.html | 
|  |  | 
|  | :doc:`Lexicon` | 
|  | Definition of acronyms, terms and concepts used in LLVM. | 
|  |  | 
|  | :doc:`HowToAddABuilder` | 
|  | Instructions for adding new builder to LLVM buildbot master. | 
|  |  | 
|  | :doc:`YamlIO` | 
|  | A reference guide for using LLVM's YAML I/O library. | 
|  |  | 
|  | :doc:`GetElementPtr` | 
|  | Answers to some very frequent questions about LLVM's most frequently | 
|  | misunderstood instruction. | 
|  |  | 
|  | :doc:`Frontend/PerformanceTips` | 
|  | A collection of tips for frontend authors on how to generate IR | 
|  | which LLVM is able to effectively optimize. | 
|  |  | 
|  | :doc:`Docker` | 
|  | A reference for using Dockerfiles provided with LLVM. | 
|  |  | 
|  |  | 
|  | Programming Documentation | 
|  | ========================= | 
|  |  | 
|  | For developers of applications which use LLVM as a library. | 
|  |  | 
|  | .. toctree:: | 
|  | :hidden: | 
|  |  | 
|  | Atomics | 
|  | CodingStandards | 
|  | CommandLine | 
|  | CompilerWriterInfo | 
|  | ExtendingLLVM | 
|  | HowToSetUpLLVMStyleRTTI | 
|  | ProgrammersManual | 
|  | Extensions | 
|  | LibFuzzer | 
|  | FuzzingLLVM | 
|  | ScudoHardenedAllocator | 
|  | OptBisect | 
|  |  | 
|  | :doc:`LLVM Language Reference Manual <LangRef>` | 
|  | Defines the LLVM intermediate representation and the assembly form of the | 
|  | different nodes. | 
|  |  | 
|  | :doc:`Atomics` | 
|  | Information about LLVM's concurrency model. | 
|  |  | 
|  | :doc:`ProgrammersManual` | 
|  | Introduction to the general layout of the LLVM sourcebase, important classes | 
|  | and APIs, and some tips & tricks. | 
|  |  | 
|  | :doc:`Extensions` | 
|  | LLVM-specific extensions to tools and formats LLVM seeks compatibility with. | 
|  |  | 
|  | :doc:`CommandLine` | 
|  | Provides information on using the command line parsing library. | 
|  |  | 
|  | :doc:`CodingStandards` | 
|  | Details the LLVM coding standards and provides useful information on writing | 
|  | efficient C++ code. | 
|  |  | 
|  | :doc:`HowToSetUpLLVMStyleRTTI` | 
|  | How to make ``isa<>``, ``dyn_cast<>``, etc. available for clients of your | 
|  | class hierarchy. | 
|  |  | 
|  | :doc:`ExtendingLLVM` | 
|  | Look here to see how to add instructions and intrinsics to LLVM. | 
|  |  | 
|  | `Doxygen generated documentation <http://llvm.org/doxygen/>`_ | 
|  | (`classes <http://llvm.org/doxygen/inherits.html>`_) | 
|  |  | 
|  | `Documentation for Go bindings <http://godoc.org/llvm.org/llvm/bindings/go/llvm>`_ | 
|  |  | 
|  | `ViewVC Repository Browser <http://llvm.org/viewvc/>`_ | 
|  | .. | 
|  |  | 
|  | :doc:`CompilerWriterInfo` | 
|  | A list of helpful links for compiler writers. | 
|  |  | 
|  | :doc:`LibFuzzer` | 
|  | A library for writing in-process guided fuzzers. | 
|  |  | 
|  | :doc:`FuzzingLLVM` | 
|  | Information on writing and using Fuzzers to find bugs in LLVM. | 
|  |  | 
|  | :doc:`ScudoHardenedAllocator` | 
|  | A library that implements a security-hardened `malloc()`. | 
|  |  | 
|  | :doc:`OptBisect` | 
|  | A command line option for debugging optimization-induced failures. | 
|  |  | 
|  | .. _index-subsystem-docs: | 
|  |  | 
|  | Subsystem Documentation | 
|  | ======================= | 
|  |  | 
|  | For API clients and LLVM developers. | 
|  |  | 
|  | .. toctree:: | 
|  | :hidden: | 
|  |  | 
|  | AliasAnalysis | 
|  | MemorySSA | 
|  | BitCodeFormat | 
|  | BlockFrequencyTerminology | 
|  | BranchWeightMetadata | 
|  | Bugpoint | 
|  | CodeGenerator | 
|  | ExceptionHandling | 
|  | LinkTimeOptimization | 
|  | SegmentedStacks | 
|  | TableGenFundamentals | 
|  | TableGen/index | 
|  | DebuggingJITedCode | 
|  | GoldPlugin | 
|  | MarkedUpDisassembly | 
|  | SystemLibrary | 
|  | SourceLevelDebugging | 
|  | Vectorizers | 
|  | WritingAnLLVMBackend | 
|  | GarbageCollection | 
|  | WritingAnLLVMPass | 
|  | HowToUseAttributes | 
|  | NVPTXUsage | 
|  | AMDGPUUsage | 
|  | StackMaps | 
|  | InAlloca | 
|  | BigEndianNEON | 
|  | CoverageMappingFormat | 
|  | Statepoints | 
|  | MergeFunctions | 
|  | TypeMetadata | 
|  | FaultMaps | 
|  | MIRLangRef | 
|  | Coroutines | 
|  | GlobalISel | 
|  | XRay | 
|  | XRayExample | 
|  | XRayFDRFormat | 
|  | PDB/index | 
|  | CFIVerify | 
|  |  | 
|  | :doc:`WritingAnLLVMPass` | 
|  | Information on how to write LLVM transformations and analyses. | 
|  |  | 
|  | :doc:`WritingAnLLVMBackend` | 
|  | Information on how to write LLVM backends for machine targets. | 
|  |  | 
|  | :doc:`CodeGenerator` | 
|  | The design and implementation of the LLVM code generator.  Useful if you are | 
|  | working on retargetting LLVM to a new architecture, designing a new codegen | 
|  | pass, or enhancing existing components. | 
|  |  | 
|  | :doc:`Machine IR (MIR) Format Reference Manual <MIRLangRef>` | 
|  | A reference manual for the MIR serialization format, which is used to test | 
|  | LLVM's code generation passes. | 
|  |  | 
|  | :doc:`TableGen <TableGen/index>` | 
|  | Describes the TableGen tool, which is used heavily by the LLVM code | 
|  | generator. | 
|  |  | 
|  | :doc:`AliasAnalysis` | 
|  | Information on how to write a new alias analysis implementation or how to | 
|  | use existing analyses. | 
|  |  | 
|  | :doc:`MemorySSA` | 
|  | Information about the MemorySSA utility in LLVM, as well as how to use it. | 
|  |  | 
|  | :doc:`GarbageCollection` | 
|  | The interfaces source-language compilers should use for compiling GC'd | 
|  | programs. | 
|  |  | 
|  | :doc:`Source Level Debugging with LLVM <SourceLevelDebugging>` | 
|  | This document describes the design and philosophy behind the LLVM | 
|  | source-level debugger. | 
|  |  | 
|  | :doc:`Vectorizers` | 
|  | This document describes the current status of vectorization in LLVM. | 
|  |  | 
|  | :doc:`ExceptionHandling` | 
|  | This document describes the design and implementation of exception handling | 
|  | in LLVM. | 
|  |  | 
|  | :doc:`Bugpoint` | 
|  | Automatic bug finder and test-case reducer description and usage | 
|  | information. | 
|  |  | 
|  | :doc:`BitCodeFormat` | 
|  | This describes the file format and encoding used for LLVM "bc" files. | 
|  |  | 
|  | :doc:`System Library <SystemLibrary>` | 
|  | This document describes the LLVM System Library (``lib/System``) and | 
|  | how to keep LLVM source code portable | 
|  |  | 
|  | :doc:`LinkTimeOptimization` | 
|  | This document describes the interface between LLVM intermodular optimizer | 
|  | and the linker and its design | 
|  |  | 
|  | :doc:`GoldPlugin` | 
|  | How to build your programs with link-time optimization on Linux. | 
|  |  | 
|  | :doc:`DebuggingJITedCode` | 
|  | How to debug JITed code with GDB. | 
|  |  | 
|  | :doc:`MCJITDesignAndImplementation` | 
|  | Describes the inner workings of MCJIT execution engine. | 
|  |  | 
|  | :doc:`BranchWeightMetadata` | 
|  | Provides information about Branch Prediction Information. | 
|  |  | 
|  | :doc:`BlockFrequencyTerminology` | 
|  | Provides information about terminology used in the ``BlockFrequencyInfo`` | 
|  | analysis pass. | 
|  |  | 
|  | :doc:`SegmentedStacks` | 
|  | This document describes segmented stacks and how they are used in LLVM. | 
|  |  | 
|  | :doc:`MarkedUpDisassembly` | 
|  | This document describes the optional rich disassembly output syntax. | 
|  |  | 
|  | :doc:`HowToUseAttributes` | 
|  | Answers some questions about the new Attributes infrastructure. | 
|  |  | 
|  | :doc:`NVPTXUsage` | 
|  | This document describes using the NVPTX backend to compile GPU kernels. | 
|  |  | 
|  | :doc:`AMDGPUUsage` | 
|  | This document describes using the AMDGPU backend to compile GPU kernels. | 
|  |  | 
|  | :doc:`StackMaps` | 
|  | LLVM support for mapping instruction addresses to the location of | 
|  | values and allowing code to be patched. | 
|  |  | 
|  | :doc:`BigEndianNEON` | 
|  | LLVM's support for generating NEON instructions on big endian ARM targets is | 
|  | somewhat nonintuitive. This document explains the implementation and rationale. | 
|  |  | 
|  | :doc:`CoverageMappingFormat` | 
|  | This describes the format and encoding used for LLVM’s code coverage mapping. | 
|  |  | 
|  | :doc:`Statepoints` | 
|  | This describes a set of experimental extensions for garbage | 
|  | collection support. | 
|  |  | 
|  | :doc:`MergeFunctions` | 
|  | Describes functions merging optimization. | 
|  |  | 
|  | :doc:`InAlloca` | 
|  | Description of the ``inalloca`` argument attribute. | 
|  |  | 
|  | :doc:`FaultMaps` | 
|  | LLVM support for folding control flow into faulting machine instructions. | 
|  |  | 
|  | :doc:`CompileCudaWithLLVM` | 
|  | LLVM support for CUDA. | 
|  |  | 
|  | :doc:`Coroutines` | 
|  | LLVM support for coroutines. | 
|  |  | 
|  | :doc:`GlobalISel` | 
|  | This describes the prototype instruction selection replacement, GlobalISel. | 
|  |  | 
|  | :doc:`XRay` | 
|  | High-level documentation of how to use XRay in LLVM. | 
|  |  | 
|  | :doc:`XRayExample` | 
|  | An example of how to debug an application with XRay. | 
|  |  | 
|  | :doc:`The Microsoft PDB File Format <PDB/index>` | 
|  | A detailed description of the Microsoft PDB (Program Database) file format. | 
|  |  | 
|  | :doc:`CFIVerify` | 
|  | A description of the verification tool for Control Flow Integrity. | 
|  |  | 
|  | Development Process Documentation | 
|  | ================================= | 
|  |  | 
|  | Information about LLVM's development process. | 
|  |  | 
|  | .. toctree:: | 
|  | :hidden: | 
|  |  | 
|  | Contributing | 
|  | DeveloperPolicy | 
|  | Projects | 
|  | LLVMBuild | 
|  | HowToReleaseLLVM | 
|  | Packaging | 
|  | ReleaseProcess | 
|  | Phabricator | 
|  |  | 
|  | :doc:`Contributing` | 
|  | An overview on how to contribute to LLVM. | 
|  |  | 
|  | :doc:`DeveloperPolicy` | 
|  | The LLVM project's policy towards developers and their contributions. | 
|  |  | 
|  | :doc:`Projects` | 
|  | How-to guide and templates for new projects that *use* the LLVM | 
|  | infrastructure.  The templates (directory organization, Makefiles, and test | 
|  | tree) allow the project code to be located outside (or inside) the ``llvm/`` | 
|  | tree, while using LLVM header files and libraries. | 
|  |  | 
|  | :doc:`LLVMBuild` | 
|  | Describes the LLVMBuild organization and files used by LLVM to specify | 
|  | component descriptions. | 
|  |  | 
|  | :doc:`HowToReleaseLLVM` | 
|  | This is a guide to preparing LLVM releases. Most developers can ignore it. | 
|  |  | 
|  | :doc:`ReleaseProcess` | 
|  | This is a guide to validate a new release, during the release process. Most developers can ignore it. | 
|  |  | 
|  | :doc:`Packaging` | 
|  | Advice on packaging LLVM into a distribution. | 
|  |  | 
|  | :doc:`Phabricator` | 
|  | Describes how to use the Phabricator code review tool hosted on | 
|  | http://reviews.llvm.org/ and its command line interface, Arcanist. | 
|  |  | 
|  | Community | 
|  | ========= | 
|  |  | 
|  | LLVM has a thriving community of friendly and helpful developers. | 
|  | The two primary communication mechanisms in the LLVM community are mailing | 
|  | lists and IRC. | 
|  |  | 
|  | Mailing Lists | 
|  | ------------- | 
|  |  | 
|  | If you can't find what you need in these docs, try consulting the mailing | 
|  | lists. | 
|  |  | 
|  | `Developer's List (llvm-dev)`__ | 
|  | This list is for people who want to be included in technical discussions of | 
|  | LLVM. People post to this list when they have questions about writing code | 
|  | for or using the LLVM tools. It is relatively low volume. | 
|  |  | 
|  | .. __: http://lists.llvm.org/mailman/listinfo/llvm-dev | 
|  |  | 
|  | `Commits Archive (llvm-commits)`__ | 
|  | This list contains all commit messages that are made when LLVM developers | 
|  | commit code changes to the repository. It also serves as a forum for | 
|  | patch review (i.e. send patches here). It is useful for those who want to | 
|  | stay on the bleeding edge of LLVM development. This list is very high | 
|  | volume. | 
|  |  | 
|  | .. __: http://lists.llvm.org/pipermail/llvm-commits/ | 
|  |  | 
|  | `Bugs & Patches Archive (llvm-bugs)`__ | 
|  | This list gets emailed every time a bug is opened and closed. It is | 
|  | higher volume than the LLVM-dev list. | 
|  |  | 
|  | .. __: http://lists.llvm.org/pipermail/llvm-bugs/ | 
|  |  | 
|  | `Test Results Archive (llvm-testresults)`__ | 
|  | A message is automatically sent to this list by every active nightly tester | 
|  | when it completes.  As such, this list gets email several times each day, | 
|  | making it a high volume list. | 
|  |  | 
|  | .. __: http://lists.llvm.org/pipermail/llvm-testresults/ | 
|  |  | 
|  | `LLVM Announcements List (llvm-announce)`__ | 
|  | This is a low volume list that provides important announcements regarding | 
|  | LLVM.  It gets email about once a month. | 
|  |  | 
|  | .. __: http://lists.llvm.org/mailman/listinfo/llvm-announce | 
|  |  | 
|  | IRC | 
|  | --- | 
|  |  | 
|  | Users and developers of the LLVM project (including subprojects such as Clang) | 
|  | can be found in #llvm on `irc.oftc.net <irc://irc.oftc.net/llvm>`_. | 
|  |  | 
|  | This channel has several bots. | 
|  |  | 
|  | * Buildbot reporters | 
|  |  | 
|  | * llvmbb - Bot for the main LLVM buildbot master. | 
|  | http://lab.llvm.org:8011/console | 
|  | * bb-chapuni - An individually run buildbot master. http://bb.pgr.jp/console | 
|  | * smooshlab - Apple's internal buildbot master. | 
|  |  | 
|  | * robot - Bugzilla linker. %bug <number> | 
|  |  | 
|  | * clang-bot - A `geordi <http://www.eelis.net/geordi/>`_ instance running | 
|  | near-trunk clang instead of gcc. | 
|  |  | 
|  | Community wide proposals | 
|  | ------------------------ | 
|  |  | 
|  | Proposals for massive changes in how the community behaves and how the work flow | 
|  | can be better. | 
|  |  | 
|  | .. toctree:: | 
|  | :hidden: | 
|  |  | 
|  | CodeOfConduct | 
|  | Proposals/GitHubMove | 
|  | Proposals/VectorizationPlan | 
|  |  | 
|  | :doc:`CodeOfConduct` | 
|  | Proposal to adopt a code of conduct on the LLVM social spaces (lists, events, | 
|  | IRC, etc). | 
|  |  | 
|  | :doc:`Proposals/GitHubMove` | 
|  | Proposal to move from SVN/Git to GitHub. | 
|  |  | 
|  | :doc:`Proposals/VectorizationPlan` | 
|  | Proposal to model the process and upgrade the infrastructure of LLVM's Loop Vectorizer. | 
|  |  | 
|  | Indices and tables | 
|  | ================== | 
|  |  | 
|  | * :ref:`genindex` | 
|  | * :ref:`search` |