135 changes: 135 additions & 0 deletions llvm/docs/UserGuides.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
User Guides
===========

For those new to the LLVM system.

NOTE: If you are a user who is only interested in using an LLVM-based compiler,
you should look into `Clang <http://clang.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
HowToBuildWithPGO
HowToCrossCompileBuiltinsOnArm
HowToCrossCompileLLVM
CommandGuide/index
GettingStarted
GettingStartedVS
FAQ
Lexicon
HowToAddABuilder
yaml2obj
HowToSubmitABug
SphinxQuickstartTemplate
MarkdownQuickstartTemplate
Phabricator
TestingGuide
tutorial/index
ReleaseNotes
Passes
YamlIO
GetElementPtr
Frontend/PerformanceTips
MCJITDesignAndImplementation
ORCv2
CodeOfConduct
CompileCudaWithLLVM
ReportingGuide
Benchmarking
Docker
BuildingADistribution
Remarks

: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:`HowToBuildWithPGO`
Notes on building LLVM/Clang with PGO.

: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.

:doc:`TestSuiteGuide`
Describes how to compile and run the test-suite benchmarks.

`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.

:doc:`BuildingADistribution`
A best-practices guide for using LLVM's CMake build system to package and
distribute LLVM-based tools.

:doc:`Remarks`
A reference on the implementation of remarks in LLVM.
428 changes: 13 additions & 415 deletions llvm/docs/index.rst
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Overview
About
========

.. warning::
Expand Down Expand Up @@ -50,428 +50,26 @@ Several introductory papers and presentations.
`Publications mentioning LLVM <http://llvm.org/pubs>`_
..
User Guides
===========
Documentation
=============

For those new to the LLVM system.

NOTE: If you are a user who is only interested in using an LLVM-based compiler,
you should look into `Clang <http://clang.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
HowToBuildWithPGO
HowToCrossCompileBuiltinsOnArm
HowToCrossCompileLLVM
CommandGuide/index
GettingStarted
GettingStartedVS
FAQ
Lexicon
HowToAddABuilder
yaml2obj
HowToSubmitABug
SphinxQuickstartTemplate
MarkdownQuickstartTemplate
Phabricator
TestingGuide
tutorial/index
ReleaseNotes
Passes
YamlIO
GetElementPtr
Frontend/PerformanceTips
MCJITDesignAndImplementation
ORCv2
CodeOfConduct
CompileCudaWithLLVM
ReportingGuide
Benchmarking
Docker
BuildingADistribution
Remarks

: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:`HowToBuildWithPGO`
Notes on building LLVM/Clang with PGO.

: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.

:doc:`TestSuiteGuide`
Describes how to compile and run the test-suite benchmarks.

`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.

:doc:`BuildingADistribution`
A best-practices guide for using LLVM's CMake build system to package and
distribute LLVM-based tools.

:doc:`Remarks`
A reference on the implementation of remarks in 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
GwpAsan

: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>`_

`Github Source Repository Browser <http://github.com/llvm/llvm-project//>`_
..
: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.

:doc:`GwpAsan`
A sampled heap memory error detection toolkit designed for production use.

.. _index-subsystem-docs:

Subsystem Documentation
=======================

For API clients and LLVM developers.
Getting Started, How-tos, Developer Guides, and Tutorials.

.. toctree::
:hidden:

AliasAnalysis
MemorySSA
BitCodeFormat
BlockFrequencyTerminology
BranchWeightMetadata
Bugpoint
BugpointRedesign
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
MIRLangRef
Coroutines
GlobalISel
XRay
XRayExample
XRayFDRFormat
PDB/index
CFIVerify
SpeculativeLoadHardening
StackSafetyAnalysis
LoopTerminology

: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:`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:`BugpointRedesign`
Design doc for a redesign of the Bugpoint tool.

:doc:`BitCodeFormat`
This describes the file format and encoding used for LLVM "bc" files.

:doc:`Support Library <SupportLibrary>`
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 <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.
Programming Documentation
Subsystem Documentation
User Guides

:doc:`SpeculativeLoadHardening`
A description of the Speculative Load Hardening mitigation for Spectre v1.
:doc:`UserGuides`
For those new to the LLVM system.

:doc:`StackSafetyAnalysis`
This document describes the design of the stack safety analysis of local
variables.
:doc:`ProgrammingDocumentation`
For developers of applications which use LLVM as a library.

:doc:`LoopTerminology`
A document describing Loops and associated terms as used in LLVM.
:doc:`SubsystemDocumentation`
For API clients and LLVM developers.

Development Process Documentation
=================================
Expand Down