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