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