index.rst 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. Overview
  2. ========
  3. The DirectX HLSL Compiler is a compiler and related set of tools used to
  4. compile High-Level Shader Language (HLSL) programs into DirectX Intermediate
  5. Language (DXIL) representation. Applications that make use of DirectX for
  6. graphics, games, and computation can use it to generate shader programs. The
  7. DirectX HLSL Compiler is built on the 3.7 releases of LLVM and Clang.
  8. The LLVM compiler infrastructure supports a wide range of projects, from
  9. industrial strength compilers to specialized JIT applications to small
  10. research projects.
  11. Similarly, documentation is broken down into several high-level groupings
  12. targeted at different audiences:
  13. LLVM Design & Overview
  14. ======================
  15. Several introductory papers and presentations.
  16. .. toctree::
  17. :hidden:
  18. LangRef
  19. DXIL
  20. HLSLChanges
  21. :doc:`LangRef`
  22. Defines the LLVM intermediate representation.
  23. :doc:`DXIL`
  24. Defines the DirectX Intermediate Language (DXIL) for GPU shaders.
  25. `Introduction to the LLVM Compiler`__
  26. Presentation providing a users introduction to LLVM.
  27. .. __: http://llvm.org/pubs/2008-10-04-ACAT-LLVM-Intro.html
  28. `Intro to LLVM`__
  29. Book chapter providing a compiler hacker's introduction to LLVM.
  30. .. __: http://www.aosabook.org/en/llvm.html
  31. `LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation`__
  32. Design overview.
  33. .. __: http://llvm.org/pubs/2004-01-30-CGO-LLVM.html
  34. :doc:`HLSLChanges`
  35. Describes high-level changes made to LLVM and Clang to accomodate HLSL and DXIL.
  36. `LLVM: An Infrastructure for Multi-Stage Optimization`__
  37. More details (quite old now).
  38. .. __: http://llvm.org/pubs/2002-12-LattnerMSThesis.html
  39. User Guides
  40. ===========
  41. For those new to the LLVM system.
  42. The documentation here is intended for users who have a need to work with the
  43. intermediate LLVM representation.
  44. .. toctree::
  45. :hidden:
  46. CMake
  47. CommandGuide/index
  48. Lexicon
  49. Passes
  50. YamlIO
  51. GetElementPtr
  52. Frontend/PerformanceTips
  53. :doc:`CMake`
  54. An addendum to the main Getting Started guide for those using the `CMake
  55. build system <http://www.cmake.org>`_.
  56. :doc:`LLVM Command Guide <CommandGuide/index>`
  57. A reference manual for the LLVM command line utilities ("man" pages for LLVM
  58. tools).
  59. :doc:`Passes`
  60. A list of optimizations and analyses implemented in LLVM.
  61. `How to build the C, C++, ObjC, and ObjC++ front end`__
  62. Instructions for building the clang front-end from source.
  63. .. __: http://clang.llvm.org/get_started.html
  64. :doc:`Lexicon`
  65. Definition of acronyms, terms and concepts used in LLVM.
  66. :doc:`YamlIO`
  67. A reference guide for using LLVM's YAML I/O library.
  68. :doc:`GetElementPtr`
  69. Answers to some very frequent questions about LLVM's most frequently
  70. misunderstood instruction.
  71. :doc:`Frontend/PerformanceTips`
  72. A collection of tips for frontend authors on how to generate IR
  73. which LLVM is able to effectively optimize.
  74. Programming Documentation
  75. =========================
  76. For developers of applications which use LLVM as a library.
  77. .. toctree::
  78. :hidden:
  79. Atomics
  80. CodingStandards
  81. CommandLine
  82. ExtendingLLVM
  83. HowToSetUpLLVMStyleRTTI
  84. ProgrammersManual
  85. LibFuzzer
  86. :doc:`LLVM Language Reference Manual <LangRef>`
  87. Defines the LLVM intermediate representation and the assembly form of the
  88. different nodes.
  89. :doc:`Atomics`
  90. Information about LLVM's concurrency model.
  91. :doc:`ProgrammersManual`
  92. Introduction to the general layout of the LLVM sourcebase, important classes
  93. and APIs, and some tips & tricks.
  94. :doc:`CommandLine`
  95. Provides information on using the command line parsing library.
  96. :doc:`CodingStandards`
  97. Details the LLVM coding standards and provides useful information on writing
  98. efficient C++ code.
  99. :doc:`HowToSetUpLLVMStyleRTTI`
  100. How to make ``isa<>``, ``dyn_cast<>``, etc. available for clients of your
  101. class hierarchy.
  102. :doc:`ExtendingLLVM`
  103. Look here to see how to add instructions and intrinsics to LLVM.
  104. :doc:`LibFuzzer`
  105. A library for writing in-process guided fuzzers.
  106. Subsystem Documentation
  107. =======================
  108. For API clients and LLVM developers.
  109. .. toctree::
  110. :hidden:
  111. AliasAnalysis
  112. BitCodeFormat
  113. BlockFrequencyTerminology
  114. BranchWeightMetadata
  115. CodeGenerator
  116. ExceptionHandling
  117. LinkTimeOptimization
  118. TableGen/index
  119. MarkedUpDisassembly
  120. SystemLibrary
  121. SourceLevelDebugging
  122. SourceLevelDebuggingHLSL
  123. Vectorizers
  124. WritingAnLLVMBackend
  125. WritingAnLLVMPass
  126. HowToUseAttributes
  127. InAlloca
  128. CoverageMappingFormat
  129. MergeFunctions
  130. BitSets
  131. FaultMaps
  132. LLVMBuild
  133. :doc:`WritingAnLLVMPass`
  134. Information on how to write LLVM transformations and analyses.
  135. :doc:`WritingAnLLVMBackend`
  136. Information on how to write LLVM backends for machine targets.
  137. :doc:`CodeGenerator`
  138. The design and implementation of the LLVM code generator. Useful if you are
  139. working on retargetting LLVM to a new architecture, designing a new codegen
  140. pass, or enhancing existing components.
  141. :doc:`TableGen <TableGen/index>`
  142. Describes the TableGen tool, which is used heavily by the LLVM code
  143. generator.
  144. :doc:`AliasAnalysis`
  145. Information on how to write a new alias analysis implementation or how to
  146. use existing analyses.
  147. :doc:`Source Level Debugging with LLVM <SourceLevelDebugging>`
  148. This document describes the design and philosophy behind the LLVM
  149. source-level debugger.
  150. :doc:`Source Level Debugging with HLSL <SourceLevelDebuggingHLSL>`
  151. This document describes specifics of using source-level debuggers for DXIL
  152. and HLSL.
  153. :doc:`Vectorizers`
  154. This document describes the current status of vectorization in LLVM.
  155. :doc:`ExceptionHandling`
  156. This document describes the design and implementation of exception handling
  157. in LLVM.
  158. :doc:`BitCodeFormat`
  159. This describes the file format and encoding used for LLVM "bc" files.
  160. :doc:`System Library <SystemLibrary>`
  161. This document describes the LLVM System Library (``lib/System``) and
  162. how to keep LLVM source code portable
  163. :doc:`LinkTimeOptimization`
  164. This document describes the interface between LLVM intermodular optimizer
  165. and the linker and its design
  166. :doc:`BranchWeightMetadata`
  167. Provides information about Branch Prediction Information.
  168. :doc:`BlockFrequencyTerminology`
  169. Provides information about terminology used in the ``BlockFrequencyInfo``
  170. analysis pass.
  171. :doc:`MarkedUpDisassembly`
  172. This document describes the optional rich disassembly output syntax.
  173. :doc:`HowToUseAttributes`
  174. Answers some questions about the new Attributes infrastructure.
  175. :doc:`CoverageMappingFormat`
  176. This describes the format and encoding used for LLVM’s code coverage mapping.
  177. :doc:`MergeFunctions`
  178. Describes functions merging optimization.
  179. :doc:`InAlloca`
  180. Description of the ``inalloca`` argument attribute.
  181. :doc:`FaultMaps`
  182. LLVM support for folding control flow into faulting machine instructions.
  183. :doc:`LLVMBuild`
  184. Describes the LLVMBuild organization and files used by LLVM to specify
  185. component descriptions.
  186. Indices and tables
  187. ==================
  188. * :ref:`genindex`
  189. * :ref:`search`