Home | History | Annotate | Download | only in docs
      1 Overview
      2 ========
      3 
      4 .. warning::
      5 
      6    If you are using a released version of LLVM, see `the download page
      7    <http://llvm.org/releases/>`_ to find your documentation.
      8 
      9 The LLVM compiler infrastructure supports a wide range of projects, from
     10 industrial strength compilers to specialized JIT applications to small
     11 research projects.
     12 
     13 Similarly, documentation is broken down into several high-level groupings
     14 targeted at different audiences:
     15 
     16 LLVM Design & Overview
     17 ======================
     18 
     19 Several introductory papers and presentations.
     20 
     21 .. toctree::
     22    :hidden:
     23 
     24    LangRef
     25 
     26 :doc:`LangRef`
     27   Defines the LLVM intermediate representation.
     28 
     29 `Introduction to the LLVM Compiler`__
     30   Presentation providing a users introduction to LLVM.
     31 
     32   .. __: http://llvm.org/pubs/2008-10-04-ACAT-LLVM-Intro.html
     33 
     34 `Intro to LLVM`__
     35   Book chapter providing a compiler hacker's introduction to LLVM.
     36 
     37   .. __: http://www.aosabook.org/en/llvm.html
     38 
     39 
     40 `LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation`__
     41   Design overview.
     42 
     43   .. __: http://llvm.org/pubs/2004-01-30-CGO-LLVM.html
     44 
     45 `LLVM: An Infrastructure for Multi-Stage Optimization`__
     46   More details (quite old now).
     47 
     48   .. __: http://llvm.org/pubs/2002-12-LattnerMSThesis.html
     49 
     50 `Publications mentioning LLVM <http://llvm.org/pubs>`_
     51    ..
     52 
     53 User Guides
     54 ===========
     55 
     56 For those new to the LLVM system.
     57 
     58 NOTE: If you are a user who is only interested in using LLVM-based
     59 compilers, you should look into `Clang <http://clang.llvm.org>`_ or
     60 `DragonEgg <http://dragonegg.llvm.org>`_ instead. The documentation here is
     61 intended for users who have a need to work with the intermediate LLVM
     62 representation.
     63 
     64 .. toctree::
     65    :hidden:
     66 
     67    CMake
     68    HowToBuildOnARM
     69    HowToCrossCompileLLVM
     70    CommandGuide/index
     71    GettingStarted
     72    GettingStartedVS
     73    BuildingLLVMWithAutotools
     74    FAQ
     75    Lexicon
     76    HowToAddABuilder
     77    yaml2obj
     78    HowToSubmitABug
     79    SphinxQuickstartTemplate
     80    Phabricator
     81    TestingGuide
     82    tutorial/index
     83    ReleaseNotes
     84    Passes
     85    YamlIO
     86    GetElementPtr
     87    Frontend/PerformanceTips
     88    MCJITDesignAndImplementation
     89    CompileCudaWithLLVM
     90 
     91 :doc:`GettingStarted`
     92    Discusses how to get up and running quickly with the LLVM infrastructure.
     93    Everything from unpacking and compilation of the distribution to execution
     94    of some tools.
     95 
     96 :doc:`CMake`
     97    An addendum to the main Getting Started guide for those using the `CMake
     98    build system <http://www.cmake.org>`_.
     99 
    100 :doc:`HowToBuildOnARM`
    101    Notes on building and testing LLVM/Clang on ARM.
    102 
    103 :doc:`HowToCrossCompileLLVM`
    104    Notes on cross-building and testing LLVM/Clang.
    105 
    106 :doc:`GettingStartedVS`
    107    An addendum to the main Getting Started guide for those using Visual Studio
    108    on Windows.
    109 
    110 :doc:`BuildingLLVMWithAutotools`
    111    An addendum to the Getting Started guide with instructions for building LLVM
    112    with the Autotools build system.
    113 
    114 :doc:`tutorial/index`
    115    Tutorials about using LLVM. Includes a tutorial about making a custom
    116    language with LLVM.
    117 
    118 :doc:`LLVM Command Guide <CommandGuide/index>`
    119    A reference manual for the LLVM command line utilities ("man" pages for LLVM
    120    tools).
    121 
    122 :doc:`Passes`
    123    A list of optimizations and analyses implemented in LLVM.
    124 
    125 :doc:`FAQ`
    126    A list of common questions and problems and their solutions.
    127 
    128 :doc:`Release notes for the current release <ReleaseNotes>`
    129    This describes new features, known bugs, and other limitations.
    130 
    131 :doc:`HowToSubmitABug`
    132    Instructions for properly submitting information about any bugs you run into
    133    in the LLVM system.
    134 
    135 :doc:`SphinxQuickstartTemplate`
    136   A template + tutorial for writing new Sphinx documentation. It is meant
    137   to be read in source form.
    138 
    139 :doc:`LLVM Testing Infrastructure Guide <TestingGuide>`
    140    A reference manual for using the LLVM testing infrastructure.
    141 
    142 `How to build the C, C++, ObjC, and ObjC++ front end`__
    143    Instructions for building the clang front-end from source.
    144 
    145    .. __: http://clang.llvm.org/get_started.html
    146 
    147 :doc:`Lexicon`
    148    Definition of acronyms, terms and concepts used in LLVM.
    149 
    150 :doc:`HowToAddABuilder`
    151    Instructions for adding new builder to LLVM buildbot master.
    152 
    153 :doc:`YamlIO`
    154    A reference guide for using LLVM's YAML I/O library.
    155 
    156 :doc:`GetElementPtr`
    157   Answers to some very frequent questions about LLVM's most frequently
    158   misunderstood instruction.
    159 
    160 :doc:`Frontend/PerformanceTips`
    161    A collection of tips for frontend authors on how to generate IR 
    162    which LLVM is able to effectively optimize.
    163 
    164 
    165 Programming Documentation
    166 =========================
    167 
    168 For developers of applications which use LLVM as a library.
    169 
    170 .. toctree::
    171    :hidden:
    172 
    173    Atomics
    174    CodingStandards
    175    CommandLine
    176    CompilerWriterInfo
    177    ExtendingLLVM
    178    HowToSetUpLLVMStyleRTTI
    179    ProgrammersManual
    180    Extensions
    181    LibFuzzer
    182 
    183 :doc:`LLVM Language Reference Manual <LangRef>`
    184   Defines the LLVM intermediate representation and the assembly form of the
    185   different nodes.
    186 
    187 :doc:`Atomics`
    188   Information about LLVM's concurrency model.
    189 
    190 :doc:`ProgrammersManual`
    191   Introduction to the general layout of the LLVM sourcebase, important classes
    192   and APIs, and some tips & tricks.
    193 
    194 :doc:`Extensions`
    195   LLVM-specific extensions to tools and formats LLVM seeks compatibility with.
    196 
    197 :doc:`CommandLine`
    198   Provides information on using the command line parsing library.
    199 
    200 :doc:`CodingStandards`
    201   Details the LLVM coding standards and provides useful information on writing
    202   efficient C++ code.
    203 
    204 :doc:`HowToSetUpLLVMStyleRTTI`
    205   How to make ``isa<>``, ``dyn_cast<>``, etc. available for clients of your
    206   class hierarchy.
    207 
    208 :doc:`ExtendingLLVM`
    209   Look here to see how to add instructions and intrinsics to LLVM.
    210 
    211 `Doxygen generated documentation <http://llvm.org/doxygen/>`_
    212   (`classes <http://llvm.org/doxygen/inherits.html>`_)
    213   (`tarball <http://llvm.org/doxygen/doxygen.tar.gz>`_)
    214 
    215 `Documentation for Go bindings <http://godoc.org/llvm.org/llvm/bindings/go/llvm>`_
    216 
    217 `ViewVC Repository Browser <http://llvm.org/viewvc/>`_
    218    ..
    219 
    220 :doc:`CompilerWriterInfo`
    221   A list of helpful links for compiler writers.
    222 
    223 :doc:`LibFuzzer`
    224   A library for writing in-process guided fuzzers.
    225 
    226 Subsystem Documentation
    227 =======================
    228 
    229 For API clients and LLVM developers.
    230 
    231 .. toctree::
    232    :hidden:
    233 
    234    AliasAnalysis
    235    BitCodeFormat
    236    BlockFrequencyTerminology
    237    BranchWeightMetadata
    238    Bugpoint
    239    CodeGenerator
    240    ExceptionHandling
    241    LinkTimeOptimization
    242    SegmentedStacks
    243    TableGenFundamentals
    244    TableGen/index
    245    DebuggingJITedCode
    246    GoldPlugin
    247    MarkedUpDisassembly
    248    SystemLibrary
    249    SourceLevelDebugging
    250    Vectorizers
    251    WritingAnLLVMBackend
    252    GarbageCollection
    253    WritingAnLLVMPass
    254    HowToUseAttributes
    255    NVPTXUsage
    256    AMDGPUUsage
    257    StackMaps
    258    InAlloca
    259    BigEndianNEON
    260    CoverageMappingFormat
    261    Statepoints
    262    MergeFunctions
    263    BitSets
    264    FaultMaps
    265    MIRLangRef
    266 
    267 :doc:`WritingAnLLVMPass`
    268    Information on how to write LLVM transformations and analyses.
    269 
    270 :doc:`WritingAnLLVMBackend`
    271    Information on how to write LLVM backends for machine targets.
    272 
    273 :doc:`CodeGenerator`
    274    The design and implementation of the LLVM code generator.  Useful if you are
    275    working on retargetting LLVM to a new architecture, designing a new codegen
    276    pass, or enhancing existing components.
    277 
    278 :doc:`Machine IR (MIR) Format Reference Manual <MIRLangRef>`
    279    A reference manual for the MIR serialization format, which is used to test
    280    LLVM's code generation passes.
    281 
    282 :doc:`TableGen <TableGen/index>`
    283    Describes the TableGen tool, which is used heavily by the LLVM code
    284    generator.
    285 
    286 :doc:`AliasAnalysis`
    287    Information on how to write a new alias analysis implementation or how to
    288    use existing analyses.
    289 
    290 :doc:`GarbageCollection`
    291    The interfaces source-language compilers should use for compiling GC'd
    292    programs.
    293 
    294 :doc:`Source Level Debugging with LLVM <SourceLevelDebugging>`
    295    This document describes the design and philosophy behind the LLVM
    296    source-level debugger.
    297 
    298 :doc:`Vectorizers`
    299    This document describes the current status of vectorization in LLVM.
    300 
    301 :doc:`ExceptionHandling`
    302    This document describes the design and implementation of exception handling
    303    in LLVM.
    304 
    305 :doc:`Bugpoint`
    306    Automatic bug finder and test-case reducer description and usage
    307    information.
    308 
    309 :doc:`BitCodeFormat`
    310    This describes the file format and encoding used for LLVM "bc" files.
    311 
    312 :doc:`System Library <SystemLibrary>`
    313    This document describes the LLVM System Library (``lib/System``) and
    314    how to keep LLVM source code portable
    315 
    316 :doc:`LinkTimeOptimization`
    317    This document describes the interface between LLVM intermodular optimizer
    318    and the linker and its design
    319 
    320 :doc:`GoldPlugin`
    321    How to build your programs with link-time optimization on Linux.
    322 
    323 :doc:`DebuggingJITedCode`
    324    How to debug JITed code with GDB.
    325 
    326 :doc:`MCJITDesignAndImplementation`
    327    Describes the inner workings of MCJIT execution engine.
    328 
    329 :doc:`BranchWeightMetadata`
    330    Provides information about Branch Prediction Information.
    331 
    332 :doc:`BlockFrequencyTerminology`
    333    Provides information about terminology used in the ``BlockFrequencyInfo``
    334    analysis pass.
    335 
    336 :doc:`SegmentedStacks`
    337    This document describes segmented stacks and how they are used in LLVM.
    338 
    339 :doc:`MarkedUpDisassembly`
    340    This document describes the optional rich disassembly output syntax.
    341 
    342 :doc:`HowToUseAttributes`
    343   Answers some questions about the new Attributes infrastructure.
    344 
    345 :doc:`NVPTXUsage`
    346    This document describes using the NVPTX back-end to compile GPU kernels.
    347 
    348 :doc:`AMDGPUUsage`
    349    This document describes how to use the AMDGPU back-end.
    350 
    351 :doc:`StackMaps`
    352   LLVM support for mapping instruction addresses to the location of
    353   values and allowing code to be patched.
    354 
    355 :doc:`BigEndianNEON`
    356   LLVM's support for generating NEON instructions on big endian ARM targets is
    357   somewhat nonintuitive. This document explains the implementation and rationale.
    358 
    359 :doc:`CoverageMappingFormat`
    360   This describes the format and encoding used for LLVMs code coverage mapping.
    361 
    362 :doc:`Statepoints`
    363   This describes a set of experimental extensions for garbage
    364   collection support.
    365 
    366 :doc:`MergeFunctions`
    367   Describes functions merging optimization.
    368 
    369 :doc:`InAlloca`
    370   Description of the ``inalloca`` argument attribute.
    371 
    372 :doc:`FaultMaps`
    373   LLVM support for folding control flow into faulting machine instructions.
    374 
    375 :doc:`CompileCudaWithLLVM`
    376   LLVM support for CUDA.
    377 
    378 Development Process Documentation
    379 =================================
    380 
    381 Information about LLVM's development process.
    382 
    383 .. toctree::
    384    :hidden:
    385 
    386    DeveloperPolicy
    387    MakefileGuide
    388    Projects
    389    LLVMBuild
    390    HowToReleaseLLVM
    391    Packaging
    392    ReleaseProcess
    393    Phabricator
    394 
    395 :doc:`DeveloperPolicy`
    396    The LLVM project's policy towards developers and their contributions.
    397 
    398 :doc:`Projects`
    399   How-to guide and templates for new projects that *use* the LLVM
    400   infrastructure.  The templates (directory organization, Makefiles, and test
    401   tree) allow the project code to be located outside (or inside) the ``llvm/``
    402   tree, while using LLVM header files and libraries.
    403 
    404 :doc:`LLVMBuild`
    405   Describes the LLVMBuild organization and files used by LLVM to specify
    406   component descriptions.
    407 
    408 :doc:`MakefileGuide`
    409   Describes how the LLVM makefiles work and how to use them.
    410 
    411 :doc:`HowToReleaseLLVM`
    412   This is a guide to preparing LLVM releases. Most developers can ignore it.
    413 
    414 :doc:`ReleaseProcess`
    415   This is a guide to validate a new release, during the release process. Most developers can ignore it.
    416 
    417 :doc:`Packaging`
    418    Advice on packaging LLVM into a distribution.
    419 
    420 :doc:`Phabricator`
    421    Describes how to use the Phabricator code review tool hosted on
    422    http://reviews.llvm.org/ and its command line interface, Arcanist.
    423 
    424 Community
    425 =========
    426 
    427 LLVM has a thriving community of friendly and helpful developers.
    428 The two primary communication mechanisms in the LLVM community are mailing
    429 lists and IRC.
    430 
    431 Mailing Lists
    432 -------------
    433 
    434 If you can't find what you need in these docs, try consulting the mailing
    435 lists.
    436 
    437 `Developer's List (llvm-dev)`__
    438   This list is for people who want to be included in technical discussions of
    439   LLVM. People post to this list when they have questions about writing code
    440   for or using the LLVM tools. It is relatively low volume.
    441 
    442   .. __: http://lists.llvm.org/mailman/listinfo/llvm-dev
    443 
    444 `Commits Archive (llvm-commits)`__
    445   This list contains all commit messages that are made when LLVM developers
    446   commit code changes to the repository. It also serves as a forum for
    447   patch review (i.e. send patches here). It is useful for those who want to
    448   stay on the bleeding edge of LLVM development. This list is very high
    449   volume.
    450 
    451   .. __: http://lists.llvm.org/pipermail/llvm-commits/
    452 
    453 `Bugs & Patches Archive (llvm-bugs)`__
    454   This list gets emailed every time a bug is opened and closed. It is
    455   higher volume than the LLVM-dev list.
    456 
    457   .. __: http://lists.llvm.org/pipermail/llvm-bugs/
    458 
    459 `Test Results Archive (llvm-testresults)`__
    460   A message is automatically sent to this list by every active nightly tester
    461   when it completes.  As such, this list gets email several times each day,
    462   making it a high volume list.
    463 
    464   .. __: http://lists.llvm.org/pipermail/llvm-testresults/
    465 
    466 `LLVM Announcements List (llvm-announce)`__
    467   This is a low volume list that provides important announcements regarding
    468   LLVM.  It gets email about once a month.
    469 
    470   .. __: http://lists.llvm.org/mailman/listinfo/llvm-announce
    471 
    472 IRC
    473 ---
    474 
    475 Users and developers of the LLVM project (including subprojects such as Clang)
    476 can be found in #llvm on `irc.oftc.net <irc://irc.oftc.net/llvm>`_.
    477 
    478 This channel has several bots.
    479 
    480 * Buildbot reporters
    481 
    482   * llvmbb - Bot for the main LLVM buildbot master.
    483     http://lab.llvm.org:8011/console
    484   * bb-chapuni - An individually run buildbot master. http://bb.pgr.jp/console
    485   * smooshlab - Apple's internal buildbot master.
    486 
    487 * robot - Bugzilla linker. %bug <number>
    488 
    489 * clang-bot - A `geordi <http://www.eelis.net/geordi/>`_ instance running
    490   near-trunk clang instead of gcc.
    491 
    492 
    493 Indices and tables
    494 ==================
    495 
    496 * :ref:`genindex`
    497 * :ref:`search`
    498