[sanitizer] Improve FreeBSD ASLR detection
[llvm-project.git] / llvm / docs / UserGuides.rst
blobf68dea71cb28921576e1bcca34c403283ee8557f
1 User Guides\r
2 ===========\r
3 \r
4 NOTE: If you are a user who is only interested in using an LLVM-based compiler,\r
5 you should look into `Clang <https://clang.llvm.org>`_ instead. The\r
6 documentation here is intended for users who have a need to work with the\r
7 intermediate LLVM representation.\r
8 \r
9 .. contents::\r
10    :local:\r
12 .. toctree::\r
13    :hidden:\r
15    AddingConstrainedIntrinsics\r
16    AdvancedBuilds\r
17    AliasAnalysis\r
18    AMDGPUUsage\r
19    Benchmarking\r
20    BigEndianNEON\r
21    BuildingADistribution\r
22    CFIVerify\r
23    CMake\r
24    CMakePrimer\r
25    CodeGenerator\r
26    CodeOfConduct\r
27    CommandLine\r
28    CompileCudaWithLLVM\r
29    CoverageMappingFormat\r
30    CycleTerminology\r
31    DebuggingJITedCode\r
32    Docker\r
33    ExtendingLLVM\r
34    GoldPlugin\r
35    HowToBuildOnARM\r
36    HowToBuildWithPGO\r
37    HowToBuildWindowsItaniumPrograms\r
38    HowToCrossCompileBuiltinsOnArm\r
39    HowToCrossCompileLLVM\r
40    HowToUpdateDebugInfo\r
41    LinkTimeOptimization\r
42    LoopTerminology\r
43    MarkdownQuickstartTemplate\r
44    MemorySSA\r
45    MergeFunctions\r
46    MCJITDesignAndImplementation\r
47    ORCv2\r
48    OpaquePointers\r
49    JITLink\r
50    NewPassManager\r
51    NVPTXUsage\r
52    Phabricator\r
53    Passes\r
54    ReportingGuide\r
55    Remarks\r
56    SourceLevelDebugging\r
57    StackSafetyAnalysis\r
58    SupportLibrary\r
59    TableGen/index\r
60    TableGenFundamentals\r
61    Vectorizers\r
62    WritingAnLLVMPass\r
63    WritingAnLLVMNewPMPass\r
64    WritingAnLLVMBackend\r
65    yaml2obj\r
67 Clang\r
68 -----\r
70 :doc:`HowToBuildOnARM`\r
71    Notes on building and testing LLVM/Clang on ARM.\r
73 :doc:`HowToBuildWithPGO`\r
74     Notes on building LLVM/Clang with PGO.\r
76 :doc:`HowToCrossCompileLLVM`\r
77    Notes on cross-building and testing LLVM/Clang.\r
79 `How to build the C, C++, ObjC, and ObjC++ front end`__\r
80    Instructions for building the clang front-end from source.\r
82    .. __: https://clang.llvm.org/get_started.html\r
84 :doc:`CoverageMappingFormat`\r
85   This describes the format and encoding used for LLVM’s code coverage mapping.\r
87 :doc:`CFIVerify`\r
88   A description of the verification tool for Control Flow Integrity.\r
90 LLVM Builds and Distributions\r
91 -----------------------------\r
93 :doc:`BuildingADistribution`\r
94   A best-practices guide for using LLVM's CMake build system to package and\r
95   distribute LLVM-based tools.\r
97 :doc:`CMake`\r
98    An addendum to the main Getting Started guide for those using the `CMake\r
99    build system <http://www.cmake.org>`_.\r
101 :doc:`Docker`\r
102    A reference for using Dockerfiles provided with LLVM.\r
104 :doc:`Support Library <SupportLibrary>`\r
105    This document describes the LLVM Support Library (``lib/Support``) and\r
106    how to keep LLVM source code portable.\r
108 :doc:`AdvancedBuilds`\r
109    This document describes more advanced build configurations.\r
111 Optimizations\r
112 -------------\r
114 :doc:`WritingAnLLVMPass`\r
115    Information on how to write LLVM transformations and analyses.\r
117 :doc:`WritingAnLLVMNewPMPass`\r
118    Information on how to write LLVM transformations under the new pass\r
119    manager.\r
121 :doc:`Passes`\r
122    A list of optimizations and analyses implemented in LLVM.\r
124 :doc:`StackSafetyAnalysis`\r
125   This document describes the design of the stack safety analysis of local\r
126   variables.\r
128 :doc:`MergeFunctions`\r
129   Describes functions merging optimization.\r
131 :doc:`AliasAnalysis`\r
132    Information on how to write a new alias analysis implementation or how to\r
133    use existing analyses.\r
135 :doc:`MemorySSA`\r
136    Information about the MemorySSA utility in LLVM, as well as how to use it.\r
138 :doc:`LoopTerminology`\r
139   A document describing Loops and associated terms as used in LLVM.\r
141 :doc:`CycleTerminology`\r
142   A document describing cycles as a generalization of loops.\r
144 :doc:`Vectorizers`\r
145    This document describes the current status of vectorization in LLVM.\r
147 :doc:`LinkTimeOptimization`\r
148    This document describes the interface between LLVM intermodular optimizer\r
149    and the linker and its design\r
151 :doc:`GoldPlugin`\r
152    How to build your programs with link-time optimization on Linux.\r
154 :doc:`Remarks`\r
155    A reference on the implementation of remarks in LLVM.\r
157 :doc:`Source Level Debugging with LLVM <SourceLevelDebugging>`\r
158    This document describes the design and philosophy behind the LLVM\r
159    source-level debugger.\r
161 Code Generation\r
162 ---------------\r
164 :doc:`WritingAnLLVMBackend`\r
165    Information on how to write LLVM backends for machine targets.\r
167 :doc:`CodeGenerator`\r
168    The design and implementation of the LLVM code generator.  Useful if you are\r
169    working on retargetting LLVM to a new architecture, designing a new codegen\r
170    pass, or enhancing existing components.\r
172 :doc:`TableGen <TableGen/index>`\r
173    Describes the TableGen tool, which is used heavily by the LLVM code\r
174    generator.\r
176 ===\r
177 JIT\r
178 ===\r
180 :doc:`MCJITDesignAndImplementation`\r
181    Describes the inner workings of MCJIT execution engine.\r
183 :doc:`ORCv2`\r
184    Describes the design and implementation of the ORC APIs, including some\r
185    usage examples, and a guide for users transitioning from ORCv1 to ORCv2.\r
187 :doc:`JITLink`\r
188    Describes the design and APIs for the JITLink library, ORC's new JIT\r
189    linker.\r
191 :doc:`DebuggingJITedCode`\r
192    How to debug JITed code with GDB.\r
194 Additional Topics\r
195 -----------------\r
197 :doc:`CommandLine`\r
198   Provides information on using the command line parsing library.\r
200 :doc:`ExtendingLLVM`\r
201   Look here to see how to add instructions and intrinsics to LLVM.\r
203 :doc:`AddingConstrainedIntrinsics`\r
204    Gives the steps necessary when adding a new constrained math intrinsic\r
205    to LLVM.\r
207 :doc:`HowToBuildWindowsItaniumPrograms`\r
208    Notes on assembling a Windows Itanium environment.\r
210 :doc:`HowToCrossCompileBuiltinsOnArm`\r
211    Notes on cross-building and testing the compiler-rt builtins for Arm.\r
213 :doc:`BigEndianNEON`\r
214   LLVM's support for generating NEON instructions on big endian ARM targets is\r
215   somewhat nonintuitive. This document explains the implementation and rationale.\r
217 :doc:`CompileCudaWithLLVM`\r
218   LLVM support for CUDA.\r
220 :doc:`NVPTXUsage`\r
221    This document describes using the NVPTX backend to compile GPU kernels.\r
223 :doc:`AMDGPUUsage`\r
224    This document describes using the AMDGPU backend to compile GPU kernels.\r
226 :doc:`AMDGPUDwarfExtensionsForHeterogeneousDebugging`\r
227    This document describes DWARF extensions to support heterogeneous debugging\r
228    for targets such as the AMDGPU backend.\r
230 :doc:`AMDGPUDwarfExtensionAllowLocationDescriptionOnTheDwarfExpressionStack/AMDGPUDwarfExtensionAllowLocationDescriptionOnTheDwarfExpressionStack`\r
231    This document describes a DWARF extension to allow location descriptions on\r
232    the DWARF expression stack. It is part of\r
233    :doc:`AMDGPUDwarfExtensionsForHeterogeneousDebugging`.\r