| User Guides | |
| =========== | |
| NOTE: If you are a user who is only interested in using an LLVM-based compiler, | |
| you should look into `Clang <https://clang.llvm.org>`_ instead. The | |
| documentation here is intended for users who have a need to work with the | |
| intermediate LLVM representation. | |
| .. contents:: | |
| :local: | |
| .. toctree:: | |
| :hidden: | |
| AddingConstrainedIntrinsics | |
| AdvancedBuilds | |
| AliasAnalysis | |
| AMDGPUUsage | |
| Benchmarking | |
| BigEndianNEON | |
| BuildingADistribution | |
| CFIVerify | |
| CMake | |
| CMakePrimer | |
| CodeGenerator | |
| CodeOfConduct | |
| CommandLine | |
| CompileCudaWithLLVM | |
| CoverageMappingFormat | |
| CycleTerminology | |
| DebuggingJITedCode | |
| DirectXUsage | |
| Docker | |
| ExtendingLLVM | |
| GoldPlugin | |
| HowToBuildOnARM | |
| HowToBuildWithPGO | |
| HowToBuildWindowsItaniumPrograms | |
| HowToCrossCompileBuiltinsOnArm | |
| HowToCrossCompileLLVM | |
| HowToUpdateDebugInfo | |
| InstrRefDebugInfo | |
| LinkTimeOptimization | |
| LoopTerminology | |
| MarkdownQuickstartTemplate | |
| MemorySSA | |
| MergeFunctions | |
| MCJITDesignAndImplementation | |
| MisExpect | |
| ORCv2 | |
| OpaquePointers | |
| JITLink | |
| NewPassManager | |
| NVPTXUsage | |
| Phabricator | |
| Passes | |
| ReportingGuide | |
| ResponseGuide | |
| Remarks | |
| SourceLevelDebugging | |
| SPIRVUsage | |
| StackSafetyAnalysis | |
| SupportLibrary | |
| TableGen/index | |
| TableGenFundamentals | |
| Vectorizers | |
| WritingAnLLVMPass | |
| WritingAnLLVMNewPMPass | |
| WritingAnLLVMBackend | |
| yaml2obj | |
| Clang | |
| ----- | |
| :doc:`HowToBuildOnARM` | |
| Notes on building and testing LLVM/Clang on ARM. | |
| :doc:`HowToBuildWithPGO` | |
| Notes on building LLVM/Clang with PGO. | |
| :doc:`HowToCrossCompileLLVM` | |
| Notes on cross-building and testing LLVM/Clang. | |
| `How to build the C, C++, ObjC, and ObjC++ front end`__ | |
| Instructions for building the clang front-end from source. | |
| .. __: https://clang.llvm.org/get_started.html | |
| :doc:`CoverageMappingFormat` | |
| This describes the format and encoding used for LLVM’s code coverage mapping. | |
| :doc:`CFIVerify` | |
| A description of the verification tool for Control Flow Integrity. | |
| LLVM Builds and Distributions | |
| ----------------------------- | |
| :doc:`BuildingADistribution` | |
| A best-practices guide for using LLVM's CMake build system to package and | |
| distribute LLVM-based tools. | |
| :doc:`CMake` | |
| An addendum to the main Getting Started guide for those using the `CMake | |
| build system <http://www.cmake.org>`_. | |
| :doc:`Docker` | |
| A reference for using Dockerfiles provided with LLVM. | |
| :doc:`Support Library <SupportLibrary>` | |
| This document describes the LLVM Support Library (``lib/Support``) and | |
| how to keep LLVM source code portable. | |
| :doc:`AdvancedBuilds` | |
| This document describes more advanced build configurations. | |
| Optimizations | |
| ------------- | |
| :doc:`WritingAnLLVMPass` | |
| Information on how to write LLVM transformations and analyses. | |
| :doc:`WritingAnLLVMNewPMPass` | |
| Information on how to write LLVM transformations under the new pass | |
| manager. | |
| :doc:`Passes` | |
| A list of optimizations and analyses implemented in LLVM. | |
| :doc:`StackSafetyAnalysis` | |
| This document describes the design of the stack safety analysis of local | |
| variables. | |
| :doc:`MergeFunctions` | |
| Describes functions merging optimization. | |
| :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:`LoopTerminology` | |
| A document describing Loops and associated terms as used in LLVM. | |
| :doc:`CycleTerminology` | |
| A document describing cycles as a generalization of loops. | |
| :doc:`Vectorizers` | |
| This document describes the current status of vectorization in LLVM. | |
| :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:`Remarks` | |
| A reference on the implementation of remarks in LLVM. | |
| :doc:`Source Level Debugging with LLVM <SourceLevelDebugging>` | |
| This document describes the design and philosophy behind the LLVM | |
| source-level debugger. | |
| :doc:`How to Update Debug Info <HowToUpdateDebugInfo>` | |
| This document specifies how to correctly update debug info in various kinds | |
| of code transformations. | |
| :doc:`InstrRefDebugInfo` | |
| This document explains how LLVM uses value tracking, or instruction | |
| referencing, to determine variable locations for debug info in the final | |
| stages of compilation. | |
| Code Generation | |
| --------------- | |
| :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:`TableGen <TableGen/index>` | |
| Describes the TableGen tool, which is used heavily by the LLVM code | |
| generator. | |
| === | |
| JIT | |
| === | |
| :doc:`MCJITDesignAndImplementation` | |
| Describes the inner workings of MCJIT execution engine. | |
| :doc:`ORCv2` | |
| Describes the design and implementation of the ORC APIs, including some | |
| usage examples, and a guide for users transitioning from ORCv1 to ORCv2. | |
| :doc:`JITLink` | |
| Describes the design and APIs for the JITLink library, ORC's new JIT | |
| linker. | |
| :doc:`DebuggingJITedCode` | |
| How to debug JITed code with GDB. | |
| Additional Topics | |
| ----------------- | |
| :doc:`CommandLine` | |
| Provides information on using the command line parsing library. | |
| :doc:`ExtendingLLVM` | |
| Look here to see how to add instructions and intrinsics to LLVM. | |
| :doc:`AddingConstrainedIntrinsics` | |
| Gives the steps necessary when adding a new constrained math intrinsic | |
| to LLVM. | |
| :doc:`HowToBuildWindowsItaniumPrograms` | |
| Notes on assembling a Windows Itanium environment. | |
| :doc:`HowToCrossCompileBuiltinsOnArm` | |
| Notes on cross-building and testing the compiler-rt builtins for Arm. | |
| :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:`CompileCudaWithLLVM` | |
| LLVM support for CUDA. | |
| :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:`AMDGPUDwarfExtensionsForHeterogeneousDebugging` | |
| This document describes DWARF extensions to support heterogeneous debugging | |
| for targets such as the AMDGPU backend. | |
| :doc:`AMDGPUDwarfExtensionAllowLocationDescriptionOnTheDwarfExpressionStack/AMDGPUDwarfExtensionAllowLocationDescriptionOnTheDwarfExpressionStack` | |
| This document describes a DWARF extension to allow location descriptions on | |
| the DWARF expression stack. It is part of | |
| :doc:`AMDGPUDwarfExtensionsForHeterogeneousDebugging`. | |
| :doc:`SPIRVUsage` | |
| This document describes using the SPIR-V target to compile GPU kernels. | |
| :doc:`DirectXUsage` | |
| This document describes using the DirectX target to compile GPU code for the | |
| DirectX runtime. |