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