================ @@ -0,0 +1,102 @@ +=============================================== +Architecture and Design of DXIL Support in LLVM +=============================================== + +.. contents:: + :local: + +.. toctree:: + :hidden: + +Introduction +============ + +LLVM supports reading and writing the `DirectX Intermediate Language. +<https://github.com/microsoft/DirectXShaderCompiler/blob/main/docs/DXIL.rst>`_, +or DXIL. DXIL is essentially LLVM 3.7 era bitcode with some +restrictions and various semantically important operations and +metadata. + +LLVM's implementation philosophy for DXIL support is to treat DXIL as +merely a representation format as much as possible. When reading DXIL, +we should translate everyting to generic LLVM constructs when +possible. Similarly, we should introduce DXIL-specific constructs as +late as possible in the process of lowering to the format. + +There are three places to look for DXIL related code in LLVM: The +`DirectX` backend, for writing DXIL; The `DXILUpgrade` pass, for +reading; and in library code that is shared between writing and +reading. We'll describe these in reverse order. + +Common Code for Reading and Writing +=================================== + +There's quite a bit of logic that needs to be shared between reading +and writing DXIL in order to avoid code duplication. While we don't +have a hard and fast rule about where such code should live, there are +generally three sensible places. Simple definitions of enums and +values that must stay fixed to match DXIL's ABI can be found in +`Support/DXILABI.h`, utilities to translate bidirectionally between +DXIL and modern LLVM constructs live in `lib/Transforms/Utils`, and +more analyses that are needed to derive or preserve information are +implemented as typical `lib/Analysis` passes. + +The DXILUpgrade Pass +==================== + +Translating DXIL to LLVM IR takes advantage of the fact that DXIL is ---------------- bogner wrote:
Yes, of course. I added a short paragraph mentioning how this works to try to clarify. https://github.com/llvm/llvm-project/pull/78221 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits