diff --git a/docs/ProgrammingDocumentation.rst b/docs/ProgrammingDocumentation.rst new file mode 100644 index 00000000000..fa8f114b22a --- /dev/null +++ b/docs/ProgrammingDocumentation.rst @@ -0,0 +1,54 @@ +Programming Documentation +========================= + +For developers of applications which use LLVM as a library. + +.. toctree:: + :hidden: + + Atomics + CommandLine + ExtendingLLVM + HowToSetUpLLVMStyleRTTI + ProgrammersManual + Extensions + LibFuzzer + FuzzingLLVM + ScudoHardenedAllocator + OptBisect + GwpAsan + +: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:`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. + +: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. + +:doc:`GwpAsan` + A sampled heap memory error detection toolkit designed for production use. \ No newline at end of file diff --git a/docs/SubsystemDocumentation.rst b/docs/SubsystemDocumentation.rst new file mode 100644 index 00000000000..cac0ce85b1f --- /dev/null +++ b/docs/SubsystemDocumentation.rst @@ -0,0 +1,206 @@ +.. _index-subsystem-docs: + +Subsystem Documentation +======================= + +For API clients and LLVM developers. + +.. toctree:: + :hidden: + + AliasAnalysis + MemorySSA + BitCodeFormat + BlockFrequencyTerminology + BranchWeightMetadata + Bugpoint + CodeGenerator + ExceptionHandling + AddingConstrainedIntrinsics + LinkTimeOptimization + SegmentedStacks + TableGenFundamentals + TableGen/index + DebuggingJITedCode + GoldPlugin + MarkedUpDisassembly + SystemLibrary + SupportLibrary + SourceLevelDebugging + Vectorizers + WritingAnLLVMBackend + GarbageCollection + WritingAnLLVMPass + HowToUseAttributes + NVPTXUsage + AMDGPUUsage + StackMaps + InAlloca + BigEndianNEON + CoverageMappingFormat + Statepoints + MergeFunctions + TypeMetadata + TransformMetadata + FaultMaps + Coroutines + GlobalISel + XRay + XRayExample + XRayFDRFormat + PDB/index + CFIVerify + SpeculativeLoadHardening + StackSafetyAnalysis + LoopTerminology + DependenceGraphs/index + +: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:`TableGen ` + 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 ` + 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:`AddingConstrainedIntrinsics` + Gives the steps necessary when adding a new constrained math intrinsic + to 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:`Support Library ` + This document describes the LLVM Support Library (``lib/Support``) 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:`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:`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 ` + A detailed description of the Microsoft PDB (Program Database) file format. + +:doc:`CFIVerify` + A description of the verification tool for Control Flow Integrity. + +:doc:`SpeculativeLoadHardening` + A description of the Speculative Load Hardening mitigation for Spectre v1. + +:doc:`StackSafetyAnalysis` + This document describes the design of the stack safety analysis of local + variables. + +:doc:`LoopTerminology` + A document describing Loops and associated terms as used in LLVM. + +:doc:`Dependence Graphs ` + A description of the design of the various dependence graphs such as + the DDG (Data Dependence Graph).